DelphiでクエリデータセットをClientDataSetに変換する
質問
devart(corelab)のMydacコンポーネントを使用して、DelphiからMySqlにアクセスします(2006) TClientDataSetのデータを操作する必要が非常に頻繁にあります TMyQueryのデータセットをTClientDataSetに変換する最良の方法は何ですか 現在使用しています
var
MyQuery : TMyQuery;
Dsp : TDataSetProvider;
Cds : TClientDataSet;
begin
MyQuery := nil;
Dsp := nil;
Cds := nil;
try
MyQuery := TMyQuery.Create(nil);
Dsp := TDataSetProvider.Create(nil);
Cds := TClientDataSet.Create(nil);
MyQuery.Connection := TheConnection;
MyQuery.SQL.Text := CmdStr;
Dsp.DataSet := MyQuery;
Cds.SetProvider(Dsp);
Cds.Open;
////////////////////////////////////////////////////////////////////////
/// MAKE USES OF THE CDS //
////////////////////////////////////////////////////////////////////////
finally
FreeAndNil(Cds);
FreeAndNil(Dsp);
FreeAndNil(MyQuery);
end;
end;
これを行うより良い方法はありますか?
解決
本当に頻繁に必要な場合は、次のように関数にしてください:
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()の代わりにすべての場所で使用できます。例外が発生しない限り、2つのヘルパーオブジェクトを所有し、その方法で解放するTClientDataSetが開かれます。
(注:MS Sql ServerにはDevArtコンポーネントのみを使用しているため、テストできません。コードにエラーが含まれている可能性がありますが、一般的な考え方は機能します。)
所属していません StackOverflow