Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 7 MySQL TEXT fields (https://www.delphipraxis.net/216353-delphi-7-mysql-text-fields.html)

TigerLilly 16. Dez 2024 12:19

AW: Delphi 7 MySQL TEXT fields
 
Da hast du schon recht, aber:

Zitat:

Ich nutze ganz normal TQUERY.

Delphi.Narium 16. Dez 2024 12:32

AW: Delphi 7 MySQL TEXT fields
 
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
Delphi-Quellcode:
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?

Redeemer 16. Dez 2024 12:53

AW: Delphi 7 MySQL TEXT fields
 
Zitat:

Zitat von himitsu (Beitrag 1544286)
Wobei ja eigentlich die Datenbank weiß, wieviele Datensätze es gibt ....

MySQL weiß nicht, wie viele Datensätze es gibt. Das weiß es noch nicht mal bei einer ungefilterten Tabelle.

Delphi.Narium 16. Dez 2024 13:10

AW: Delphi 7 MySQL TEXT fields
 
Heißt das, dass ich bei einem
SQL-Code:
select * from tabelle
per
Delphi-Quellcode:
for x := 1 to qry.RecordCount
niemals die tatsächliche, datenbankseitige, Anzahl von Datensätzen bekomme, sondern immer nur die Anzahl der Sätze, die gerade beim Client angekommen ist und dieser dann lokal auswerten kann?

Das würde doch dann bedeuten, dass das im Eingangspost gezeigte Konstrukt der For-Schleife (gegen eine MySQL-Datenbank) noch nie (bzw. nur zufällig) korrekt gearbeitet haben kann?!?

AuronTLG 16. Dez 2024 13:20

AW: Delphi 7 MySQL TEXT fields
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1544306)
Heißt das, dass ich bei einem
SQL-Code:
select * from tabelle
per
Delphi-Quellcode:
for x := 1 to qry.RecordCount
niemals die tatsächliche, datenbankseitige, Anzahl von Datensätzen bekomme, sondern immer nur die Anzahl der Sätze, die gerade beim Client angekommen ist und dieser dann lokal auswerten kann?

Das würde doch dann bedeuten, dass das im Eingangspost gezeigte Konstrukt der For-Schleife (gegen eine MySQL-Datenbank) noch nie (bzw. nur zufällig) korrekt gearbeitet haben kann?!?

Es kommt letztendlich auf die Query-Komponente bzw deren Einstellungen an.
Ich hatte in einem alten Programm mal das Problem, dass das RecordCount genau so lange wunderbar funktioniert hat, wie die tatsächliche Anzahl der Datensätze kleiner oder gleich 50 war, denn in diesem Fall war 50 meine Page-Größe.
Ob das in deinem Fall auch so war, hängt von den Einstellungen der Query ab, die hier schon ausgiebig diskutiert wurden.

Ich habe aus diesem und anderen Gründen der Verwendung von RecordCount schon vor geraumer Zeit abgeschworen, da man zu viele Dinge beachten muss und es dementsprechend eine riesige Fehlerquelle darstellt.

Delphi.Narium 16. Dez 2024 13:30

AW: Delphi 7 MySQL TEXT fields
 
Zitat:

Zitat von AuronTLG (Beitrag 1544307)
Ich habe aus diesem und anderen Gründen der Verwendung von RecordCount schon vor geraumer Zeit abgeschworen, da man zu viele Dinge beachten muss und es dementsprechend eine riesige Fehlerquelle darstellt.

Deshalb schrieb ich ja weiter oben schon:
Zitat:

For 1 to RecordCount ist schlicht und einfach eine schlechte Idee, egal welche Datenbankkomponente genutzt wird.
;-)

TigerLilly 16. Dez 2024 14:57

AW: Delphi 7 MySQL TEXT fields
 
Wie gesagt: Je nach Implementierung zählt RecordCount einfach. Aber auch wenn nicht bzw wenn man selber per COUNT() die Anzahl ermittelt, heißt das nicht, dass sich die Anzahl in Folge nicht ändern kann. Stichworte: Transaktionen/Isolation Level.

Also: for i:=1 to RecordCount ist jedenfalls nicht gut. Besser Next until EOF.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:46 Uhr.
Seite 2 von 2     12   

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