2010-11-04 34 views
13

Sto mantenendo un'app ASP classica scritta in VB Script da un'azienda esterna molto tempo fa.Verificare se esiste un oggetto in VBScript

Ho un array di percorsi ImageFile, in questo modo:

dim banners, arrKeys, i 
set banners=CreateObject("Scripting.Dictionary") 
banners.Add "banner1.jpg", "http://www.somelink.com" 
banners.Add "banner2.jpg", "http://www.somelink.com" 
banners.Add "banner3.jpg", "http://www.somelink.com" 

Questo esisterà solo sulle pagine che hanno banner pubblicitari. C'è un codice standard che scorre questa lista in un file di inclusione (comune a tutte le pagine).

If Not banners Is Nothing then 
    ' then loop through the Dictionary and make a list of image links 
End if 

Il problema è che se banners non è istanziato nella pagina (non è su tutte le pagine), ottengo un Can't find object errore

Qual è il modo corretto per verificare se un oggetto esiste in VB Script?

risposta

29

@ Atomix: Sostituire

If Not banners Is Nothing then 

e utilizzare

If IsObject(banners) Then 

vostro altro codice è possibile quindi inserire in un file di inclusione e di usarlo a parte superiore delle pagine di evitare inutili duplicazioni.

@Cheran S: Ho provato i miei frammenti sopra con Option Explicit on/off e non ho riscontrato errori per entrambe le versioni, indipendentemente dal fatto che fosse presente o meno. :-)

+0

Hmmmm ... questo promette. – Armstrongest

+0

@ Atømix: ho dimenticato di controllare nuovamente questa domanda; Ha funzionato per te? :-) – stealthyninja

+1

Sì, lo ha fatto! Grazie. VB6 è un meraviglioso mondo di interesse. – Armstrongest

3

Se una variabile viene dichiarata, ma non inizializzato, il suo valore sarà Empty, che è possibile verificare la presenza con la funzione IsEmpty():

Dim banners 
If IsEmpty(banners) Then 
    Response.Write "Yes" 
Else 
    Response.Write "No" 
End If 
' Should result in "Yes" being written 

banners sarà solo pari a Nothing se si assegna esplicitamente che valore con Set banners = Nothing.

Avrete problemi, tuttavia, con questa tecnica se avete Option Explicit attivato (che è la raccomandazione, ma non è sempre il caso). In tal caso, se banners non è stato Dim ed si tenta di testare IsEmpty(banners), si otterrà un errore di runtime. Se non hai Option Explicit acceso, non dovresti avere problemi.

modifica: Ho appena visto questo related question and answer che potrebbe aiutare anche.

+0

Sì, questo è il problema, 'banner' non è stato' dim'med in pagine senza banner. – Armstrongest

0

È necessario disporre di almeno dim banners in ogni pagina.

Non hai uno head.asp o qualcosa incluso in ogni pagina?

+0

C'è ... tuttavia è la pagina che specifica i banner e il "lavoro" è fatto nel htmlhead.inc ... quindi per le pagine che hanno banner ho bisogno di impostare la variabile PRIMA della testa. È confuso, lo so. Sarò felice quando non devo mantenerlo. – Armstrongest

25

potrebbe funzionare, ma IsEmpty potrebbe essere un'opzione migliore: è specificamente progettato per verificare se una variabile esiste o è stata inizializzata.

Riassumendo:

  • IsEmpty(var) sarà verificare se esiste una variabile (senza oggetto esplicito), o viene inizializzata
  • IsNull(var) testerà se una variabile è stato assegnato Null
  • var Is Nothing sarà verificare se una variabile è stata Set a Nothing, ma genera un errore se si prova su qualcosa che non è un oggetto
  • IsObject(var) verificherà se una variabile è un oggetto (e apparentemente restituirà ancora False se var è Empty).
0

Né di IsEmpty, Is Object, IsNull funzionano con l'impostazione "Option Explicit", poiché stealthyninja sopra ha erroneamente risposto. Il solo modo che conosco è quello di 'incidere' il 'Option Explicit' con l'impostazione 'On Error Resume Next', come Tristan Havelick bene lo fa qui: Is there any way to check to see if a VBScript function is defined?

+0

Credo che sia per controllare se una funzione è definita, dove il qui sopra è solo per verificare se esiste ancora una variabile semplice. Domanda interessante però! – Hannele

0

in qualche modo correlato è IsMissing() per verificare se un parametro opzionale è stato passato, in questo caso un oggetto, come questo:

Sub FooBar(Optional oDoc As Object) 

    'if parameter is missing then simulate it 
    If IsMissing(oDoc) Then Dim oDoc as Object: oDoc = something 

... 
Problemi correlati