Ado通过ODBC返回adNumeric(21,6)的错误值

时间:2019-04-16 10:25:35

标签: excel vba vb.net odbc ado

我从ADO Recordset中获得了奇怪的返回值。

我在VBA,VB和C ++中尝试过,但是每次我得到相同的奇怪和错误的值。

数据以Dec(21,6)的形式存储在我们的ERP系统中,此信息将传递到ADO正确的(adNumeric, Precision 21, Scale 6)

我正在通过ODBC和ADO连接到DB,连接工作正常,并且varCharDate和其他格式也很好地传递了,只有dec(21,6)值显示出这个怪异结果。

但是,如果我运行MS Query,它将返回正确的值,因此我认为我缺少某些设置,但是atm无法找出哪些设置...

我已经尝试过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 :(得分:0)

好吧,我发现ADO返回的是错误的值,而不是.NET ODBC,因此我从Excel切换到了VB,并使用了.NET ODBC(system.data.odbc)。

我仍然很困惑,为什么这样做会如此,但似乎是在ADO或ODBC的配置中,我都无法更改,所以我使用了替代方法。

长话短说:ADO获取错误的值,.NET ODBC获取正确的值