比如说
procedure TDMMain.FillDicComboBox(aDBComboBox:TDBLookupComboBox;strFilter:string);
var
datasource:TDataSource;
aDataset:TADODataSet;
begin
datasource:=TDataSource.Create(nil);
aDataset:=Self.GetDataset('select Code,Name from Dictionary '
+'where Filter='+''''+strFilter+'''');
datasource.DataSet:=aDataset;
aDBComboBox.ListSource:=datasource;
aDBComboBox.ListField:='Name';
aDBComboBox.KeyField:='Code';
end;
我如果调用DMMain.FillDicComboBox(DBLookupComboBox1,'Country');
会不会有什么问题?(FillDicComboBox中的datasource/aDataset什么时候会释放啊?要我自己去释放么?)
还有,这样的代码可以么?ds会在什么时候释放掉啊?
function TDMMain.GetDataset(strSql:string):TADODataSet;
var
ds:TADODataSet;
begin
ds:=TADODataSet.Create(nil);
try
begin
with ds do
begin
Connection:=Cnn;//Cnn为一打开的数据库连接
CommandType:=cmdText;
CommandText:=strSql;
CursorLocation:=clUseClient;
CursorType:=ctStatic;
LockType:=ltBatchOptimistic;
Open;
end;
end
except
on E:Exception do MessageBox(0,Pchar(E.Message),'',MB_OK);
end;
Result:=ds;
end;
恳请赐教!
9 个解决方案
#1
这都要你手工释放。
Ds.Free;
#2
用
XXX.Create(self)
or
XXX..Create(Application)
這類, 都可讓控件的parent 在釋放時, 同時釋放它們
XXX.Create(self)
or
XXX..Create(Application)
這類, 都可讓控件的parent 在釋放時, 同時釋放它們
#3
什么时候释放啊?在函数里释放??那不是没有返回值了么?
#4
但是
datasource:TDataSource;
aDataset:TADODataSet;
都是在函数里动态创建的阿?他们的parent是谁啊?
datasource:TDataSource;
aDataset:TADODataSet;
都是在函数里动态创建的阿?他们的parent是谁啊?
#5
都是在函数里动态创建的阿?他们的parent是谁啊?
你用的是nil,没人帮你,你不用的时候就释放,比如退出的时候。
你用的是nil,没人帮你,你不用的时候就释放,比如退出的时候。
#6
第一个例子中DBLookupComboBox1被释放后,他的ListSource会自动释放掉么?
#7
miky(miky)
退出的时候?你指的是函数退出的时候么?那我的GetDataset函数不是返回空值了么?
退出的时候?你指的是函数退出的时候么?那我的GetDataset函数不是返回空值了么?
#8
你返回的对象总会赋给某一个变量吧。你直接释放这个变量不就完了。
如果你想要自动释放的话,一个是不要使用nil作为Owner,随便找一个都行的(比如Application)。或者使用接口,那样在你的接口对象引用计数为零的时候系统会自动释放它的。
如果你想要自动释放的话,一个是不要使用nil作为Owner,随便找一个都行的(比如Application)。或者使用接口,那样在你的接口对象引用计数为零的时候系统会自动释放它的。
#9
哦。明白了,结贴!
#1
这都要你手工释放。
Ds.Free;
#2
用
XXX.Create(self)
or
XXX..Create(Application)
這類, 都可讓控件的parent 在釋放時, 同時釋放它們
XXX.Create(self)
or
XXX..Create(Application)
這類, 都可讓控件的parent 在釋放時, 同時釋放它們
#3
什么时候释放啊?在函数里释放??那不是没有返回值了么?
#4
但是
datasource:TDataSource;
aDataset:TADODataSet;
都是在函数里动态创建的阿?他们的parent是谁啊?
datasource:TDataSource;
aDataset:TADODataSet;
都是在函数里动态创建的阿?他们的parent是谁啊?
#5
都是在函数里动态创建的阿?他们的parent是谁啊?
你用的是nil,没人帮你,你不用的时候就释放,比如退出的时候。
你用的是nil,没人帮你,你不用的时候就释放,比如退出的时候。
#6
第一个例子中DBLookupComboBox1被释放后,他的ListSource会自动释放掉么?
#7
miky(miky)
退出的时候?你指的是函数退出的时候么?那我的GetDataset函数不是返回空值了么?
退出的时候?你指的是函数退出的时候么?那我的GetDataset函数不是返回空值了么?
#8
你返回的对象总会赋给某一个变量吧。你直接释放这个变量不就完了。
如果你想要自动释放的话,一个是不要使用nil作为Owner,随便找一个都行的(比如Application)。或者使用接口,那样在你的接口对象引用计数为零的时候系统会自动释放它的。
如果你想要自动释放的话,一个是不要使用nil作为Owner,随便找一个都行的(比如Application)。或者使用接口,那样在你的接口对象引用计数为零的时候系统会自动释放它的。
#9
哦。明白了,结贴!