You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB6中ADODB.Recordset读取DB2数据丢失小数位问题求助

问题:VB6通过ODBC从DB2获取数据时数值被向下取整

我在VB6中通过ODBC连接DB2数据库,连接及配置均正常,但返回的Recordset字段值被向下取整为整数——例如数据库列值为0.99时,读取后返回0。相同查询在Microsoft Query中可得到带小数的正确结果。

相关代码如下:

Set objCommand As New ADODB.Command
Set recordSet As New ADODB.Recordset

sqlQuery= "Select f2scop Price from database.mpline  where ibsuno='" & Order & "' order by ibpuno, ibpnli"
                   
With objCommand
   .ActiveConnection = ConnectDB2
   .CommandType = adCmdText
   .CommandText = sqlQuery
End With
                
With recordSet
   .CursorType = adOpenStatic
   .CursorLocation = adUseClient
   .LockType = adLockOptimistic
   .Open objCommand
End With

myVariable.value = recordSet("Price")

调试时,recordSet("Price").OriginalValue同样返回取整后的值;但recordSet("Price").precision、.numericscale及.type均返回符合小数字段的预期结果。以下是几种可行的解决方向:


解决方法

1. SQL查询层面强制转换字段类型

在查询语句中显式将字段转换为带小数的数值类型,避免驱动自动转换:

Select CAST(f2scop AS DECIMAL(10,2)) Price from database.mpline where ibsuno='" & Order & "' order by ibpuno, ibpnli

根据数据库中f2scop字段的实际精度调整DECIMAL的参数(比如DECIMAL(15,4)),确保返回明确的小数类型。

2. 调整Recordset游标位置

将游标位置从客户端改为服务器端,让DB2直接返回原始数值,避免本地游标类型转换误差:

With recordSet
   .CursorType = adOpenStatic
   .CursorLocation = adUseServer ' 替换原adUseClient
   .LockType = adLockOptimistic
   .Open objCommand
End With

3. 检查ODBC驱动配置

打开ODBC数据源管理器,找到对应的DB2数据源配置:

  • 查找是否有数值自动取整相关的勾选选项,直接取消;
  • 升级DB2 ODBC驱动到最新版本,旧版本可能存在类型映射bug;
  • 在高级设置中调整数值精度参数,匹配数据库字段的实际精度。

4. 确保变量类型支持小数

确认接收数值的myVariable或中转变量为浮点/货币类型(如Double、Currency),避免整数类型自动截断小数:

Dim dPrice As Double
dPrice = recordSet("Price").Value
myVariable.value = dPrice

内容的提问来源于stack exchange,提问作者Filipe Lopes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 03:17:11