2

是否可以编辑从记录集中获取的数据?就我而言,我正在尝试将数量相加,以便获得总数。所以我想要做的一个例子是:

<% 
   set rs = server.CreateObject("ADODB.recordset")
   totalqty = 0

   do NOT while rs.EOF
       totalqty = totalqty + rs("QTY")
   loop
>%

每当我尝试做这样的事情时,我总是会得到一个“类型不匹配”错误,我不知道如何解决这个问题。

与往常一样,我们将不胜感激任何和所有帮助。

4

2 回答 2

1

尝试像这样“转换”记录集中的值:

CDbl( rs.fields("QTY").value )

这会将值转换为双精度值。如果值为 null,您将收到错误消息,因此您必须先检查...

或者您可以编写一个函数来始终获得正确的类型:

public function parse(value, alternative)
    dim val
    val = trim(value & "")
    parse = alternative
    if val = "" then exit function
    on error resume next
    select case varType(parse)
        case 2, 3 'integer, long
            parse = cLng(val)
        case 4, 5 'single, double
            parse = cdbl(val)
        case 6  'currency
            parse = ccur(val)
        case 7 'date
            parse = cDate(val)
        case 11 'bool
            parse = cBool(val)
        case 8 'string
            parse = value & ""
        case else
            on error goto 0
            lib.throwError("type not supported. val:" & value & " alt:" & alternative)
    end select
    on error goto 0
end function

dim val : val = rs("QTY")
val = parse(val, 0)

' now val is always an integer (either the value from db or 0)
于 2012-07-19T13:58:10.257 回答
0

ulluoink 的解决方案会起作用,但这更简单......

function ToDbl(vIn, nDefault)
    'Convert a variant to an integer using default where necessary
    if isnull(vIn) then
        ToDbl = nDefault
    else
        if IsNumeric(CStr(vIn)) Then
            ToDbl = CDbl(vIn)
        else
            ToDbl = nDefault
        end if
    end if
end function

然后只需调用:

totalqty = totalqty + ToDbl(rs("QTY"), 0)
于 2012-07-19T14:06:24.290 回答