30

クラシック 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 を渡すか、文字列を渡します。

4

3 に答える 3

23

コメントには多くの混乱が見られます。NullIsNull()およびvbNull主にデータベース処理に使用され、通常は VBScript では使用されません。呼び出し元のオブジェクト/データのドキュメントに明示的に記載されていない場合は、使用しないでください。

変数が初期化されていないかどうかをテストするには、 を使用しますIsEmpty()。変数が初期化されていないか、または を含むかどうかをテストするには、または""でテストします。変数がオブジェクトかどうかをテストするには、 と を使用して、このオブジェクトが に参照テストを持たないかどうかを確認します。""EmptyIsObjectIs Nothing

あなたの場合、最初に変数がオブジェクトであるかどうかをテストし、次にその変数がNothingであるかどうかを確認します。オブジェクトでない場合、 でテストすると「オブジェクトが必要です」というエラーが発生するためです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
于 2013-01-25T08:51:17.170 に答える