Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#24

AW: Abfrage von großen Datenmengen

  Alt 3. Jan 2013, 16:34
...verwendest lediglich ein TSQLDataSet (das ist unidirektional und somit nicht in einem Grid darstellbar).
Warum sollte man es nicht in einem TStringgrid darstellen können?
Gemeint war natürlich ein TDBGrid! Das kann mit unidirektionalen DataSets nichts anfangen.

Das Simple-/ClientDataSet lädt stndardmäßig das komplette Abfrageergebnis in den Hauptspeicher und da knallt es natürlich ab einer gewissen Menge.
Bei MySQL ist das egal da es hier keine serverseitigen Curser gibt.
Das hat damit nichts zu tun. Das ClientDataSet schickt eine Anfrage an den DataSetProvider, der diese wiederum an das SQLDataSet weitergibt. Dieses liefert eine Ergebnismenge, die der DataSetProvider an das ClientDataSet weitergibt. Intern wird dabei das MyBase-Format (Midas) zum Transport verwendet, bei dem die gesamte Datenmenge im Hauptspeicher vorliegt.

20.000 Datensätze sollten aber (wenn keine größeren Blobs) beteiligt sind selbst in einem 32-Bit Prozess noch keine Probleme darstellen.
Prinzipiell ist das richtig, aber wenn so mit den Feldgrößen geast wird. Wie Sir Rufo treffend bemerkt, hat die Buchungstabelle 73 Felder vom Typ VarChar(500). Das sind selbst bei AnsiChar ca. 37000 Byte pro Record. Bei 20000 Records kommen wir da schon auf fast 750MB. Wenn die intern beim Transport auch nur einmal by-value kopiert oder in einen Memorystream geschrieben wird, sind wir schon bei 1,5 GB.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat