关于动态控件(100分)

  • 主题发起人 quicksoft
  • 开始时间
Q

quicksoft

Unregistered / Unconfirmed
GUEST, unregistred user!
1、在窗体中直接使用ADOQUERY控件,当窗体关闭时(action:=cafree),该控件是否自动释放空间?
2、在窗体中动态声明MyQuery:=TADOQuery.Create(Appliction),是否用Try...Finally来手工释放;
3、在Create中可以用Self、Application、Application.Owner都可以,请问各参数有什么区别?
 

1、看你Create时AOwner是什么。
2、不断地创建、释放很好玩吗?
3、Self由窗体释放,Application在程序关闭时释放
只是个人见解。
 
1.是的
2.看你的MyQuery是在哪声明的,如果是
private
MyQuery:TADOQuery;
则会和窗体一起释放
如果是
var
Form1 : TForm1;
MyQuery:TADOQuery;
则不会释放
如果是在过程中
function GetRecordSetStrings(SQLString:String):TStrings;
//根据SQL语句取得第一个字段的字符串列表
//返回TStrings的指针
var
rstemp:TADODataSet;
begin
result:=TStringList.Create;
rstemp:=GetRecordSet(SQLString);
if assigned(rstemp) then
while not rstemp.Eof do
begin
result.Add(rstemp.Fields[0].AsString);
rstemp.Next;
end;
rstemp.Free;
end;
3.
self大多数情况下代表当前窗体对象,也就是说,
self.Show可以写成Show
而TForm1中
TForm2.Create(self);
的self就是指form1//如果你的实例名是form1的话
application就是应用程序啦
application.owner?????这是干什么?应该是个空指针,因为应用程序没有拥有者(普通EXE)
还不如写成create(nil)
要不就是create(self.owner)或create(form1.owner)什么的

 
1、Yes
2、ysai的回答较好,最好写Try。。。Finally。。。adoquery.free;
3、self在当前窗体新建、appliction在程序中新建、appliction。aowner是新建自己,没有父类!
 
多人接受答案了。
 
如果在线程里调用就无法使用self,只能用Application
 
顶部