销毁在运行时创建的TADODataset

时间:2013-11-14 13:39:58

标签: delphi function destroy tadodataset

我有一个返回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

据我所知,如果我在运行时手动创建一个对象,我必须在某个时刻手动销毁它以避免内存泄漏。我应该如何以及何时销毁我创建的数据集?

1 个答案:

答案 0 :(得分:2)

您可以简单地使用Delphi的所有权机制。您可以在构造函数中传入所有者(类型为TComponent),然后在销毁所有者时销毁您的数据集。在您的情况下,只需将表单作为所有者传递。

function TDM.CreateWorkstationsList(Owner: TComponent): TADODataSet;
begin
DS := TADODataSet.Create (Owner);
...
end;

DataSource.DataSet := DM.CreateWorkstationsList (Self);

您也可以手动销毁数据集,例如在表单的OnDestroy事件中。