Frage

I Verwendung der MyDAC Komponenten durch devart (Corelab) machen den Zugriff auf MySQL aus Delphi (2006) Sehr oft muss ich mit Daten in einem TClientDataSet arbeiten Was ist der beste Weg, um die Datenmenge eines TMyQuery zu TClientDataSet konvertieren Derzeit bin ich mit

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;

Gibt es einen besseren Weg, dies zu tun?

War es hilfreich?

Lösung

Wenn Sie wirklich diese sehr oft brauchen, dann machen sie eine Funktion, etwa so:

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;

Mit dieser Funktion können in allen Orten statt TClientDataSet.Create verwenden können (), und es sei denn, eine Ausnahme ausgelöst wird Ihnen eine offene TClientDataSet wird gegeben, die und auf diese Weise besitzt auch befreit die beiden Hilfsobjekte.

(Anmerkung: Ich habe nur die DevArt Komponenten für MS SQL Server verwenden, so kann ich nicht testen Der Code auch Fehler enthalten kann, aber die allgemeine Idee funktioniert.).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top