델파이의 tclientDataset에 tmyquery 데이터 세트를 덮는 것
문제
Devart (Corelab)의 MyDAC 구성 요소를 사용하여 Delphi (2006)에서 MySQL에 액세스하는 경우가 많습니다. TMIINDDATASET에서 데이터로 작업해야합니다.
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 () 대신 모든 장소에서 사용할 수 있으며 예외를 제기하지 않으면 개방형 tclientDataset을 소유하고 두 개의 도우미 개체를 해방시킵니다.
(참고 : MS SQL Server의 DevArt 구성 요소 만 사용하므로 테스트 할 수 없습니다. 코드에는 오류가 포함되어있을 수 있지만 일반적인 아이디어는 작동합니다.)
제휴하지 않습니다 StackOverflow