Question

Je me sers des composants Mydac de devart (corelab) pour accéder à MySql depuis Delphi (2006). Très souvent, j'ai besoin de travailler avec des données dans un TClientDataSet Quel est le meilleur moyen de convertir l'ensemble de données d'un TMyQuery en TClientDataSet J'utilise actuellement

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;

Y a-t-il une meilleure façon de faire cela?

Était-ce utile?

La solution

Si vous en avez vraiment besoin très souvent, faites-en une fonction, comme suit:

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;

Cette fonction que vous pouvez utiliser partout au lieu de TClientDataSet.Create (), et à moins qu'une exception ne soit déclenchée, un TClientDataSet ouvert, qui en est le propriétaire, libère les deux objets d'assistance.

(Remarque: je n'utilise que les composants DevArt pour MS Sql Server. Je ne peux donc pas tester. Le code peut très bien contenir des erreurs, mais l'idée générale fonctionne.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top