2013-05-17 5 views
1

Classic ASP에서 Session 변수에 문제가 있습니다. 다음 코드의 라인 (19)에 , 나는 "유형 불일치 : 'i'를"지고있어 오류Classic ASP Type 불일치

  • debug.asp이 session.asp에 포함 된 모듈 내 프로그램의 다른 모듈
여기
  • <% 
    '---------------------------------------------------------------------------- 
    ' File:   /include/script/debug.asp 
    ' Author:  Vladimir Charkot 
    ' Create Date: 15/05/2013 
    ' Description: Generate a server debug log on client 
    '---------------------------------------------------------------------------- 
    
    
    Redim debugTable(2,0) 
    
    Sub initDebug(debugLevel) 
        Session("debugEntries") = 0 
        Session("debugLevel") = "e" 
        Call debugMsg("e","Debug initialized") 
    End Sub 
    
    Sub debugMsg(lv, str) 
        If IsEmpty(Session("debugEntries")) Then 
         i = 0 
        Else 
         i = Session("debugEntries") <-- Line 21, Type mismatch error IF CInt() IS APPLIED TO SESSION VARIABLE 
        End If 
        i = i + 1      <-- Line 23, Type mismatch error 
        Redim Preserve debugTable(2,i) 
        debugTable(0,i-1) = lv 
        debugTable(1,i-1) = str 
        Session("debugEntries") = CInt(i) 
    End Sub 
    
    Function debugToClient() 
        Dim list 
        Dim func 
        list = jsDebugList() 
        func = jsDebugFunction(list) 
        debugToClient = func 
    End Function 
    
    Function jsDebugList() 
        Dim i 
        Dim list 
        If IsEmpty(Session("debugEntries")) Then 
         i = 0 
        Else 
         i = Session("debugEntries") 
        End If 
        list = "[" 
        for n = 0 to i - 2 
        'Add the last one outside the loop 
         list = list & "{debugLevel : """ & debugTable(0,n) & """, message : """ & debugTable(1,n) & """}, " 
           ' i.e.: {debugLevel : "e", message : "Error on application"}, 
        next 
        list = list & "{debugLevel : """ & debugTable(0,n) & """, message : """ & debugTable(1,n) & """}" 
        list = list & "]" 
        jsDebugList = list 
    End Function 
    
    Function jsDebugFunction(l) 
        Dim f 
        f =  "function debug(){" 
        f = f & " debugList = " & l & ";" 
        f = f & " for (elem in debugList){" 
        f = f & "  console.log(elem.debugLevel + "": "" + elem.message);" 
        f = f & " }" 
        f = f & "}" 
        jsDebugFunction = f 
    End Function 
    
    
    %> 
    
    디버그 잠수함 및 함수가 호출되는 session.asp 관련 코드입니다
<!-- #include virtual="/gu/include/script/debug.asp" --> 

sub InitSession() 
    (...stuff...) 
    Call initDebug("e") 
end sub 

sub CheckSession() 

    ' If not a new session, this code has already been executed. 
    if stuff then 
     timeout() 
    end if 

    Call debugMsg("e", "CheckSession() Executed") 

end sub 
  • 마지막으로 515,는 session.asp은 내 페이지 파일, 내 브라우저에서 열기를 호출하고 형식 불일치 오류를 반환하는 하나에 포함되어 있습니다.

당신이 나를 도울 수 있기를 바랍니다. 나는 이미 모든 것을 시도했다고 생각합니다. 부두교를 제외하고, 흑 마법과 그 종류. 감사합니다.

+0

라인 (17)에 세션의 값 ("debugEntries")는 무엇입니까? 18 행이 호출되기 전에 Response.Write를 수행하고 값을 확인할 수 있습니까? – Csharp

+0

시도해 보겠습니다. 그것은 처음으로 호출 할 때 0이어야합니다. 그러나 검사 할 것입니다. 좋은 제안. – Vladimir

답변

2

: 당신은 정수를 사용합니다.

문자열을 정수로 변환하려고하면 실제로 유형 불일치 오류가 발생하므로 i = i + 1은 자동으로 변환하려고 시도합니다.

는이 문제를 해결, 중 항상 먼저 initDebug()를 호출하거나 "안전 장치"코드를 추가해야합니다 :

If Session("debugEntries")="" Then 
    i = 0 
Else 
    i = CInt(Session("debugEntries")) 
End If 
i = i + 1 
+0

그리고 사람들은 자동으로 메소드라고 불리는 것을 신뢰하지 않습니다. 그것은 일했다! 감사! : D – Vladimir

+0

@Vladimir가 환호하지만, "자동적으로"라는 말은 무엇을 의미합니까? ASP는 메소드 자체를 호출하지 않습니다. –

+0

자, 아니, 작동하지 않았다. failsafe를 적용한 후에는 jsDebugList() 함수에서 "for n = 0 to i - 2"줄로 오류가 발생했으며 필요한 경우 모든 지점에서 변경 사항을 적용하는 것이 었습니다. 그러나이를 수행 한 후에 같은 줄에 같은 오류가 다시 발생합니다. 즉// 이제 21 행에 형식이 일치하지 않습니다. // IsEmpty (Session ("debugEntries")) Then // i = 0 // Else // i = Session ("debugEntries") <- Line 21 // 최종면 // I = I + 1 내가 타입 불일치를 얻을 세션 변수에에 CInt()를 사용하려고하면 :와 "자동으로 호출"으로, '에 CInt' :( – Vladimir

1

세션 "숫자"는 실제로 문자열입니다. 당신은 단지 빈 문자열로 밝혀 Session("debugEntries")가 비어 원인이 될 initDebug() 메소드를 호출하기 전에 debugMsg() 방법을 요구하고있다

i = CInt(Session("debugEntries")) 
+0

아, 죄송합니다, 나는 이미 그것을 시도했다는 것을 잊었고, 만약 내가 그것을 간다면, 오류는 타입 불일치 : 'CInt'라인에 대신 18입니다. – Vladimir