Zeos und Decimal

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
baba
Beiträge: 265
Registriert: Mi 4. Apr 2007, 17:47

Zeos und Decimal

Beitrag von baba »

Moin, moin,

ich lese wie folgt in ein DBGrid ein:
ZEOS: ZQuery1.SQL.Add('SELECT * FROM test.preise');
Ich bekomme für den Decimalwert(9.50) 950 und mit Format('0,00') 950,00
ShowMessage(FormatCurr('0.00', ZQuery1.FieldByName('PREIS').AsCurrency)); zeigt 950 an!

benutze ich die Lazarus-Komponenten:
LAZARUS: SQLQuery1.SQL.Add('SELECT * FROM test.preise');
Bekomme ich für den Decimalwert(9.50) 9,5. OK!

Nutze ich PGAdmin zeigt mir der Admin 9.5 an. OK!

So langsam fange ich an an Zeos zu zweifeln. VarChar-Werte über 2048 lösen einen Fehler aus, den Dezimalwerten wird der DecimalSeparator entfernt und das Ganze als Ganzzahl geliefert. Aus 9.50 wird 950!

Sind die Lazaruseigenen Komponenten sicher? Sollte ich umstellen und Zeos vergessen?

Gruß
Baba.

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: Zeos und Decimal

Beitrag von monta »

Der Decimalseparator taucht doch regelmäßig hier auf. Der wird aber Ländereinstellungeunabhängig gespeichert, wodurch meistens die Probleme auftauchen.

http://www.lazarusforum.de/viewtopic.ph ... tor#p33309" onclick="window.open(this.href);return false;

Hast du den vorher mal von ',' auf '.' gestellt?
Johannes

baba
Beiträge: 265
Registriert: Mi 4. Apr 2007, 17:47

Re: Zeos und Decimal

Beitrag von baba »

Hallo,

es handelt sich um einen Bug. Auf der Zeos-Seite habe ich mit einem der Entwickler (Mark) und einem weiteren User das Problem lösen können. Hierzu hat Mak eine geänderte Funktion gepostet:

Code: Alles auswählen

function SQLStrToFloatDef(Str: string; Def: Extended): Extended;
var
  {$IFDEF DELPHI12_UP}
  OldDecimalSeparator: WideChar;
  OldThousandSeparator: WideChar;
  {$ELSE}
  OldDecimalSeparator: Char;
  OldThousandSeparator: Char;
  {$ENDIF}
begin
  OldDecimalSeparator := DecimalSeparator;
  OldThousandSeparator := ThousandSeparator;
  DecimalSeparator := '.';
  ThousandSeparator := ',';
  if Pos('$', Str) = 1 then
    Str := Copy(Str, 2, Pred(Length(Str)));
  If Str = '' then
    Result := Def
  else
    Result := StrToFloatDef(Str, Def);
  DecimalSeparator := OldDecimalSeparator;
  ThousandSeparator := OldThousandSeparator;
end;
Da ich erstmal auf die LazComps umgestellt habe, ich muß mein Programm bis morgen fertig haben, habe ich es noch nicht getestet. Aber Wild_Pointer, der dritte im Bunde, schreibt, dass es damit funktioniert.

Hier der Link zum Forum: http://zeos.firmos.at/viewtopic.php?t=2643" onclick="window.open(this.href);return false;

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: Zeos und Decimal

Beitrag von monta »

Das ist aber nichtmehr in die 6.6.6 gekommen, oder?
Johannes

Kuster Peter
Beiträge: 205
Registriert: So 2. Dez 2007, 20:47
OS, Lazarus, FPC: Windows XP Lazarus immer neueste Version
CPU-Target: xxBit
Wohnort: Schweiz

Re: Zeos und Decimal

Beitrag von Kuster Peter »

Mit FPC 2.3.1 geht es bei mir mit Zeos. Der Fehler hatte ich nur mit FPC 2.2.4

Peter

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: Zeos und Decimal

Beitrag von monta »

Danke, gut zu wissen, da gibt es ja mit der 2.4.0 keine Probleme mehr. :)
Johannes

Domo Sokrat
Beiträge: 9
Registriert: Sa 31. Mai 2008, 19:37
OS, Lazarus, FPC: WinVista - Laz 0.9.26-2 - FPC 2.2.2
CPU-Target: 32Bit
Wohnort: Wehrheim / Taunus
Kontaktdaten:

Re: Zeos und Decimal

Beitrag von Domo Sokrat »

Hallo allerseits,

könnt ihr mir bestägien, dass das Problem mit dem von baba genannten Fix von Mark Daems in Verbindung mit FPC 2.3.1 behoben ist? Wenn ja, dann werden wir den Fix ins nächst Maintenance-Release der ZeosLib (6.6.7) aufnehmen.

Danke & Grüße!
Keep On Coding!

Michael.

Und denkt daran: Es wird überall nur mit Wasser gekocht ...

baba
Beiträge: 265
Registriert: Mi 4. Apr 2007, 17:47

Re: Zeos und Decimal

Beitrag von baba »

Domo Sokrat hat geschrieben:Hallo allerseits,
könnt ihr mir bestägien, dass das Problem mit dem von baba genannten Fix von Mark Daems in Verbindung mit FPC 2.3.1 behoben ist? Wenn ja, dann werden wir den Fix ins nächst Maintenance-Release der ZeosLib (6.6.7) aufnehmen.
Danke & Grüße!
Hallo,

ich nutze mit dem Patch - Zeos 6.6 - ohne Fehler!

Meine Lazarus-Version:
Lazarus 0.9.28.2 r22279 FPC 2.2.4 i386-win32-win32/win64

Baba.

Mark schrieb:
In my fpc version (2.5.1) and version 2.3.1 this seems fixed, in 2.2.2 it wasn't yet. Don't know about 2.2.4.

starkard
Beiträge: 87
Registriert: Mi 31. Okt 2007, 10:44

Re: Zeos und Decimal

Beitrag von starkard »

Hallo zusammen!

Der Beitrag ist zwar schon "etwas" älter aber für mich sehr aktuell. Hatte bis vor kurzem immer folgende Konfiguration verwendet:

Lazarus SVN trunk
Mysql 5.0.45
Fpc 2.4
Zeos 6.6.6

und konnte auf einmal exakt das selbe Phänomen wie baba es beschrieben hat beobachten. Da ich diesen Beitrag erst zuspät gefunden habe und mir dachte, dass ich wahrscheinlich nur ein Osterei erwischt habe habe ich es mit der "stable" Version probiert:

Lazarus 0.9.28.2 r22279 FPC 2.2.4
(rest s.o)

mit dem selben Ergebniss! Format,FormatDisplay,DecimalSeperator etc. haben zu keinem brauchbaren Ergebniss geführt. Erst durch Änderung der DB-feldtypen von DECIMAL(10,2) zu FLOAT hatte sich das Problem behoben und Fliesskommazahlen wurden korrekt dargestellt. Der Fehler scheint auch bei DOUBLE(m,n) etc. aufzutauchen. Hat vielleicht jemand das selbe Problem mit DECIMAL() und evtl auch lösen können? Danke für evtl. Antworten.

Antworten