0

我有一个返回 TADODataset 对象的函数:

// 内部数据模块:

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

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

4

1 回答 1

2

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

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

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

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

于 2013-11-14T13:59:45.590 回答