문제

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 구성 요소 만 사용하므로 테스트 할 수 없습니다. 코드에는 오류가 포함되어있을 수 있지만 일반적인 아이디어는 작동합니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top