Если вам действительно нужно это очень часто, сделайте это функцией, например:
function CreateAndOpenClientDataset(AOwner: TComponent;
AConnection: TConnection; ACommand: string): TClientDataSet;
var
MyQuery: TMyQuery;
Dsp: TDataSetProvider;
begin
Result := TClientDataSet.Create(AOwner);
try
MyQuery := TMyQuery.Create(Result);
MyQuery.Connection := AConnection;
MyQuery.SQL.Text := ACommand;
Dsp := TDataSetProvider.Create(Result);
Dsp.DataSet := MyQuery;
Result.SetProvider(Dsp);
Result.Open;
except
Result.Free;
raise;
end;
end;
Эта функция, которую вы можете использовать во всех местах вместо TClientDataSet.Create (), и, если исключение не возникнет, вам будет предоставлен открытый TClientDataSet, который владеет и таким образом также освобождает два вспомогательных объекта.
(Примечание: я использую только компоненты DevArt для MS Sql Server, поэтому не могу тестировать. Код может содержать ошибки, но общая идея работает.)