Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADODataSet als ClientDataSet verwenden (https://www.delphipraxis.net/138220-adodataset-als-clientdataset-verwenden.html)

TheFrog 5. Aug 2009 10:48

Datenbank: FireBird • Version: 1.5 • Zugriff über: IBX-Komponenten

ADODataSet als ClientDataSet verwenden
 
Hallo zusammen,

ich versuche gerade ein TADODataSet als ClientDataSet zu verwenden.

Ich möchte die Daten, sowie die Struktur einer Query übernehmen. Dabei ist meine Ausgangskomponente eine TIBQuery (was sich aber auf ein TDataSet reduzieren lässt).

Die Struktur habe ich durch folgenden Code übernommen:

Delphi-Quellcode:
  // Struktur erstellen
  AClientDataSet.Active := False;
  AClientDataSet.FieldDefs.Clear;
  AClientDataSet.FieldDefs.Assign(ADataSet.FieldDefs);

  // DataSet erstellen und öffnen
  AClientDataSet.CreateDataSet;
  AClientDataSet.Active := True;
Nun habe ich die Frage, wie ich die Werte aus dem DataSet, sprich die Datensätze übernehmen kann. Gibt es hier eine ähnliche Möglichkeit wie beim ClientDataSet über einen Provider alle Daten auf einmal zu übernehmen, oder muss ich Datensatz für Datensatz übernehmen?

Merci, Hans.

alzaimar 5. Aug 2009 11:36

Re: ADODataSet als ClientDataSet verwenden
 
Nun ja, im Endeffekt werden die Datensätze ja eh sequentiell übernommen. Ob Du das nun machst, oder eine Methode das übernimmt, ist dann wurscht.

TheFrog 5. Aug 2009 12:25

Re: ADODataSet als ClientDataSet verwenden
 
So hab's ich auch implementiert, ich dachte nur es müsste eine elegantere Lösung geben, analog zum Midas-ClientDataSet.

Hier meine Implementierung:

Delphi-Quellcode:
   
  ADataSet.First;
  while not ADataSet.Eof do
  begin
    AClientDataSet.Append;
    // Feldwerte übernehmen
    for i := 0 to ADataSet.Fields.Count - 1 do
      AClientDataSet.Fields[i].Value := ADataSet.Fields[i].Value;
    AClientDataSet.Post;
    ADataSet.Next;
  end;
Hans.

alzaimar 5. Aug 2009 13:31

Re: ADODataSet als ClientDataSet verwenden
 
Du könntest das noch in einer Transaktion kapseln. Dann geht es schneller. Falls auf der Ziel-DB noch andere arbeiten, solltest Du z.B. alle 100-1000 Datensätze ein 'Commit' durchführen.

TheFrog 5. Aug 2009 14:27

Re: ADODataSet als ClientDataSet verwenden
 
Ich benutze mein ADODataSet rein als ClientDataSet, sprich als temporäre Memory-Table, d.h. dieses wird nicht an eine DB gebunden. Ich denke, dann bringt mit auch die Transaktion in diesem Fall nichts.

Merci, Hans.

alzaimar 5. Aug 2009 15:23

Re: ADODataSet als ClientDataSet verwenden
 
Nee, dann natürlich nicht. Aber wieso dann eine TADODataset und kein TClientDataset? :gruebel:

TheFrog 5. Aug 2009 15:34

Re: ADODataSet als ClientDataSet verwenden
 
Weil ich da den großen Vorteil habe, dass ich mich nicht mit der MidasLib, Midas.dll, usw. rumschlagen muss. Damit hatte ich des öfteren schon Schwierigkeiten.

Und das TADODataSet funktioniert hervorragend für diese Zwecke.

Hans.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz