Microsoft VBScript运行时错误' 800a000d'类型不匹配:' LastID'

时间:2018-04-26 07:44:19

标签: vbscript asp-classic

我做了一个分配ID的功能。但是当我点击按钮时,会出现此错误。

  

Microsoft VBScript运行时错误' 800a000d'类型不匹配:' LastID'

Public function AssignSanctionID(DeptID,SectID,SanctionType)
REM obtain Transaction ID
    dim CmdX
    dim SQLX
    dim RsX 
    dim Prefix
    dim LastID
    dim CurrID
    dim NewCurrID

    '- Set Connection
    HariNi=now()
    Tahun=year(HariNi)
    Bulan=month(HariNi)     
    if len(bulan)=1 then
        Bulan= "0" & Bulan
    end if  

    If Cint(Tahun) < 2016 then
        Pref1= DeptID & "/" & SectID & "/"
        Prefix=DeptID & "/" & SectID & "/" & Tahun & "/" & Bulan & "/"
    else
        Pref1= DeptID & "/%/" & SectID
        Prefix=DeptID & "/" & Tahun & "/" & Bulan & "/" 
    end if

    set CmdX = server.CreateObject("ADODB.Command")
    Set RSX = Server.CreateObject("ADODB.Recordset")

    SQLX = " SELECT * FROM Sanction " _ 
         & " WHERE SanctionID like '%" & Pref1 & "%' " _
         & " ORDER BY ID DESC"      

    CmdX.ActiveConnection = objconn
    CmdX.CommandText = SQLX
    RsX.Open CmdX,,0,1

    if not(RsX.BOF and RsX.EOF) then
        If Cint(Tahun) < 2016 then
            LastID = right(RsX("ID"),4)
        else
            LastID = mid(RsX("ID"),13,4)
        end if
    else
        if Bulan="04" then
            LastID=0
        end if
    end if      
    RsX.Close 
    set RsX = nothing   

    'Set ID 
    If LastID<>"" then
        'CurrID = left(4)
        CurrID=int(LastID)+1
    end if

    if len(currid)>0 then       
        select case len(currid)
            case 1
                newcurrid = "000" & currid
            case 2
                newcurrid = "00" & currid
            case 3
                newcurrid = "0" & currid
            case 4
                newcurrid = currid
        end select
    else
        NewCurrID="0001"
    end if

    If Cint(Tahun) < 2016 then
        NewCurrID=Prefix & NewCurrID 
    else
        NewCurrID=Prefix & NewCurrID & "/" & SectID 
    end if

    AssignSanctionID = NewCurrID

end function

2 个答案:

答案 0 :(得分:1)

如果我没有看到数据,很难提供帮助。

从快速查看代码的问题出现在这里:

CurrID=int(LastID)+1

您正在尝试投射LastID但是您确定它可以转换吗?可以列出所有可能的值吗?

答案 1 :(得分:0)

简答:CInt仅适用于数值。如果你的价值中有字母,那么Cint就不会工作。

更长的回答: 阅读博客后我们应该更热情(https://stackoverflow.blog/2018/04/26/stack-overflow-isnt-very-welcoming-its-time-for-that-to-change/?cb=1),这是一个非常普遍的答案,但这可能会引导您自己修正它的正确方法。

类型不匹配是在以错误方式使用变量时可以获得的错误。例如,如果您尝试使用字符串执行数字函数(这意味着变量包含字母az等),您将得到“类型不匹配”,因为您无法以数学方式添加或减去文本...另一方面,您无法添加整数变量(变量只包含一个数字,而不包含在“引号”中)。

以下是分配变量的几种方法以及它变成的类型:

LastID=1 'This makes LastID an INT (number)
LastID="1" 'This makes LastID a String but a CInt(LastID) can turn it into an INT because it ONLY contains numbers.
LastID="IT" 'This makes LastID a String that CANT in any way be cast to INT as it contains letters.
LastID=IT 'This row will either create an error except if you already have a variable called IT, then LastID will get the same value as the IT variable...

这有望帮助您解决此问题......