AW: Große Datenmengen richtig verarbeiten bzw. Out of Memory
Davon gehe ich aus.
|
AW: Große Datenmengen richtig verarbeiten bzw. Out of Memory
Zitat:
Bei SQLite läuft die DB im eigenen Adressraum (Embedded). Das was bei einer richtigen SQL-Datenbank mit eigenen Prozess gut/positiv ist, kann für eine Embedded-DB den gegenteiligen Effekt bewirken. |
AW: Große Datenmengen richtig verarbeiten bzw. Out of Memory
Also ich hatte auf den vorherigen Post
Zitat:
Zitat:
Bezieht sich darauf Deine Antwort? |
AW: Große Datenmengen richtig verarbeiten bzw. Out of Memory
Wenn wir schon bei solchen Dingen sind, dann noch von mir der Hinweis, dass vor dem
Delphi-Quellcode:
noch ein
while not ZQuery1.Eof do
begin // Datensatz verarbeiten ZQuery1.Next; end;
Delphi-Quellcode:
gemacht werden sollte.
ZQuery1.First;
Nach einem Open kann es in einigen Fällen dazu kommen, dass EOF true ist. Bekannt sind mir folgende Fälle: - kein FetchAll - Nur ein Datensatz in der Ergebnismenge Das passierte mir in den Fällen auch nur sehr selten, aber ich mache immer ein First, seitdem ich mal Probleme damit hatte. Es ist gut möglich, dass das Problem in neueren Delphi-Versionen nicht mehr existiert. Das letzte mal hatte ich das Problem mit XE2. |
AW: Große Datenmengen richtig verarbeiten bzw. Out of Memory
Hallo,
Zitat:
Welche DB und welche Version von FireDAC hattest Du denn damals? |
AW: Große Datenmengen richtig verarbeiten bzw. Out of Memory
Zitat:
|
AW: Große Datenmengen richtig verarbeiten bzw. Out of Memory
@hoika:
Das Phänomen hatte ich mit verschiedenen DBs und Zugriffskomponenten. Die genutzten Query-Komponenten waren aber Ableitungen von TDataSet. btw: Das ist kein BDE-Problem. Das nutze ich schon gefühlte Jahrhunderte nicht mehr. Es mag durchaus sein, dass das mit Zeos und Embedded-Datenbanken nicht passiert, aber das kann ich bei mir nicht prüfen. Übrigens hatte ich auch mal Probleme mit
Delphi-Quellcode:
. Im TDataSet gibt es dafür wohl ein Vergleich auf Recordcount, was durchaus mal fehlschlagen kann, da das auch 0 sein kann, wenn Datensätze gefunden wurden. Meines Wissens hängt das von der DB und der Property FetchAll ab. Daher prüfe ich nur noch, ob eof und bof gleichzeitig true sind.
IsEmpty
|
AW: Große Datenmengen richtig verarbeiten bzw. Out of Memory
Zitat:
(oder könnte es sein, daß die Qualität der DB-Komponenten nicht so konsistent ist wie wir es gerne hätten) Gruß K-H |
AW: Große Datenmengen richtig verarbeiten bzw. Out of Memory
Ich denke, das ist wie mit dem Vergleich einer Boolean Variablen auf True/False. Normalerweise läuft trotzdem alles korrekt.
Mir ist es einfach vor Jahren mal passiert und seitdem gehe ich den sicheren Weg. |
AW: Große Datenmengen richtig verarbeiten bzw. Out of Memory
Mir ist es auch ganz selten mal passiert, das BoF, EoF "falsche" Werte lieferten.
Das liegt wohl weniger an den Komponenten, sondern an dem, was die Datenbank (oder irgendwas aus den Zwischenschichten, Clients, Treibern, wieauchimmer ...) da so an Infos "rausrückt". Identische Komponenten, aber unterschiedliche Datenbanken können, wenn auch seeeeeehr selten, zu solchen Problemen führen. Ja nach Datenbank kann es auch passieren, dass RecordCount identisch mit RecNo ist, solange man nur vorwärts scrollt (per Next). Beim Rückwärtsscrollen bleibt RecordCount auf der RecNo des höchsten, bisher erreichten, Datensatze. Scrollt man über den hinaus, steigt RecordCount solange auf RecNo, bis man einmal EoF erreicht hat. So wie First zu einem korrekten EoF führen kann, kann Last zu einem korrekten RecordCount führen (wobei dann aber die gesamte Datenmenge geladen wird und das kann dauern). Und wenn man (bei unverändertem Quelltext) den Datenbanktyp wechselt, kann es sein, dass das Problem weg ist. Aber: Das ist mir in ca. 22 Jahren so 3 oder 4 Mal passiert. Es ist ein sehr selten auftretender Fehler. Erlebt in Delphiversionen bis D7. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20: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