我的代码类似于
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的值 它们是整数格式而不是十进制
我是否必须再次格式化记录集以设置小数值? 那么类型不匹配可能会出现什么问题,因为所有值都是整数(即使它们是十进制的)?
答案 0 :(得分:3)
ASP / VBScript中的变量只是变体类型,因此您可能需要显式转换值。
C = CDbl(A) + CDbl(B)
但是,我的猜测是你的一行没有col1或col2的数值。当你遇到类型不匹配错误时,你知道它们的值是什么吗?
答案 1 :(得分:0)
在我的情况下,我发现小数点右边的所有内容都丢失了,实际上返回了一个整数。这是在带有ADO 2.8的Access 2007中,在DB2 / 400 v7r3服务器上调用SQL。
我尝试使用VBA.CDbl()
和CDec()
,但是它们都不起作用。然后阅读此线程使我先尝试在服务器上进行转换,因此我将CAST
的数字REAL
(32位(相当于VBA中的Single
)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
...然后将小数点后两位取整:
{{1}}