Zur Info: Firebird 4.01 und Numeric(9,2)

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Joh
Lazarusforum e. V.
Beiträge: 129
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Zur Info: Firebird 4.01 und Numeric(9,2)

Beitrag von Joh »

Moin,

ich hatte für ein Feld ePreis in der Tabelle Rechnungspositionen in Firebird den Datentyp

Code: Alles auswählen

Numeric(9,2)
gewählt...
Welch ein Graus. Aus irgendeinem Grund wird der eingegebene Betrag 205,34 in 205,35 gespeichert. 205,33 in 205,34, 205,35 in 205,36...
Das passiert nur, wenn der Betrag geändert wird; bei Änderung z.B. der Menge bleibt der Betrag erhalten.

Ganz knapp vor der Allgemeinen Verzweifelung habe ich in der Datenbank den Datentyp in Numeric(10,3) geändert; siehe da, es paßt.
Auch beim Zurücksetzen auf Numeric(10,2) wurde der Wert richtig gespeichert.

Ein Teil der Lösung scheint zu sein, das Numeric(10,x) intern als BIGINT, Numeric(9,x) intern als INTEGER gespeichert wird:
https://firebirdsql.org/file/documentat ... edtypes-de

Ich könnte jetzt weiter testen, habe aber bereits einen Nachmittag mit dem Fehler gekämpft.
Ob der Fehler an Firebird, Firebird 4.01 (ich weiß, es gibt 4.03, aber die 4.01 ist auch beim Kunden im Einsatz) oder doch an Lazarus 2.26 liegt ist mir jetzt erstmal egal.
just my two Beer

Antworten