2010-11-04 12 views
13

'da bir Nesnenin var olup olmadığını kontrol edin Uzun bir süre önce bir dış şirket tarafından VB Komut Dosyası'nda yazılmış bir Klasik ASP uygulamasını sürdürüyorum.VBScript

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" 

Bu SADECE afiş reklamları sayfalarda var olacaktır:

ben şöyle imagefile yolları bir dizi var. İçerisinde bu liste üzerinden yinelenen bazı standart kodlar var (tüm sayfalarda ortak).

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

sorun banners sayfada örneği değil, ben bir Can't find object hatası

bir nesne VB Script var olup olmadığını kontrol etmek için uygun yolu nedir olsun (hepsi sayfalarda değil) bu?

değişken ilan etmesine karşın başlatılmadı ise

cevap

29

:

If Not banners Is Nothing then 

değiştirin ve daha sonra bir içerme dosyası içine yerleştirin ve gereksiz tekrarlardan kaçınmak için sayfaların üst kısmında kullanabilirsiniz

If IsObject(banners) Then 

Öteki kodu kullanabilirsiniz.

@Cheran S: Snippet'larım yukarıdaki Option Explicit on/off ile test ettim ve Dim banners'un bulunup bulunmadığından bağımsız olarak her iki sürümde de hatalarla karşılaşmadım. :-)

+0

Hmmmm ... bu sözü gösteriyor. – Armstrongest

+0

@ Atømix: Bu soruyu tekrar kontrol etmeyi unuttum; Senin için mi çalışıyordu? :-) – stealthyninja

+1

Evet, öyle! Teşekkürler. VB6, harika bir harikalık dünyasıdır. – Armstrongest

3

, değeri size IsEmpty() fonksiyonu ile kontrol edebilirsiniz hangi Empty olacaktır:

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

banners açıkça atarsanız sadece Nothing eşit olacak Set banners = Nothing ile değer.

Option Explicit açıksa, bu teknikle ilgili sorunlarınız olacaktır (bu öneridir, ancak her zaman böyle değildir). Bu durumda, banners, Dim ed değil ve IsEmpty(banners) sınamaya çalışırsanız, bir çalışma zamanı hatası alırsınız. Option Explicit üzerinde yoksa, herhangi bir sorun yaşamamalısınız.

düzenleme: Ben de bu related question and answer gördüm, bu da yardımcı olabilir.

+0

Evet, sorun şu ki, afişler afişsiz sayfalarda karartılmadı. – Armstrongest

0

Her sayfada en az dim banners olmalıdır.

head.asp veya her sayfada bir şey yok mu? ATOMIX @

+0

Orada ... ama pankartlar ve "iş" htmlhead.inc içinde yapılır sayfa belirtir ... böylece afiş sayfaları sayfaları için baştan ÖNCE ayarlamak gerekir. Kafa karıştırıcı, biliyorum. Onu korumak zorunda olmadığım zaman memnun olacağım. – Armstrongest

25

IsObject işe yarayabilir, ancak IsEmpty daha iyi bir seçenek olabilir - özellikle bir değişkenin var olup olmadığını veya başlatılmış olup olmadığını kontrol etmesi amaçlanmıştır.

Özetlemek gerekirse: Değişken (Açık Nesne olmadan) mevcut olmadığını veya değişken olmadığını test edecek Null

  • var Is Nothing atanmış olmadığını test edecek
  • IsNull(var)
  • başlatıldığını eğer

    • IsEmpty(var) test edecek Bir değişken için Set oldu, ancak bir nesne olmayan bir şey üzerinde denerseniz bir hata atacaktır
    • IsObject(var) bir değişkenin bir nesne olup olmadığını test edecektir (ve Empty ise False geri dönecektir).
    0

    IsEmpty, Object nesnesi IsNull, "Option Explicit" Ayarı ile çalışır, yukarıda stealthyninja yanlış şekilde yanıtlamıştır. Bildiğim tek yolu Tristan Havelick güzel buradan yaptığı gibi, 'On Error Resume Next' ayarıyla 'Açık Seçenek' 'hack' etmektir: Is there any way to check to see if a VBScript function is defined?

    +0

    ekledim Bir fonksiyonun tanımlanıp tanımlanmadığını kontrol etmek istiyorum. Yukarıdaki sadece basit bir değişkenin olup olmadığını kontrol etmek içindir. İlginç bir soru olsa! – Hannele

    0

    Biraz ilişkili isteğe bağlı bir parametre olmadığını test etmek IsMissing() olduğunu Bu durumda, bu durumda bir nesne, şu şekilde aktarıldı:

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