首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得在WITH语句中创建的TQuery对象的引用?

如何获得在WITH语句中创建的TQuery对象的引用?
EN

Stack Overflow用户
提问于 2012-01-18 15:03:51
回答 3查看 2.2K关注 0票数 5

可能重复:

Reference object instance created using “with” in Delphi

在Delphi中创建查询对象的一个方法遵循第一个代码示例。它提供了对对象的引用,然后我可以将对象传递给函数。

代码语言:javascript
复制
procedure SomeProcedure;
var
  qry: TQuery;
begin
  qry := TQuery.Create(nil);

  with qry do
  begin
    Connection := MyConn;
    SQL.Text := 'SELECT * FROM PEOPLE';
    Open;

    funcDisplayDataSet(qry);
    Free;
  end;

end;

在WITH语句中包含Create对象的WITH语句也可以这样做吗?

代码语言:javascript
复制
procedure SomeProcedure;
begin
  with TQuery.Create(nil) do
  begin
    Connection := MyConn;
    SQL.Text := 'SELECT * FROM PEOPLE';
    Open;

    funcDisplayDataSet( ??? );  // Here I'm unsure how to pass the object created...
    Free;
  end;
end;

我可以将这个动态对象传递给类似于“function (TQuery)”这样的函数吗?

,我只想知道这是否可能。我不是在找一个总结为什么WITH语句是坏的或好的。还有关于StackOver流的其他文章和讨论。

EN

回答 3

Stack Overflow用户

发布于 2012-01-18 15:16:35

一般来说,这是不可能的,以一种干净的方式。你的选择:

使用Self.

  • Stop向类添加一个方法,并为实例创建一个局部变量。

如果您能够控制类,则选项1是可行的。但这让这门课看起来很奇怪。为什么一个类需要一个返回实例的实例方法?如果您无法控制这个类,那么您可以像RRUZ所建议的那样使用一个类助手,但我认为使用类助手是最后的手段。我从来没有解决过班级帮手的问题。

这就剩下了选择2,这就是我解决问题的方法。

票数 6
EN

Stack Overflow用户

发布于 2012-01-18 15:21:30

那么使用类助手呢?

代码语言:javascript
复制
type
  TQueryHelper = class helper for TQuery
  public
    function Instance: TQuery;
  end;


function TQueryHelper.Instance: TQuery;
begin
  Result := Self;
end;

像这样使用

代码语言:javascript
复制
   With TQuery.Create(nil) do
   begin
     SQL.Text:='Select * from OTGH';
     ShowMessage(Instance.SQL.Text);
   end;
票数 5
EN

Stack Overflow用户

发布于 2012-01-18 15:25:16

with语句不提供可用于传递语句外部的引用。

使用TQuery,您可以通过使用具有父级引用的属性来绕过它:

代码语言:javascript
复制
begin
  with TQuery.Create(nil) do
  begin
    Connection := MyConn;
    SQL.Text := 'SELECT * FROM PEOPLE';
    Open;
    // Fields have reference to parent component, but your implementation may vary
    funcDisplayDataSet(TQuery(Fields.Fields[0].GetParentComponent));
    Free;
  end;
end;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8912337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档