在 VB6 中,ADODB.sql 查询中的记录集值不返回小数

In VB6, ADODB.Recordset values from sql query not returning decimals

提问人:Filipe Lopes 提问时间:10/20/2023 最后编辑:GSergFilipe Lopes 更新时间:10/24/2023 访问量:73

问:

我正在使用 ODBC 从 VB6 中的 db2 获取数据。连接和设置正常,但返回的数据有问题。

我的记录集中的字段都向下舍入为整数,因此,如果 db 列的 0.99,则返回为 0,这并不好。

Microsoft 查询中的相同查询会生成带有小数的正确值。

这是代码的相关部分:

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").OriginalValuerecordSet("Price").precision.numericscale.type

对于记录集、ODBC、SQL 查询或其他任何内容,我能做些什么吗?

任何和所有的帮助都是值得赞赏的!

PS:我用一种解决我问题的方法来回答。

SQL DB2 VB6 ADODB 记录集

评论

0赞 nbk 10/20/2023
vb6 早已过时,是时候拥抱 VB NET 了
0赞 Filipe Lopes 10/20/2023
不幸的是,这不是我的决定,还有更多代码已经在使用中
3赞 StayOnTarget 10/21/2023
还有大量的 VB6 代码仍在维护中。
0赞 StayOnTarget 10/21/2023
DB2 SQL 是否有任何类型的运算符可用于强制它返回十进制值?甚至只是作为测试?CAST()
1赞 Filipe Lopes 10/23/2023
@StayOnTarget,是的,我尝试了 CAST(f2scop AS DECIMAL(19, 8)) 价格,结果相同

答:

0赞 Filipe Lopes 10/24/2023 #1

我已经为这个问题想出了一个解决方法。

在 sql 查询中,我将数据乘以 100,然后在为变量赋值时将其除以 100。

这样:

sqlQuery= “Select (f2scop * 100) Price from database.mpline where ibsuno='” & Order & “' order by ibpuno, ibpnli”

myVariable.value = recordSet(“价格”) / 100

这不是一个解决方案,但它绕过了问题,这对我来说已经足够了。

可能有人这个答案不适用,所以总是感谢更多的帮助! 感谢