RecordCount liefert falsche Ergebnisse

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

RecordCount liefert falsche Ergebnisse

Beitrag von KOBOLD Messring GmbH »

Und wieder was seltsames:
Bei den Lazarus-DB-Komponenten SQLQuery über eine TMySQL50Connection (Server storage-engine= MyISAM) liefert die Eigenschaft RecordCount beharrlich den Wert 10, obwohl ich definitiv 6538 Datensätze in meiner Tabelle habe (Gemäss phpMyAdmin und auch mit "SELECT COUNT(*) ..." verifiziert).
¿Hat das jemand schon mal gehabt?
¿Ist das bekannt, dass man sich darauf nicht verlassen kann?
¿Gibt es da einen Workaround - ausser vorher Abfrage mit SELECT COUNT(*) oder mse-Komponenten verwenden?

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: RecordCount liefert falsche Ergebnisse

Beitrag von monta »

Das ist schon irgendwie so gewollt ;)

Das ganze liegt an PacketRecords, also dem bedarfsweisen Abrufen von Ausschnitten aus der kompletten Ergebnissmenge.

Es wird nur ein Ausschnitt abgerufen der die momentan zum Darstellen benötigten datensätze enthält und eben die werden auch nur gezählt. Entweder das ganze deaktivieren so das immer die komplette Ergebnismenge übertragen wird (natürlich dauert das länger und erzeugt mehr Last) oder halt nen COUNT ... vorher.
Ich würde auf die Vorzüge des sequentiellen ladens durch PacketRecords der Query nicht verzichten und lieber ein COUNT davor packen. Musst halt sehen, wie du es lieber hast, bzw. wie groß deine gesamte Ergebnismenge überhaupt ist.
Johannes

KOBOLD Messring GmbH
Beiträge: 155
Registriert: Mi 22. Aug 2007, 14:52
OS, Lazarus, FPC: Mandriva Linux 2008 (L 0.9.28 FPC 2.2.4)
CPU-Target: 32Bit
Wohnort: 65719 Hofheim am Taunus
Kontaktdaten:

Re: RecordCount liefert falsche Ergebnisse

Beitrag von KOBOLD Messring GmbH »

Vielen Dank, ich zähle also vorher mit Count, und lass die Packets so wie sie sind, erscheint mir logisch.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: RecordCount liefert falsche Ergebnisse

Beitrag von mse »

KOBOLD Messring GmbH hat geschrieben:oder mse-Komponenten verwenden?
Die würden sich hier nicht anders verhalten. :-)
tmsesqlquery hat die Funktion "rowsreturned" welche die Information liefert, falls die Datenbank es unterstützt. Für MySQL trifft dies zu. Ich glaube Joost hat letzthin etwas ähnliches in seine Komponenten eingebaut, schau doch mal, ob du etwas entsprechendes findest.
MSEgui 2.0 hat eine neue MySQL connection Komponente für MySQL 5.0+5.1 welche Transaktionen und prepared statements unterstützt. Es ist geplant auch 6.0 hineinzupacken sobald 6.0 stabil ist.

Edit: FPC sqldb TSQLQuery hat RowsAffected welche für INSERT, UPDATE und DELETE statements die Anzahl der veränderten records liefert. Eine Funktion, die die Anzahl der durch SELECT gelieferten Datensätze meldet, habe ich nicht gefunden.
Zuletzt geändert von mse am Di 3. Feb 2009, 08:01, insgesamt 1-mal geändert.

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: RecordCount liefert falsche Ergebnisse

Beitrag von DiBo33 »

Du kannst auch direkt nach dem Query.Open die Menge ermitteln

Code: Alles auswählen

SELECT FOUND_ROWS()
bzw. nach Query.ExecSQL mit

Code: Alles auswählen

SELECT ROW_COUNT()

Antworten