AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi 7 MySQL TEXT fields

Ein Thema von KlausV · begonnen am 15. Dez 2024 · letzter Beitrag vom 16. Dez 2024
Antwort Antwort
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#1

AW: Delphi 7 MySQL TEXT fields

  Alt 16. Dez 2024, 11:25
Nein, nicht unbedingt. Manche Datenbanken fangen bereits an Daten zu liefern, wenn sie noch nicht wissen, wie groß die Datenmenge insgesamt sein wird, sie nur wissen, dass sich an der Reihenfolge ... der zu liefernden Daten nichts mehr ändert.

Hab' es zumindest früher per Toad gegen Oracle-Datenbanken sehen können, dass Programme bei sehr großen Datenmengen bereits mit der Verarbeitung und Ausgabe der Ergebnisse begonnen hatten, während die Datenbank noch mit der Verarbeitung und Lieferung weiterer Daten beschäftigt war.

Sprich: Man konnte beobachten, dass Datenbank und Programm fast gleichzeitig mit der Verarbeitung fertig wurden. Es waren allerdings Prozesse, bei denen die Verarbeitung schon mal in den Bereich von vielen Stunden bis über einen Tag hinaus reichen konnte.

Und bei 'nem Fetch 100 bekommt die Datenbank ja explizit gesagt: Liefere mir bitte die ersten 100 Sätze. Sie schaut dann erst garnicht, ob es mehr geben könnte. Erst wenn der 101. Satz angefordert wird, schaut sie nach den nächsten 100 und weiß damit erst dann, wenn es weniger als 100 weitere Sätze gibt, dass EoF erreicht ist und welcher Wert für RecordCount definitiv zu vergeben ist. In dieser Konstellation sagt RecordCount immer nur aus, wieviele Sätze bereits geliefert wurden, aber nicht, wieviele Sätze insgesamt geliefert werden könnten.
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.241 Beiträge
 
Delphi 12 Athens
 
#2

AW: Delphi 7 MySQL TEXT fields

  Alt 16. Dez 2024, 11:51
RecordCount wird clientseitig ausgewertet, indem tatsächlich alle Datensätze abgerufen und gezählt werden. Abgesehen davon, dass das langsam ist, kann sich im Laufe der Bearbeitung die Anzahl der Datensätze ändern (Mehrbenutzer!). Entweder kapselt man das in Transaktionen (read repeatability) oder man iteriert nur über den Cursor. UniDirectional heißt, dass man nur vorwärts lesen kann, aber nicht zurück + das auch nur, wenn der Cursor am Server ist und die Daten nicht am Client.

Wie auch immer: Der Datentyp eines Feldes beeinflusst RecordCount nicht. Da hat es etwas anderes. Der zitierte Code unterschlägt ein WITH irgendwo + wie das SQL wirklich aussieht wär auch gut zu wissen.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#3

AW: Delphi 7 MySQL TEXT fields

  Alt 16. Dez 2024, 12:16
RecordCount wird clientseitig ausgewertet, indem tatsächlich alle Datensätze abgerufen und gezählt werden.
Das stimmt leider nicht immer. Wenn ich in Delphi 7 mit den Zeoskomponenten und 'ner FireBird-Datenbank arbeite und dabei Fetch 100 gesetzt habe, so kann ich sehen, dass sich im Laufe der Verarbeitung RecordCount ändert. Bei der Nutzung der ADO-Komponenten scheint aber RecordCount sofort auf der tatsächlichen Anzahl von Datensätzen zu stehen.

Früher, mit BDE und DBase, sorgte ein x := qry.RecordCount dafür, dass alle Datensätze gelesen wurden und damit dann die Anzahl der Datensätze bekannt wurde. Aber die Daten wurden erst beim Lesen von RecordCount "geholt", was an der entstehenden Laufzeit bei der Zuweisung von RecordCount auf x zu bemerken war. Diese Laufzeit trat jedoch nicht "so geballt" auf, wenn man per While not EoF die Daten in 'ner Schleife verarbeitete. Aber man wusste dann erst beim Erreichen von EoF wieviele Datensätze verarbeitet wurden.

Und da hier ja Delphi 7 und TQuery (= BDE) genutzt werden, könnte dieser Effekt (und ähnliche (mySQL-bedingete?) Absonderlichkeiten) noch zum Tragen kommen.
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.241 Beiträge
 
Delphi 12 Athens
 
#4

AW: Delphi 7 MySQL TEXT fields

  Alt 16. Dez 2024, 12:19
Da hast du schon recht, aber:

Zitat:
Ich nutze ganz normal TQUERY.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#5

AW: Delphi 7 MySQL TEXT fields

  Alt 16. Dez 2024, 12:32
Ja, aber bei TQuery verlasse ich mich nicht auf RecordCount, weil es eben nicht bei allen Datenbanken sofort auf dem tatsächlichen Wert der zu verarbeitenden Datensätze steht.

Bei DBase wurde beim Lesen von RecordCount das Lesen der gesamten Datenmenge veranlasst. Aber dies erfolgte nicht grundsätzlich für alle beliebigen Datenbanken, sondern nur bei DBase reproduzierbar.

Und im aktuellen Fall scheint es ja nicht so zu sein, sonst müsste die For-Schleife ja korrekt funktionieren, weil ja spätestens bei for x := 1 to qry.RecordCount das holen aller Datensätze engestoßen werden müsste und damit hier ReordCount nicht mehr 1 sein dürfte.

Interessant wäre zu erfahren, ob ein derartiges Konstrukt zu einem geänderten Verhalten führt:
Delphi-Quellcode:
AlleSaetze := qry.RecordCount;
for x := 1 to AlleSaetze do begin
...
end;
Enthält hier dann AlleSaetze die tatsächliche Anzahl an Datensätzen oder auch nur 1?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz