Уничтожение 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 ответ
Решение
Вы можете просто использовать механизм владения Delphi. Вы можете передать в владельца (типа TComponent
) в конструкторе, и тогда ваш набор данных будет уничтожен всякий раз, когда уничтожается владелец. В вашем случае просто передайте форму как владелец.
function TDM.CreateWorkstationsList(Owner: TComponent): TADODataSet;
begin
DS := TADODataSet.Create (Owner);
...
end;
DataSource.DataSet := DM.CreateWorkstationsList (Self);
Вы также можете уничтожить набор данных вручную, например, в форме OnDestroy
событие.