Stefan Nobis
2004-07-19 09:10:55 UTC
Hi.
Ich habe da ein kleines Problem und mir gehen die Ideen aus:
Oracle (9i, Problem tritt aber auch mit 8.x auf, soll mit 7.3
nicht aufgetreten sein) und Client-Applikation laufen auf
demselben System (Windows XP SP1, Problem soll laut anderen
Testern auch auf anderen Systemen wie Win2000 und Win98
auftreten). Zugriff auf die Datenbank erfolgt mittels des bei
Oracle mitgelieferten ODBC-Treibers.
Ich habe mal eine ganz simple Tabelle angelegt:
create table data(x NUMBER(5,2), y FLOAT);
insert into data values(1.5, 1.5);
Wenn ich jetzt mit meiner VB6 Client-Applikation die beiden Daten
auslesen, bekomme ich für x den Wert "15" und für y den Wert
"1,5". Der VB6-Code sieht grob so aus:
,----
| Dim x As Double
| Dim y As Double
|
| 'con.Execute "ALTER SESSION SET NLS_TERRITORY=GERMANY"
| 'con.Execute "ALTER SESSION SET NLS_NUMERIC_CHARACTERS=',.'"
|
| Set rs = con.OpenResultset("select * from data")
|
| While Not rs.EOF
| x = rs!x
| y = rs!y
| MsgBox "Value: " & x & " - " & y
| rs.MoveNext
| Wend
`----
Ich vermute mal, dass da irgendwie die Lokalisierung eine Rolle
spielt. Daher habe ich auch schon versucht, mit diesen Parametern
zu spielen. Grundsätzlich liefert mir
select * from nls_{database,session}_parameters;
NLS_TERRITORY=AMERICA und entsprechend NLS_NUMERIC_CHARACTERS=.,
Der Versuch mit ALTER SESSION SET NLS_* war bisher ebenfalls
erfolglos. Auch Änderungen des Datentyps von x (z.B. String oder
Variant) änderten nichts an dem Problem.
Irgendeine Lösung für das Problem muss es aber doch geben, so
kaputt kann der ODBC-Treiber von Oracle doch nicht sein. Ein
kurzer Test mit dem Microsoft ODBC Treiber für Oracle ergab, dass
alles problemlos lief, d.h. es kam auch für x der Wert
"1,5". Allerdings unterstützt der MS Treiber für Oracle nur ODBC
Level 2, ich brauche aber Level 3 -- das wiederum stellt mir der
Oracle ODBC Treiber zur Verfügung.
Ich würde mich über jeden Hinweis zur Lösung des Problem mit dem
Oracle ODBC Treiber wirklich sehr freuen!
Ich habe da ein kleines Problem und mir gehen die Ideen aus:
Oracle (9i, Problem tritt aber auch mit 8.x auf, soll mit 7.3
nicht aufgetreten sein) und Client-Applikation laufen auf
demselben System (Windows XP SP1, Problem soll laut anderen
Testern auch auf anderen Systemen wie Win2000 und Win98
auftreten). Zugriff auf die Datenbank erfolgt mittels des bei
Oracle mitgelieferten ODBC-Treibers.
Ich habe mal eine ganz simple Tabelle angelegt:
create table data(x NUMBER(5,2), y FLOAT);
insert into data values(1.5, 1.5);
Wenn ich jetzt mit meiner VB6 Client-Applikation die beiden Daten
auslesen, bekomme ich für x den Wert "15" und für y den Wert
"1,5". Der VB6-Code sieht grob so aus:
,----
| Dim x As Double
| Dim y As Double
|
| 'con.Execute "ALTER SESSION SET NLS_TERRITORY=GERMANY"
| 'con.Execute "ALTER SESSION SET NLS_NUMERIC_CHARACTERS=',.'"
|
| Set rs = con.OpenResultset("select * from data")
|
| While Not rs.EOF
| x = rs!x
| y = rs!y
| MsgBox "Value: " & x & " - " & y
| rs.MoveNext
| Wend
`----
Ich vermute mal, dass da irgendwie die Lokalisierung eine Rolle
spielt. Daher habe ich auch schon versucht, mit diesen Parametern
zu spielen. Grundsätzlich liefert mir
select * from nls_{database,session}_parameters;
NLS_TERRITORY=AMERICA und entsprechend NLS_NUMERIC_CHARACTERS=.,
Der Versuch mit ALTER SESSION SET NLS_* war bisher ebenfalls
erfolglos. Auch Änderungen des Datentyps von x (z.B. String oder
Variant) änderten nichts an dem Problem.
Irgendeine Lösung für das Problem muss es aber doch geben, so
kaputt kann der ODBC-Treiber von Oracle doch nicht sein. Ein
kurzer Test mit dem Microsoft ODBC Treiber für Oracle ergab, dass
alles problemlos lief, d.h. es kam auch für x der Wert
"1,5". Allerdings unterstützt der MS Treiber für Oracle nur ODBC
Level 2, ich brauche aber Level 3 -- das wiederum stellt mir der
Oracle ODBC Treiber zur Verfügung.
Ich würde mich über jeden Hinweis zur Lösung des Problem mit dem
Oracle ODBC Treiber wirklich sehr freuen!
--
Stefan.
Stefan.