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
ZeosDBO liest falsche Werte aus MySQL Datenbank?
-
- 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?
EleLa - Elektronik Lagerverwaltung - www.elela.de
-
- 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?
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.
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
-
- 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?
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.
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
-
- 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?
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;
http://www.lazarusforum.de/viewtopic.php?f=10&t=2304" onclick="window.open(this.href);return false;
Johannes
-
- 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?
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.
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