"Fetchall" mit ZEOS

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Aliobaba
Lazarusforum e. V.
Beiträge: 475
Registriert: Di 1. Mai 2012, 09:11

"Fetchall" mit ZEOS

Beitrag von Aliobaba »

Hallo,

Bisher habe ich die Inhalte einer Spalte nach einer Selektion immer in einen String geschrieben, indem ich die Datenbank Zeile für Zeile durchgegangen bin und den Spalteninhalt eingefügt habe. So etwa:

Code: Alles auswählen

  string := '';
  Ffufe.ZQueryFundus2.First;
  while not Ffufe.ZQueryFundus2.EOF do  
  begin
     string  := string + ZQueryFundus2.FieldByName('CPfadG').AsString;
     Ffufe.ZQueryFundus2.Next;
  end;
Funktioniert prima! Geht auch ziemlich schnell; bin eigentlich recht zufrieden.
Jetzt habe ich aber gelesen, dass dies mit "Fetchall()" auch und schneller gehen soll. (??)
Nur wie lautet der Code, um dieses "Fetchall()" so zu nutzen, dass ich das Ergebnis in einer Zeile oder in einer Stringlist habe?

Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Soner
Beiträge: 513
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: "Fetchall" mit ZEOS

Beitrag von Soner »

Ich glaube du hast da etwas falsches gelesen.
Bisher weiss ich, dass Zeos bei einer Abfrage alles holt, das heißt "fetchall". Und SQL-Db nur einen Teil, siehe TSQLQuery.PacketRecords. Deshalb ist SQLDB am Anfang sehr schnell aber liefert bei TSQLQuery.RecordCount falschen Wert, siehe wieder TSQLQuery.PacketRecords, während TZQuery.RecordCount von Anfang an den richtigen Wert liefert. Meine Untersuchungen liegen 2-3 Jahre zurück ob das sich jetzt geändert hat, weiss ich nicht.
Vielleicht solltest du die Frage auch bei Zeos-Forum stellen, die Entwickler von Zeos sind sehr nett und hilfsbereit.

Du kannst dein Programm schneller machen in dem du TZQuery.DisableControls und TZQuery.EnableControls benutzt, etwa so:

Code: Alles auswählen

  //.....
  ZQueryFundus2.DisableControls;
  try
    Ffufe.ZQueryFundus2.First;
    while not Ffufe.ZQueryFundus2.EOF do  
    begin
       string  := string + ZQueryFundus2.FieldByName('CPfadG').AsString;
       Ffufe.ZQueryFundus2.Next;
    end;
   finally
     ZQueryFundus2.EnableControls;
   end; 

Antworten