Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1684to1688
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ADODB liefert falschen Wert zurück

ADODB liefert falschen Wert zurück
10.04.2019 13:43:05
Tobias
Ich habe folgendes Problem mit meinen Rückgabewerten aus einer ODBC Abfrage über ADODB:
ODBC Connection zu SQL Server
Connection funktioniert
Recordset funktioniert
Ich frage unter Anderem 2 Felder ab, die vom Typ dec(21,6) sind, hier bekomme ich für mich nicht identifizierbare Werte zurück, z.b. statt 24 gibt mir das Recordset -885456663593149000000 zurück. So verhält es sich mit allen dec(21,6) Werten (alle anderen Werte werden wie erwartet ausgegeben).
Diese Zahlen stehen auch so im Recordset, und nicht erst in einer Variable, in der ich sie speichere.
Wenn ich die Daten über MS Querry abrufe, bekomme ich die richtigen Werte.
Ebenso, wenn ich z.B. mit QlikView auf die entsprechenden Daten zugreife.
Die entsprechenden Code Stellen:
ADOODBCConnectionString = "Provider=MSDASQL;DSN=myDSNName"
ADOODBCRS.Source = "SELECT quantity_amount,reportedQuantity_amount FROM ENTITY.app_production_ProductionOrder;"

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ADODB liefert falschen Wert zurück
10.04.2019 15:38:13
EtoPHG
Hallo,
Level Problembeschreibung: unterirdisch
Du weisst aber schon das
a) Excel mit max. 15 signifikanten Stellen rechnen kann
b) Man gelesene .Fields auch in String-Variablen einlesen kann
c) Die Code Stellen völlig unnütz sin, da sie keinen Bezug zu Fehler haben!
Gruess Hansueli
AW: ADODB liefert falschen Wert zurück
10.04.2019 15:58:59
Tobias
zu a) der tatsächliche Wertebereich liegt zwischen 10000 und 1, das Datenbankfeld ist lediglich als dec(21,6) deklariert
zu b) die Werte habe ich als String oder Var gespeichert, immer mit dem gleichen Ergebnis, dazu kommt, dieser unerwartete Wert steht auch direkt so im Recordset
zu c)
Sub test()
Dim ADOODBCConnection As ADODB.Connection
Dim ADOODBCConnectionString As String
Dim ADOODBCRS As ADODB.Recordset
Dim TestString AS String
Dim TestVariant AS Variant
ADOODBCConnectionString = "DSN=myDSN"
Set ADOODBCConnection = New ADODB.Connection
Set ADOODBCRS = New ADODB.Recordset
ADOODBCRS.Source = "SELECT quantity_amount,reportedQuantity_amount FROM ENTITY. _
app_production_ProductionOrder;"
ADOODBCConnection.open
ADOODBCRS.open
'Hier sind die fehlerhaften Daten bereits geladen
TestString = ADOODBCRS.Fields(0).Value    'Falscher Wert wie in Ursprungspost
TestVar = ADOODBCRS.Fields(0).Value       'Falscher Wert wie in Ursprungspost

ADOODBCRS.close
ADOODBCConnection.close
End Sub

Hoffe der gesamte Code hilft bei der Lösungsfindung.
Anzeige
AW: ADODB liefert falschen Wert zurück
10.04.2019 18:11:03
EtoPHG
Hallo Tobias,
1. Es fehlt ein Error-Handler
2. Nach dem Open mal zuerst feststellen, wieviel Rows eingelesen wurden (RecordCount Property)
3. Ohne DB und Mappe kann ich hier nicht weiterhelfen.
Gruess Hansueli
AW: ADODB liefert falschen Wert zurück
10.04.2019 18:26:24
Tobias
Das Problem ist eher, dass kein Fehler erzeugt wird, der Beschriebene Wert steht direkt im Recordset.
Das Recordset liest die richtige Anzahl an Rows (und auch Colums) ein, mit verschiedenen Where Bedingungen getestet.
Meine Vermutung ist, dass hier die Zahlen falsch interpretiert werden, aber ich habe gerade keinen Ansatz wo und wie ich das Prüfen könnte, geschweige denn, wie ich das beheben könnte.
Das Recordset erkennt den Datentyp auch als adNumeric(21,6), also wird dieser Parameter schon mal richtig übergeben.
Datei als Download Modul1 mein Code, welcher die falschen Werte läd, Modul2 die Aufzeichnung von MSQuery, hier kommen die richtigen Werte raus ...
https://www.herber.de/bbs/user/129072.zip
Wie gesagt, MS Query liefert aus dem gleichen Dokument die richtigen Werte zurück.
Die DB kann ich leider nicht liefern, ist unser ERP System ...
Anzeige
AW: ADODB liefert falschen Wert zurück
10.04.2019 19:17:08
EtoPHG
Hallo,
Du könntest mal versuchen den Wert schon im SQL zu convertieren. Versuch mal:
ADOODBCRS.Source = "SELECT CAST(quantity_amount AS VARCHAR(12)) AS quantity_amount, " & _
"CAST(reportedQuantity_amount AS VARCHAR(12)) AS reportedQuantity_amount" & _
" FROM ENTITY.app_production_ProductionOrder" & _
" WHERE type_BK ='101' AND number ='PA00041825'"
Gruess Hansueli
AW: ADODB liefert falschen Wert zurück
10.04.2019 20:09:39
Tobias
Guter Gedanke, hatte schon probiert den Wert einfach nach Integer zu casten, auf VarChar bin ich garnicht gekommen, werd das morgen testen und hoffentlich kann ich dann von einem erfolgreichen Workaround berichten, vielen Dank für die Anregung, Ergebnis kommt morgen :)
p.S.: ich würde aber trotzdem zu gerne wissen wieso das mit MSQuery klappt und mit ADO nicht...
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige