web-dev-qa-db-fra.com

Erreur lors de la vérification de NULL dans VBScript

J'ai le VBScript suivant dans une page Classic ASP:

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

Je reçois toujours un message d'erreur "Objet requis" sur la ligne indiquant If Not provider Is Nothing Then.

Soit la valeur est NULL, soit ce n'est pas NULL, alors pourquoi ai-je cette erreur?

Modifier: Lorsque j'appelle l'objet, je passe soit NULL, soit je passe une chaîne.

25

D'après votre code, il semble que provider soit une variante ou une autre variable, et non un objet.

Is Nothing est réservé aux objets, mais plus tard, vous dites que c'est une valeur qui doit être NULL ou NOT NULL, qui serait gérée par IsNull.

Essayez d'utiliser:

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

Alternativement, si cela ne fonctionne pas, essayez:

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

Je vois beaucoup de confusion dans les commentaires. Null, IsNull() et vbNull sont principalement utilisés pour la gestion de la base de données et ne sont normalement pas utilisés dans VBScript. S'il n'est pas explicitement indiqué dans la documentation de l'objet/données appelant, ne l'utilisez pas.

Pour tester si une variable n'est pas initialisée, utilisez IsEmpty(). Pour tester si une variable n'est pas initialisée ou contient "", testez sur "" ou Empty. Pour tester si une variable est un objet, utilisez IsObject et pour voir si cet objet n'a pas de test de référence sur Is Nothing.

Dans votre cas, vous voulez d'abord tester si la variable est un objet, puis voir si cette variable est Nothing, car si ce n'est pas un objet, vous obtenez l'erreur "Objet requis" lorsque vous testez sur Nothing.

extrait pour mélanger et assortir dans votre code:

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

Je vais juste ajouter un blanc ("") à la fin de la variable et faire la comparaison. Quelque chose comme ci-dessous devrait fonctionner même lorsque cette variable est nulle. Vous pouvez également rogner la variable juste en cas d'espaces.

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