ADO记录集十进制值问题(ADO Recordset Decimal value issue)

2019-10-18 21:07发布

我有类似的代码

Dim A, B, C
Set rs = Server.CreateObject("ADODB.Recordset")
strSql = "Exec [dbo].[some_sp] IND"
rs.open strSql,CN,3,3

Do While Not rs.EOF

'these columns are returned as decimal(10,2) format
A = rs("col1")
B = rs("col2")

rs.MoveNext
Loop

C = A + B 'i get type mismatch error here

我用的Response.Write检查值A,B他们在整数格式,而不是十进制

我不得不重新格式化记录设置十进制值? 还有什么是类型不匹配可能出现的问题,因为所有的值都是整数(即使它们是十进制)?

Answer 1:

在ASP / VBScript中的变量只是变量类型,所以你可能需要的值显式转换。

C = CDbl(A) + CDbl(B)

然而,我的猜测是,你行的一个不具有COL1 COL2或数值。 你知道这些的值,当你得到类型不匹配的错误?



Answer 2:

在我的情况,我发现一切小数点右边正在丧失,基本返回一个整数。 这是在2007年的访问与ADO 2.8,SQL调用一个DB2 / 400 v7r3服务器上。

我试着用VBA.CDbl()CDec()但都没有奏效。 然后阅读此线程inspried我第一次尝试在服务器上的转换,所以我CASTREAL ,这是32位(相当于Single在VBA),和这个工作。

这个:

SELECT (IYONHA / WXUNIT) AS VIPCASES
FROM   WINEX 

......成为本:

SELECT CAST(IYONHA / WXUNIT AS REAL) AS VIPCASES
FROM   WINEX

...然后向下舍到两个地方成了这个小数:

SELECT CAST(CAST(IYONHA / WXUNIT AS NUMERIC(5,2)) AS REAL) AS VIPCASES
FROM   WINEX


文章来源: ADO Recordset Decimal value issue