webentwicklung-frage-antwort-db.com.de

Überprüfen Sie, ob ein Objekt in VBScript vorhanden ist

Ich verwalte eine klassische ASP - App, die vor langer, langer Zeit von einer externen Firma in VB - Skript geschrieben wurde.

Ich habe eine Reihe von Imagefile-Pfaden wie folgt:

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"

Dies gilt NUR für Seiten mit Banneranzeigen. Es gibt einige Standardcodes, die diese Liste in einer Include-Datei durchlaufen (die für alle Seiten gilt).

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

Das Problem ist, dass, wenn banners nicht auf der Seite instanziiert wird (nicht auf allen Seiten), der Fehler Can't find object angezeigt wird

Wie kann ich prüfen, ob ein Objekt im Skript VB vorhanden ist?

15
Armstrongest

@ Atømix: Ersetzen

If Not banners Is Nothing then 

und verwenden

If IsObject(banners) Then 

Ihren anderen Code können Sie dann in eine Include-Datei einfügen und oben auf Ihren Seiten verwenden, um unnötige Duplizierungen zu vermeiden.

@Cheran S: Ich habe meine obigen Ausschnitte mit Option Explicit ein/aus getestet und habe bei beiden Versionen keine Fehler festgestellt, unabhängig davon, ob Dim banners vorhanden war. :-)

31
stealthyninja

IsObject könnte funktionieren, aber IsEmpty könnte eine bessere Option sein. Sie soll insbesondere prüfen, ob eine Variable existiert oder initialisiert wurde.

Zusammenfassen:

  • IsEmpty(var) testet, ob eine Variable existiert (ohne Object Explicit) oder initialisiert ist
  • IsNull(var) testet, ob eine Variable Null zugewiesen wurde.
  • var Is Nothing testet, ob eine Variable Set in Nothing war, gibt aber einen Fehler aus, wenn Sie sie an etwas ausprobieren, das kein Objekt ist
  • IsObject(var) testet, ob eine Variable ein Objekt ist (und gibt anscheinend noch False zurück, wenn varEmpty ist).
26
Hannele

Wenn eine Variable zwar deklariert, aber nicht initialisiert wird, lautet ihr Wert Empty, den Sie mit der Funktion IsEmpty() überprüfen können:

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

banners ist nur gleich Nothing, wenn Sie diesen Wert explizit mit Set banners = Nothing zuweisen.

Sie haben jedoch Probleme mit dieser Technik, wenn Sie Option Explicit aktiviert haben (was die Empfehlung ist, aber nicht immer der Fall ist). Wenn banners nicht Dimed ist und Sie versuchen, IsEmpty(banners) zu testen, wird in diesem Fall ein Laufzeitfehler angezeigt. Wenn Sie Option Explicit nicht aktiviert haben, sollten Sie keine Probleme haben.

edit: Ich habe gerade diese bezogene Frage und Antwort gesehen die auch helfen könnte.

3

Etwas verwandt ist IsMissing(), um zu testen, ob ein optionaler Parameter übergeben wurde, in diesem Fall ein Objekt wie dieses:

Sub FooBar(Optional oDoc As Object)

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

...
0
Elliptical view

Sie müssen mindestens dim banners auf jeder Seite haben. 

Haben Sie keinen head.asp oder etwas auf jeder Seite? 

0
Eduardo Molteni

Keiner von IsEmpty, Is Object, IsNull arbeitet mit der "Option Explicit" -Einstellung, da Stealthyninja oben irreführend geantwortet hat. Die einzige Möglichkeit, die ich kenne, ist, die 'Option Explicit' mit dem 'On Error Resume Next' zu "hacken" Einstellung, wie es Tristan Havelick schön tut: Gibt es eine Möglichkeit zu überprüfen, ob eine VBScript-Funktion definiert ist?

0
devplayer