2013-01-24 10 views
21

Ho il seguente VBScript in una pagina ASP classico:Errore controllando per NULL in 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 

Continuo a ricevere un messager errore "oggetto richiesto" sulla riga che dice If Not provider Is Nothing Then.

O il valore è NULL o non è NULL, quindi perché viene visualizzato questo errore?

Modifica: Quando invoco l'oggetto, passo NULL o passo in una stringa.

risposta

30

Dal codice, sembra che provider sia una variante o un'altra variabile e non un oggetto.

Is Nothing è solo per gli oggetti, ma in seguito si dice che è un valore che dovrebbe essere NULL o NOT NULL, che verrebbe gestito da IsNull.

Provare a utilizzare:

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

In alternativa, se questo non funziona, provare:

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

Ho provato ad utilizzare 'Se non IsNull (provider) Then', ma poi nella pagina solleva un'eccezione su' url = url & "& fornitore =" & linea provider'. L'errore dice "Variabile oggetto non impostata". –

+0

Questo è un graffio alla testa. Stai passando in 'vbNull' a' provider', o qualcos'altro? – LittleBobbyTables

+0

Sto passando in 'Nothing' –

18

Vedo un sacco di confusione nei commenti. Null, IsNull() e vbNull vengono principalmente utilizzati per la gestione del database e normalmente non utilizzati in VBScript. Se non è esplicitamente indicato nella documentazione dell'oggetto/dati chiamante, non usarlo.

Per verificare se una variabile non è inizializzata, utilizzare IsEmpty(). Per verificare se una variabile non è inizializzata o contiene "", prova su "" o Empty. Per verificare se una variabile è un oggetto, utilizzare IsObject e verificare se questo oggetto non ha test di riferimento su Is Nothing.

Nel tuo caso, prima vuoi testare se la variabile è un oggetto, e poi vedere se quella variabile è Nothing, perché se non è un oggetto, ottieni l'errore "Oggetto Richiesto" quando esegui il test su Nothing.

frammento di combinare nel codice:

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

Vorrei solo aggiungere uno spazio ("") fino alla fine della variabile e fare il confronto. Qualcosa di simile in basso dovrebbe funzionare anche quando quella variabile è nulla. È inoltre possibile tagliare la variabile solo in caso di spazi.

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