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 Zugriff auf MYSQL per DBExpress (https://www.delphipraxis.net/187439-zugriff-auf-mysql-per-dbexpress.html)

jobo 30. Nov 2015 16:23

AW: Zugriff auf MYSQL per DBExpress
 
Zitat:

Zitat von af99 (Beitrag 1322942)
2. gegoogeltes Statement? ich habe beide selber geschrieben.
Was in den Variablen steht spielt doch keine Rolle. beim Recordcount gebe ich doch keine Datenbank an!
Wenn ich beide Statements laufen lasse und im Memo mir die Ergebnisse ausgeben lasse bekomme ich z.B.: 10 Datensätze zurück. Wenn ich dann ein Query1.recordcount mache gibt es mir aber 40 zurück.

"gelogged" denglisch für ~mitprotokolliert
Also es geht um Dein produziertes Statement. Wenn Du es extra loggst, damit es exakt nachvollziehbar ist, warum postest Du es nicht hier, statt wieder den Code mit Variablen, die niemand kennt.
Und wieso sollen die Variablen keine Rolle spielen? Wenn das so wäre, könntest Du sie weglassen.
Es geht darum sicherzustellen, dass tatsächlich beide Statements 1000% identisch an die DB geschickt werden. Das ist erfahrungsgemäß keine Selbstverständlichkeit.

Ansonsten, wenn Dein Code abgeklopft und korrekt ist, kann man sich mal die Treiber vornehmen bzw. DB Express. Weiß nicht wie da mittlerweile der Stand ist, aber die Zählung bei Queries kann (konnte) wohl durchaus ungenau sein, weil das Verfahren zu Bestimmung über ein (falsch) generiertes Count Statement läuft (lief).

p80286 30. Nov 2015 16:40

AW: Zugriff auf MYSQL per DBExpress
 
Zitat:

Zitat von jobo (Beitrag 1322977)
Es geht darum sicherzustellen, dass tatsächlich beide Statements 1000% identisch an die DB geschickt werden. Das ist erfahrungsgemäß keine Selbstverständlichkeit.

abgesehen davon, daß 100% Übereinstimmung ausreichend ist, kann ich diese Äußerung nur unterschreiben. Nach meiner Erfahrung ist der "recordCount" der von der Abfrage, bzw. der Komponente zurückgegeben wird, nur dann zuverlässig wenn es sich um modifizierte Datensätze handelt. (update)
Wenn Du sicher wissen willst, was zurückgegeben wird, ist selbst zählen die zuverlässigste Methode.

Gruß
K-H

af99 1. Dez 2015 14:53

AW: Zugriff auf MYSQL per DBExpress
 
naja wie bereits geschrieben läuft meine Abfrage ja nun. Das Recordcount der DBX ist definitiv falsch (das hat meines Erachtens ja auch nichts mit dem Statement zu tun). Ich mache nun ein Count über ein SQL Statement. Ist halt doof da das wesentlich langsamer ist wie ein Recordcount.

jobo 1. Dez 2015 15:07

AW: Zugriff auf MYSQL per DBExpress
 
Zitat:

Zitat von af99 (Beitrag 1323101)
Ich mache nun ein Count über ein SQL Statement. Ist halt doof da das wesentlich langsamer ist wie ein Recordcount.

Vielleicht macht ja DBX nichts anderes als Du nun zu Fuß, nur DBX versucht es schneller bzw. schlauer zu machen und fliegt dabei auf die Nase. Das bedeutet in Konsequenz, dass das Statement 2mal ausgeführt wird.

Ich weiß allerdings nicht, ob das wirklich die Ursache ist. Vielleicht gibt es hier jemand, der die aktuellen Komponenten kennt.

Perlsau 1. Dez 2015 16:05

AW: Zugriff auf MYSQL per DBExpress
 
Meiner Kenntnis und Erfahrung nach werden bei der Abfrage von RecordCount immer nur die in der Datenmenge des Queries bzw. DataSets befindlichen Datensätze berücksichtigt. Wieviele Datensätze bei einem Select-Befehl aus der Datenbank gelesen werden, hängt von verschiedenen Dataset-Einstellungen ab. Erst ein Dataset.Last sorgt dafür, daß RecordCount alle zum Zeitpunkt der Abfrage vorhandenen Datensätze berücksichtigt. Ein SQL-seitiges Count ist davon unabhängig und zählt die tatsächlich in er DB vorhandenen Datensätze.

af99 2. Dez 2015 08:32

AW: Zugriff auf MYSQL per DBExpress
 
Nachdem ich dann viel Zeit mit der Ursachenforschung verbracht habe bin ich mir recht sicher das das Recordcount bei DBX und mysql nicht funktioniert. Dazu habe ich auch noch folgendes gefunden
http://forums.devart.com/viewtopic.php?t=3171
Ich würde an diese Stelle davon abraten es zu benutzen. Stattdessen muss man bei dbx und mysql wohl auf ein SQL Count() zurückgreifen.

baumina 2. Dez 2015 08:57

AW: Zugriff auf MYSQL per DBExpress
 
Ein 10 Jahre alter Bug und den gibt's immer noch? Das ist aber bitter.


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

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