我在Delphi中用于创建查询对象的一种方法遵循第一个代码示例.它给了我对象的引用,然后我可以将对象传递给一个函数.
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;
Run Code Online (Sandbox Code Playgroud)
是否也可以在WITH语句中执行此操作,其中您的Create对象包含在WITH语句中?
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;
Run Code Online (Sandbox Code Playgroud)
我可以将这个动态对象传递给像`funcDisplayDataSet(TQuery)这样的函数吗?
我只是想知道这是否可行.我不是在寻找关于为什么WITH语句不好或好的总结.StackOver流程中有其他帖子与讨论.*
一般来说,这不可能以干净的方式进行.你的选择:
Self.with并为实例创建局部变量.如果您掌握了课程,选项1是可行的.但这让班级看起来很奇怪.为什么类需要一个返回实例的实例方法?如果您无法控制该类,那么您可以使用类助手,因为RRUZ建议但我认为使用类助手是最后的手段.我从来没有解决过类助手的问题.
这留下了选项2.这将是我如何解决问题.
使用类助手怎么样?
type
TQueryHelper = class helper for TQuery
public
function Instance: TQuery;
end;
function TQueryHelper.Instance: TQuery;
begin
Result := Self;
end;
Run Code Online (Sandbox Code Playgroud)
并使用这样的
With TQuery.Create(nil) do
begin
SQL.Text:='Select * from OTGH';
ShowMessage(Instance.SQL.Text);
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1853 次 |
| 最近记录: |