2010-11-04 15 views
13

में मौजूद है या नहीं, मैं लंबे समय से एक बाहरी कंपनी द्वारा वीबी स्क्रिप्ट में लिखित क्लासिक एएसपी ऐप को बनाए रख रहा हूं।जांचें कि क्या कोई ऑब्जेक्ट 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" 

यह केवल पृष्ठों बैनर विज्ञापन है पर उपलब्ध नहीं होगा:

मैं imagefile रास्तों की एक सरणी, इसलिए की तरह है। कुछ मानक कोड है जो इस सूची के माध्यम से एक फ़ाइल (सभी पृष्ठों के लिए आम) में पुनरावृत्त करता है।

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

समस्या यह है कि अगर banners पृष्ठ पर instantiated नहीं है (यह सभी पृष्ठों पर नहीं है), मैं एक Can't find object त्रुटि

एक वस्तु वीबी स्क्रिप्ट में मौजूद रहने पर आपको सही तरीका क्या है मिलता है?

उत्तर

29

@ ATOMIX:

If Not banners Is Nothing then 

बदलें और

If IsObject(banners) Then 

आपका अन्य कोड आप तो एक में शामिल फ़ाइल में जगह है और अपने पृष्ठों के शीर्ष पर इसका इस्तेमाल अनावश्यक दोहराव से बचने के लिए कर सकते हैं का उपयोग करें।

@Cheran एस: मैं अपने के टुकड़े ऊपर Option Explicit साथ/पर बंद परीक्षण किया है और किसी भी प्रकार के लिए त्रुटियों का सामना नहीं किया था, कि क्या Dim banners की परवाह किए बिना वहाँ या नहीं था। :-)

+0

हम्मम्म ... यह वादा दिखाता है। – Armstrongest

+0

@ Atommix: मैं इस सवाल को दोबारा जांचना भूल गया; क्या यह आपके काम आया? :-) – stealthyninja

+1

हाँ, ऐसा हुआ! धन्यवाद। वीबी 6 दिलचस्पता की एक अद्भुत दुनिया है। – Armstrongest

3

एक चर घोषित किया जाता है, लेकिन प्रारंभ नहीं किया गया तो इसका मान Empty हो जाएगा, आप IsEmpty() समारोह के साथ के लिए जाँच कर सकते हैं जो:

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

banners केवल Nothing के बराबर हो जाएगा जब आप स्पष्ट रूप में निर्दिष्ट करें कि Set banners = Nothing के साथ मूल्य।

यदि आपके पास Option Explicit चालू है (जो अनुशंसा है, लेकिन हमेशा मामला नहीं है) इस तकनीक के साथ आपको समस्याएं होंगी। उस स्थिति में, यदि bannersDim एड नहीं किया गया है और आप IsEmpty(banners) का परीक्षण करने का प्रयास करते हैं, तो आपको रनटाइम त्रुटि मिल जाएगी। यदि आपके पास Option Explicit नहीं है, तो आपको कोई समस्या नहीं होनी चाहिए।

संपादित करें: मैंने अभी यह related question and answer देखा है जो भी मदद कर सकता है।

+0

हाँ, यह समस्या है, बैनर के बिना पृष्ठों में 'बैनर' को 'मंद' नहीं किया गया है। – Armstrongest

0

आपको प्रत्येक पृष्ठ पर कम से कम dim banners होना चाहिए।

क्या आपके पास head.asp या प्रत्येक पृष्ठ पर कुछ शामिल नहीं है?

+0

वहाँ है ... हालांकि यह पृष्ठ बैनर निर्दिष्ट करता है और htmlwork.inc में "काम" किया जाता है ... इसलिए बैनर वाले पृष्ठों के लिए मुझे सिर से पहले चर सेट करने की आवश्यकता होती है। यह भ्रमित है, मुझे पता है। मुझे खुशी होगी जब मुझे इसे बनाए रखने की ज़रूरत नहीं है। – Armstrongest

25

IsObject काम कर सकता है, लेकिन IsEmpty एक बेहतर विकल्प हो सकता है - यह विशेष रूप से यह जांचना है कि कोई चर मौजूद है या प्रारंभ किया गया है या नहीं।

संक्षेप में प्रस्तुत करने के लिए: यदि किसी वैरिएबल (वस्तु स्पष्ट बिना) मौजूद है, या

  • IsNull(var) initialised है परीक्षण किया जाएगा यदि किसी वैरिएबल Null
  • var Is Nothing को सौंपा गया है, तो परीक्षण

    • IsEmpty(var) परीक्षण एक चर SetNothing पर है, लेकिन अगर आप किसी ऑब्जेक्ट पर कोशिश नहीं करते हैं तो यह एक त्रुटि फेंक देगा
    • IsObject(var) परीक्षण करेगा यदि एक चर एक वस्तु है (और जाहिर है कि False वापस आ जाएगा यदि varEmpty है)।
  • 0

    कोई भी लक्षण नहीं है, ऑब्जेक्ट, IsNull "विकल्प स्पष्ट" सेटिंग के साथ काम करता है, जैसा कि उपरोक्त stealthyninja ने गुमराह किया है। एकल रास्ता मुझे पता है 'त्रुटि पर फिर से शुरू करें अगला' सेटिंग के साथ 'हैक' करने के लिए 'विकल्प का स्पष्ट', ट्रिस्टन Havelick अच्छी तरह से इसे यहाँ करता है: Is there any way to check to see if a VBScript function is defined?

    +0

    मेरा मानना ​​है कि यह जांचना है कि कोई फ़ंक्शन परिभाषित किया गया है, जहां उपर्युक्त सिर्फ यह जांचने के लिए है कि एक साधारण चर अभी तक मौजूद है या नहीं। हालांकि दिलचस्प सवाल! – Hannele

    0

    कुछ हद तक संबंधित है, तो एक वैकल्पिक पैरामीटर का परीक्षण करने के IsMissing() है पारित किया गया था, इस मामले में एक वस्तु, इस तरह:

    Sub FooBar(Optional oDoc As Object) 
    
        'if parameter is missing then simulate it 
        If IsMissing(oDoc) Then Dim oDoc as Object: oDoc = something 
    
    ... 
    
    संबंधित मुद्दे