Уничтожение 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

Насколько я знаю, если я создаю объект вручную во время выполнения, я должен в какой-то момент уничтожить его вручную, чтобы избежать утечек памяти. Как и когда я должен уничтожить свой созданный набор данных?


person Vasiliy Volkov    schedule 14.11.2013    source источник


Ответы (1)


Вы можете просто использовать механизм владения Delphi. Вы можете передать владельца (типа TComponent) в конструкторе, и тогда ваш набор данных будет уничтожен всякий раз, когда владелец будет уничтожен. В вашем случае просто передайте форму как владелец.

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

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

Вы также можете уничтожить набор данных вручную, например, в событии OnDestroy формы.

person jpfollenius    schedule 14.11.2013
comment
Спасибо, это как раз то, что мне было нужно. - person Vasiliy Volkov; 14.11.2013