Ado возвращает неправильные значения для adNumeric (21,6) через ODBC - PullRequest
0 голосов
/ 16 апреля 2019

Я получаю странные возвращаемые значения из моего набора записей ADO.

Я пробовал это на VBA, VB и C ++, но каждый раз получаю одни и те же странные и неправильные значения.

Данные хранятся в нашей системе ERP как Dec(21,6), эта информация передается в ADO правильно (adNumeric, Precision 21, Scale 6).

Я подключаюсь к БД через ODBC и ADO, соединение работает нормально, и varChar, Date и другие форматы просто проходят нормально, только странные значения показывают dec(21,6).

Однако, если я запускаю MS Query, он возвращает правильные значения, поэтому я думаю, что мне не хватает некоторых настроек, но я не могу определить, какие из них ...

Я уже пытался cast / convert значения, но это не поддерживается ODBC. Я написал программу на VB и C ++ и получил те же неправильные значения.

Вот мой простой код VBA для тестирования:

        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" 'DSN Name
Set ADOODBCConnection = New ADODB.Connection
Set ADOODBCRS = New ADODB.Recordset
ADOODBCRS.Source = "SELECT quantity_amount FROM ENTITY.app_production_ProductionOrder WHERE type_BK ='101' AND number ='PA00041825';" 

ADOODBCConnection.Open ADOODBCConnectionString
ADOODBCRS.ActiveConnection = ADOODBCConnection
ADOODBCRS.Open
'wrong Values are already in the recordset
TestString = ADOODBCRS.Fields(0).Value    'wrong Value
TestVar = ADOODBCRS.Fields(0).Value       'wrong ValueUrsprungspost

ADOODBCRS.Close
ADOODBCConnection.Close

End Sub

Вот некоторые ожидаемые и некоторые полученные значения:

Expected   Received
1          -13511005043556401
2          -13511005043556402 
3          -13511005043556403
7          -13511005043556407 
8          -13511005043556408 
9          -13511005043556409 
10         -885457226534512230449 
500        -885456663593148743733

1 Ответ

0 голосов
/ 18 апреля 2019

Хорошо, я обнаружил, что ADO возвращает неправильные значения, но не .NET ODBC, поэтому я переключился с Excel на VB и использовал .NET ODBC (system.data.odbc).

Я все еще не понимаю, почему это ведет себя так, как это происходит, но, похоже, это происходит в конфигурации ADO или нашего ODBC, и то и другое я не могу изменить, поэтому я использую альтернативу.

Короче говоря: ADO получает неправильные значения, .NET ODBC получает правильные значения

...