Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: macchina am 07.10.05 - 12:52:27

Titel: ODBC-Abfrage liefert falsche Werte
Beitrag von: macchina am 07.10.05 - 12:52:27
Hallo!

Ausgangssituation:
Ich greife in einer NotesDB via ODBC (Client) und SQL auf eine DB2(UDB)-Datenbank zu. Realisiert habe ich das in einer ScriptLibrary unter Verwendung von *LSXODBC.
Der Benutzer gibt eine Kontonummer ein u. anschließend wird eine SQL-Abfrage gemacht u. die Daten zurück ins UI-Dokument geschrieben.
Funktioniert grundsätzlich bestens. a-bär: bei der 1. Abfrage bekomme ich falsche Kommawerte bei verschiedenen Feldern (z.b. 296,00 anstatt 296,86). Wird die Abfrage wiederholt, so werden die Kommawerte korrekt zurückgeben  :-:
Wird der Notes-Client beendet u. neu gestartet, so wiederholt sich der Effekt. 1. Abfrage = falsche Werte, 2. Abfrage = ok.
Habe es auf Client 6.0.1 und 6.0.4 getestet. Bei beiden der selbe Fehler.

Any ideas?

LG Ernstl
Titel: Re: ODBC-Abfrage liefert falsche Werte
Beitrag von: flaite am 08.10.05 - 00:06:52
Das scheint irgendein Problem mit Datentypen zu sein. Vielleicht bekommst du die per ODBC mit . als Dezimaltrennzeichen.
Aber du kannst es dir doch im Debugger anschauen, oder?
Bzw. den entsprechenden Wert erstmal in einem String zwischenspeichern und dann nachschauen was da drin steht. Zur Not musst du dann vielleicht einfach nur . durch , ersetzen.
Oder vielleicht kann man auch im ODBC Treiber das Trennzeichen irgendwo einstellen.

Für mich gilt es quasi als Naturgesetz, dass es keine gute Idee ist, Daten aus einer externen Datasource direkt in das Frontend durchzureichen. Dieser Fall scheint diese Wahrheit wieder zu bestätigen. Leg da also noch einen Zwischenspeicher dazwischen, dann kannst du es auch besser nachschauen, was wirklich aus dem RDBMS kommt. Und "Perphormäns" ist hier auch kein Argument, weil dieses Zwischenspeichern nämlich quasi keine bis sehr geringe Ressourcen in Notes beansprucht.
Titel: Re: ODBC-Abfrage liefert falsche Werte
Beitrag von: macchina am 10.10.05 - 13:39:59
Hallo!

Der Debugger zeigt beim 1. Durchlauf "296" an, ab dem 2. Durchlauf "296,86".

Sobald ich den Trace für die SQL-Abfrage aktiviere, kommt der Wert auch bei der 1. Abfrage richtig  ??? :-:
Vermutlich liegt der Fehler im ODBC-DB2-Treiber von IBM. Werd in die Richtung mal "forschen".

Frontend/Backend:
Diese Applikation läuft ausschliesslich auf standardisierten Clients (vom Betriebssystem bis zu den Applikationen identische Versionsstände).  Deshalb sehe ich hier die Frontend/Backendproblematik nicht so kritisch.

LG
Ernstl
Titel: Re: ODBC-Abfrage liefert falsche Werte
Beitrag von: flaite am 10.10.05 - 18:04:54
sehr, sehr seltsam.
Vielleicht wendest du dich mal an ein spezielles DB2 Forum.

Das hiesse, dass das beim ersten Aufruf (vermutlich) decimal in DB2 zu bigint oder so konvertiert wird.
Vielleicht hilft es auch, wenn du mal den Code deines Selects postest.

Was du noch versuchen könntest wäre, das entprechende property im select Statement zu casten.

So ungefähr mit der Syntax Select cast(wert, VarChar) from xxx
Vielleicht finde ich noch die entsprechende Funktion.
Möglicherweise wird das hinter dem Dezimaltrenner dann nicht "abgehackt".