问题描述
函数TDM.GetWorkstationsList:TADODataset;
var
DS:TADODataSet;
begin
DS:= TADODataSet.Create(nil);
DS.Connection:= MyConnection; // MyConnection是TADOConnection
DS.CommandType:= cmdText;
DS.CommandText:='选择*从工作站';
DS.Active:= True;
结果:= DS;
end;
这是我计划使用它的方式:
//在主表单中:
tvWorkstation.DataController.DataSource.DataSet:= DM.GetWorkstationsList; // tvWorkstation是TcxGridDBTableView
据我所知,如果我在运行时手动创建一个对象,必须在某个时候手动销毁它以避免内存泄漏。我应该如何销毁我创建的数据集?
你可以在构造函数中传入一个所有者(类型为 TComponent
),然后当所有者被销毁时,你的数据集将被销毁。在你的情况下,只需通过表单作为所有者。 function TDM.CreateWorkstationsList(Owner:TComponent):TADODataSet;
begin
DS:= TADODataSet.Create(Owner);
...
end;
DataSource.DataSet:= DM.CreateWorkstationsList(Self);
您也可以手动销毁数据集,例如在表单的 OnDestroy
事件。
I have a function that returns a TADODataset object:
// inside DataModule:
function TDM.GetWorkstationsList: TADODataset;
var
DS: TADODataSet;
begin
DS := TADODataSet.Create(nil);
DS.Connection := MyConnection; // MyConnection is TADOConnection
DS.CommandType := cmdText;
DS.CommandText := 'SELECT * FROM Workstation';
DS.Active := True;
Result := DS;
end;
This is how I plan to use it:
// inside main form:
tvWorkstation.DataController.DataSource.DataSet := DM.GetWorkstationsList; // tvWorkstation is TcxGridDBTableView
As far as I know, if I create an object manually in runtime, I must destroy it manually at some moment to avoid memory leaks. How and when should I destroy my created dataset?
You can simply make use of Delphi's ownership mechanism. You can pass in an owner (of type TComponent
) in the constructor and then your data set will be destroyed whenever the owner is destroyed. In your case, just pass the form as the owner.
function TDM.CreateWorkstationsList(Owner: TComponent): TADODataSet;
begin
DS := TADODataSet.Create (Owner);
...
end;
DataSource.DataSet := DM.CreateWorkstationsList (Self);
You could also destroy the data set manually, for example in the form's OnDestroy
event.
这篇关于销毁在运行时创建的TADODataset的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!