web-dev-qa-db-ja.com

VBScriptでのNULLチェックエラー

Classic 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という行に「Object Required」エラーメッセージが表示され続けます。

値がNULLであるか、NULLではないので、なぜこのエラーが発生するのですか?

編集: オブジェクトを呼び出すとき、NULLを渡すか、文字列を渡します。

25

コードから見ると、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
34

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

変数が初期化されていないかどうかをテストするには、IsEmpty()を使用します。変数が初期化されていないか、""が含まれているかどうかをテストするには、""またはEmptyでテストします。変数がオブジェクトかどうかをテストするには、IsObjectを使用し、このオブジェクトにIs 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
20
AutomatedChaos

変数の最後に空白( "")を追加して比較を行います。以下のようなものは、その変数がnullであっても動作するはずです。スペースの場合にのみ変数をトリムすることもできます。

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