Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird - Fehler bei Datentyp "Decimal" (https://www.delphipraxis.net/149242-firebird-fehler-bei-datentyp-decimal.html)

runningsoft 17. Mär 2010 10:59

Datenbank: Firebird embedded • Version: 1.5 • Zugriff über: ZEOS

Firebird - Fehler bei Datentyp "Decimal"
 
Hallo,

ich will in einer DB u.a. Preise speichern.

Lege ich das entsprechende Datenfeld mit
SQL-Code:
PORTO DECIMAL(9,2)
an, bekomme ich beim Auslesen der Daten mittels

Delphi-Quellcode:
PortoFee := ZQuery1.FieldByName('Porto').AsFloat;
eine Fehlermeldung, dass der Wert des Feldes "Porto" außerhalb des zulässigen Bereiches liegt. In der Datenbank selbst ist z.B. der Wert 23,8 (für 23,80 €) gespeichert.

Habe ich das Feld mit
SQL-Code:
 PORTO Float
angelegt, bekomme ich beim Zugriff auf die Daten zwar keine Fehlermeldung, aber Werte wie z.B. 23,80 werden in der Datenbank intern als 23,7999992370605 abgespeichert.

Was mache ich beim anlegen des Feldes als "Decimal" falsch? oder kann man Decimal-Felder nicht mit .AsFloat aus der DB auslesen?

Vielen Dank

Steffen

mkinzler 17. Mär 2010 11:04

Re: Firebird - Fehler bei Datentyp "Decimal"
 
Ein Float hat mehr als 2 Nachkommestellen. Versuch es mal mit .Value

runningsoft 17. Mär 2010 11:18

Re: Firebird - Fehler bei Datentyp "Decimal"
 
Danke für den Tipp. Das hat geholfen.

hoika 17. Mär 2010 11:49

Re: Firebird - Fehler bei Datentyp "Decimal"
 
Hallo,

Zitat:

ich will in einer DB u.a. Preise speichern.
Speichere die Preise als EuroCent, also Integer ab.
Dann kannst du in der DB auch Rechnen (Sum), ohne Rundungsfehler-Probleme zu bekommen.

Sollte es wirklich Float sein, nimm Double Precision.
Bei Decimal hat Firebird/Interbase ein manchmal merkwürdiges Verhalten,
so wird aus Decimnal(8,2) z.B. ein Integer,


Heiko

mjustin 17. Mär 2010 12:07

Re: Firebird - Fehler bei Datentyp "Decimal"
 
Hallo,

für DECIMAL kann man (zumindest in dbExpress) den Wert mit ('FELD').AsCurrency auslesen.

Damit sind dann die bei Float möglichen Rundungsprobleme ausgeschlossen.

hoika 17. Mär 2010 12:10

Re: Firebird - Fehler bei Datentyp "Decimal"
 
Hallo,

Dann kannst du in der DB auch Rechnen

SQL-Code:
Also Select Sum(Preise) from XXX

Das hatte ich gemeint.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 Uhr.

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