销毁在运行时创建的TADODataset [英] Destroying TADODataset created in runtime

查看:207
本文介绍了销毁在运行时创建的TADODataset的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



 函数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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆