Discussion:
D6, Oracle 8: Float-Felder liefern Integer-Werte über BCD-Felder
(zu alt für eine Antwort)
Andreas Kusserow
2003-10-15 14:54:00 UTC
Permalink
Hallo,

ich habe ein Problem mit Delphi 6 im Zusammenhang mit Oracle 8.1.7 und
den
Zugriff über dbExpress-Komponenten. Ich benutze dabei den standard
dbExpress-Treiber von Borland.

Wenn ich in einem select-Statement ein Feld mit dem Typ ’Float’ abfrage,
erhalte ich
die Werte als Integer-Werte ohne Dezimalstelle in einer
TFMTBCDField-Komponente zurück (z.B. wird ’-11.47’ als ’-1147’
zurückgeliefert).

Ich habe schon verschiedene Möglichkeiten ausprobiert, den original Wert
aus der
Datenbank zu erhalten, allerdings ohne Erfolg (z.B. liefern AsCurrency,
AsFloat,
AsInteger und Value sowie AsBCD zusammen mit BCDToDouble immer den
selben Integer-Wert).

Auch die folgenden Select-Statements liefern immer den Wert ’12’ als
Ergebnis und
in der BCD-Darstellung habe ich auch keine Unterschiede feststellen
können:

a.) select 12 from T_XYZ;
b.) select 1.2 from T_XYZ;
c.) select 0.12 from T_XYZ;

Wie kann ich den original Float-Wert erhalten ? Ist es möglich die
BCD-Darstellung
der Ergebnisse zu deaktivieren ?

Viele Grüße

Andreas Kusserow
Andreas Kusserow
2003-10-16 13:42:09 UTC
Permalink
Mittlerweile existiert eine Lösung zu meinem Problem:

dbExpress interpretiert Oracle float-Felder in einem Zwischenschritt
wohl als String bevor die Werte als BCD-Felder zurückgeliefert werden.

dbExpress scheint dabei als Dezimaltrennzeichen einen "." zu erwarten.
Wenn nun über die Oracle Server-Einstellungen "," als Dezimal-
trennzeichen eingetragen ist, wird das Trennzeichen ignoriert und
"11,47" wird als "1147" interpretiert und zurückgeliefert.

Durch Änderung des Parameters NLS_NUMERIC_CHARACTERS zu ".,"
wird als Trennzeichen ein "." benutzt und die float-Werte
werden korrekt umgesetzt.

Viele Grüße

Andreas Kusserow

Loading...