ZeosDBO liest falsche Werte aus MySQL Datenbank?

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

ZeosDBO liest falsche Werte aus MySQL Datenbank?

Beitrag von MmVisual »

Hallo,

Ich habe seit längerer Zeit ein größeres Problem mit Lazarus V0.9.29 und FPC 2.3.1. Ich habe das Lezte mal am 10.12. das Setup Paket geladen, aber das Problem bleibt bestehen.

Ich schreibe in ein Float-Feld z.B. den Wert 1,3. Poste es, in MySQL steht (phpMyAdmin) auch 1.3 in der Tabelle. Im dbGrid wird auch 1,3 angezeigt.
Jetzt schließe ich die Query und öffne diese wieder, dann wird im dbGrid "0" (null) angezeigt. (Feld.IsNull = True !?)

Kein Fehler, keine Zugriffsverletzung, kein garnichts. Ich weiß nur, dass es nicht mit der ZeosDBO zusammen hängt, sondern mit einer fehlerhaften Implementierung der FPC Sourcen, denn früher ging es mit der gleichen ZeosDBO Version.

Die freigegebene Lazarus Version mit FPC 2.2.4 kann ich leider nicht verwenden da hier die DB-Checkbox nicht richtig geht, das wurde erst mit FPC 2.3.1 behoben.

Bitte helft mir, für einen Tipp in welcher Quelle/Inc Datei ich suchen muss wäre ich dankbar. Mir fehlt jeder Ansatz.

Grüße Markus
EleLa - Elektronik Lagerverwaltung - www.elela.de

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: ZeosDBO liest falsche Werte aus MySQL Datenbank?

Beitrag von monta »

Was wird den nun angezeigt, '0' oder NULL? Das verstehe ich oben gerade nicht so recht.

Hast du mal mit dem DezimalTrenner rumgespielt, das es da ev. Probleme bei der Konvertierung zwischen '.' und ',' gibt? Ansonsten wundert es mich allerdings, da FPC ja nicht direkten Einfluss auf die Sourcen hat und _Zeos die DB-relevanten Teile ja größtenteils selbst implementiert und dabei nicht direkt auf FPC-DB-Implementationen angewiesen ist.
Johannes

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: ZeosDBO liest falsche Werte aus MySQL Datenbank?

Beitrag von MmVisual »

Das Feld wird als "NULL" gezeigt.
Ich nutze das Event OnGetText, das macht dann die Darstellung, also auch bei NULL wird dann 0,0 in das Grid geschrieben.
Zeos mach viel, aber es nutzt die Funktionen wie "StrToFloat" usw.

Also wenn ich in den Ländereinstellungen in Windows das "Dezimaltrennzeichen" auf '.' (Punkt) und das Tausendertrennzeichen auf ''' (einfaches Anführungszeichen) setze, dann funktioniert das Programm.

Ich vermute die SQL Abfrage (MySQL) bringt als Antwort die Datensätze als Text. Jetzt geht ZeosDBO her und macht aus dieser Text-Zeile Datensätz und wandelt das Float-Feld mit StrToFloatDef(...), das klappt natürlich nicht, weil MySQL ein Punkt und kein Komma liefert. Also klappt das Parsen beim Empfang nicht richtig.

Da es früher mit Lazarus mal ging, gehe ich davon aus, dass es in der ZeosDBO richtig programmiert wurde (z.B. die Konvertierung mit übergabe geänderter Regionalsettings).

Lazarus hat bei diesen Basics nichts am Hut.

Übrig bleiben hier die FPC-Sourcen.

Da weiß ich leider nicht wo/wie suchen und bräuchte eure Unterstützung. Vielen Dank im Voraus.
EleLa - Elektronik Lagerverwaltung - www.elela.de

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: ZeosDBO liest falsche Werte aus MySQL Datenbank?

Beitrag von monta »

Du kannst doch um die Konvertierungsprobleme zu umgehen und nichts im FPc umändern zu müssen, einfach in deinem Programm einen Dezimaltrenner angeben. Siehe auch hier:
http://www.lazarusforum.de/viewtopic.php?f=10&t=2304" onclick="window.open(this.href);return false;
Johannes

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: ZeosDBO liest falsche Werte aus MySQL Datenbank?

Beitrag von MmVisual »

Ich habe folgendes gemacht:

OnBevoreOpen: Dezimaltrennzeichen auf . / Tausen Trennzeichen auf ' gesetzt
OnAfterOpen: wieder zurück auf System Default.

Jetzt scheint es zu funktionieren. Aber ist dennoch eine krücke. Wenn es eine bessere Lösung gibt, die "Global" wirkt ist mir das lieber, denn wenn ich ein Query vergesse, oder in einem Jahr hinzufüge (und dann weiß ich es nicht mehr), dann klappt das ganze wieder nicht.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Antworten