【问题标题】:Destroying TADODataset created in runtime销毁在运行时创建的 TADODataset
【发布时间】:2013-11-14 13:39:57
【问题描述】:

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

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

【问题讨论】:

    标签: delphi function destroy tadodataset


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,这正是我所需要的。
    猜你喜欢
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    相关资源
    最近更新 更多