【问题标题】:Ado returning wrong Values for adNumeric(21,6) via ODBCAdo 通过 ODBC 返回错误的 adNumeric(21,6) 值
【发布时间】:2019-04-16 10:25:34
【问题描述】:

我从我的 ADO 记录集中得到了奇怪的返回值。

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

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

我通过 ODBC 和 ADO 连接到数据库,连接工作正常,varCharDate 和其他格式都可以正常传递,只有 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

【问题讨论】:

  • This 可能与您所描述的相似。

标签: excel vba vb.net odbc ado


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 2019-10-26
    • 2017-02-06
    相关资源
    最近更新 更多