2013-01-24 24 views
21

爲NULL檢查我有下面的VBScript中傳統的ASP頁面:錯誤在VBScript

function getMagicLink(fromWhere, provider) 
    dim url 
    url = "magic.asp?fromwhere=" & fromWhere 
    If Not provider is Nothing Then ' Error occurs here 
     url = url & "&provider=" & provider 
    End if 
    getMagicLink = "<a target='_blank' href='" & url & "'>" & number & "</a>" 
end function 

我不斷收到上寫着If Not provider Is Nothing Then行「對象需要」錯誤信使。

要麼值爲NULL,要麼它不是NULL,那麼爲什麼會出現此錯誤?

編輯:當我調用該對象時,我傳遞NULL或傳遞一個字符串。

回答

30

從您的代碼看,它看起來像provider是變體或其他變量,而不是對象。

Is Nothing僅適用於對象,稍後您會說它是一個值爲NULL或NOT NULL,將由IsNull處理。

嘗試使用:

If Not IsNull(provider) Then 
    url = url & "&provider=" & provider 
End if 

或者,如果還是不行,請嘗試:

If provider <> "" Then 
    url = url & "&provider=" & provider 
End if 
+1

我試過使用'If Not IsNull(provider)then',但是這個頁面在'url = url&「&provider =」&provider'行產生了一個異常。錯誤說「對象變量未設置」。 –

+0

這是一個頭痛的人。你是否將'vbNull'傳遞給'provider'或其他東西? – LittleBobbyTables

+0

我正在通過'Nothing' –

18

我看到很多困惑中的註釋。 Null,IsNull()vbNull主要用於數據庫處理,通常不用於VBScript。如果在調用對象/數據的文檔中沒有明確說明,請不要使用它。

要測試變量是否未初始化,請使用IsEmpty()。要測試變量是否未初始化或包含"",請在""Empty上進行測試。要測試變量是否爲對象,請使用IsObject並查看此對象是否在Is Nothing上沒有參考測試。在你的情況下,你首先要測試變量是否是一個對象,然後看看該變量是否爲Nothing,因爲如果它不是一個對象,當你測試時會得到「Object Required」錯誤Nothing

片段混搭在您的代碼:

If IsObject(provider) Then 
    If Not provider Is Nothing Then 
     ' Code to handle a NOT empty object/valid reference 
    Else 
     ' Code to handle an empty object/null reference 
    End If 
Else 
    If IsEmpty(provider) Then 
     ' Code to handle a not initialized variable or a variable explicitly set to empty 
    ElseIf provider = "" Then 
     ' Code to handle an empty variable (but initialized and set to "") 
    Else 
     ' Code to handle handle a filled variable 
    End If 
End If 
0

我只是添加一個空白(「」)爲變量的結束和做比較。即使該變量爲空,下面的東西也應該可以工作。只有在空格的情況下,您也可以修剪變量。

If provider & "" <> "" Then 
    url = url & "&provider=" & provider 
End if