如何动态生成Tquery倥件?(30分)

  • 主题发起人 主题发起人 stupid
  • 开始时间 开始时间
temp:TQuery;
temp:=tquery.create(nil);
temp.datasource:='test';
temp.sql.clear;
temp.sql.add('select * from ...');
temp.sql.add(' where ...');
temp.ExecSQL;
//从temp中取数据
temp.free;
 
呵呵,我现在用tquery全是动态生成的,习惯了.除非用来绑定,否则最好动态生成.
另:
to amo: 给你挑个毛病,你的例子里sql语句是"select", 那么打开方式应该为
open,不是ExecSQL. 肯定是你粗心了. :-)
 
嘿嘿,
多谢cAkk指正!
随手写的,没想什么,
下次一定认真一点。
 
CREATE(NIL)和create(nil)有什么区别?
Parent属性有什么用?
 
只有字符大小写上的区别:)
Delphi的编译器会在编译时先将所有的小写字母换成大写字母。
Parent的属性是干吗的,我一下还真说不上来。
字面含意是父组件。通过设置Parent:=...把组件加入到了父组件的组件列表中。
哪位大富翁帮帮忙再用文字解释一下吧。
下面抄一段代码给你看看吧:
procedure TControl.SetParent(AParent: TWinControl);
begin
if FParent <> AParent then
begin
if Parent = Self then
raise EInvalidOperation.Create(SControlParentSetToSelf);
if FParent <> nil then
FParent.RemoveControl(Self);
if AParent <> nil then
AParent.InsertControl(Self);
end;
end;
一般用Parent:=...
最后都调用了SetParent.
 
动态生成query的owner为nil时(TQuery.create(nil))应当再加上动态生成的
TDatabase, TSession, 并将它们连起来. 另外, 这样的query不会自动释放.
如果不愿意写那么多, 最好用TQuery.Create(Application) 或者 TQuery.Create(Form).
这样做有一个明显好处, 如果你忘了释放query, 程序结束时会自动释放的.
 
对不起,敲错了.
CREATE(NIL)和create(nil)有什么区别?
应该是:<Font Color=#FF0000>CREATE(selfL)和create(nil)有什么区别?</font><br>
 
Create的参数是owner, self表示当前的class,一般就是form, 就是说属于当前form, 作用是form释放的时候会帮你把动态定义的东西释放掉,不用你操心.
参数为空(nil)时, 你必须自己释放控件.
不过最好还是自己释放控件,保险点. :-)
 
var tq:TQuery;
begin
tq:=TQuery.Create(Application);
tq.DataBaseName:=....;
with tqdo
begin
close;
SQL.clear;
SqL.Add('select ....');
Sql.Add('From ....');
ExecSql;
Open;
Close;
Free;
end;
end;
你可以试一试,不过free是一定要有的,不释放掉会占资源的
还有,此方法一定可行,别忘了给老兄我加分啊!:):)
 
多人接受答案了。
 
后退
顶部