我有一个返回TADODataset对象的函数:
//在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;
这就是我计划使用它的方式:
// inside main form:
tvWorkstation.DataController.DataSource.DataSet := DM.GetWorkstationsList; // tvWorkstation is TcxGridDBTableView
据我所知,如果我在运行时手动创建一个对象,我必须在某个时刻手动销毁它以避免内存泄漏。我应该如何以及何时销毁我创建的数据集?
答案 0 :(得分:2)
您可以简单地使用Delphi的所有权机制。您可以在构造函数中传入所有者(类型为TComponent
),然后在销毁所有者时销毁您的数据集。在您的情况下,只需将表单作为所有者传递。
function TDM.CreateWorkstationsList(Owner: TComponent): TADODataSet;
begin
DS := TADODataSet.Create (Owner);
...
end;
DataSource.DataSet := DM.CreateWorkstationsList (Self);
您也可以手动销毁数据集,例如在表单的OnDestroy
事件中。