Ошибка выполнения Microsoft VBScript «800a000d» Несоответствие типов: «LastID» - PullRequest
0 голосов
/ 26 апреля 2018

Я делаю функцию для назначения идентификатора.Но когда я нажимаю кнопку, появляется эта ошибка.

Ошибка времени выполнения 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 голосов
/ 30 апреля 2018

Краткий ответ: CInt работает только с числовыми значениями. Если в вашем значении есть буквы, то Cint работать не будет.

Немного больше ответа: Прочитав в блоге, что мы должны быть более приветливы (https://stackoverflow.blog/2018/04/26/stack-overflow-isnt-very-welcoming-its-time-for-that-to-change/?cb=1),, вот очень общий ответ, но он может привести вас к правильному способу исправить это самостоятельно.

Несоответствие типов - это ошибка, которую вы можете получить при неправильном использовании переменной. Например, если вы попытаетесь выполнить числовые функции со строками (что означает, что переменная содержит буквы az и т. Д.), Вы получите «Несоответствие типов», так как вы не можете добавлять или вычитать текст математическим способом ... С другой стороны, вы не можете добавить Integer переменные (переменная содержит только число AND, не заключенное в "кавычки").

Итак, ниже приведено несколько способов присвоения переменной и ее типа:

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...

Надеемся, это поможет вам решить эту проблему ...

0 голосов
/ 26 апреля 2018

Трудно помочь, если я не вижу данных.

При быстром просмотре кода проблема здесь:

CurrID=int(LastID)+1

Вы пытаетесь разыграть LastID, но уверены, что он конвертируемый?Можно ли перечислить все возможные значения?

...