web-dev-qa-db-fra.com

Vérifier si un objet existe dans VBScript

Je maintiens une application classique ASP écrite dans le script VB par une société externe il y a très longtemps.

J'ai un tableau de chemins de fichiers image, comme ceci:

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"

Cela existera UNIQUEMENT sur les pages qui ont des bannières publicitaires. Il existe un code standard qui parcourt cette liste dans un fichier à inclure (commun à toutes les pages).

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

Le problème est que si banners n'est pas instancié sur la page (ce n'est pas sur toutes les pages), j'obtiens une erreur Can't find object

Quelle est la manière appropriée de vérifier si un objet existe dans le script VB?

15
Armstrongest

@ Atømix: Remplacer

If Not banners Is Nothing then 

et utilise

If IsObject(banners) Then 

Vous pouvez ensuite placer votre autre code dans un fichier include et l’utiliser en haut de vos pages pour éviter les duplications inutiles.

@Cheran S: J'ai testé mes extraits au-dessus avec Option Explicit activé/désactivé et je n'ai rencontré aucune erreur pour l'une ou l'autre version, que Dim banners soit présent ou non. :-)

31
stealthyninja

IsObject pourrait fonctionner, mais IsEmpty pourrait être une meilleure option - elle est spécifiquement destinée à vérifier si une variable existe ou a été initialisée.

Résumer:

  • IsEmpty(var) testera si une variable existe (sans Object Explicit) ou est initialisée
  • IsNull(var) testera si une variable a été affectée à Null
  • var Is Nothing testera si une variable a été Set à Nothing , mais émettra une erreur si vous l'essayez sur quelque chose qui n'est pas un objet
  • IsObject(var) testera si une variable est un objet (et retournera apparemment toujours False si var est Empty ).
26
Hannele

Si une variable est déclarée mais non initialisée, sa valeur sera Empty, que vous pouvez vérifier avec la fonction IsEmpty():

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

banners ne sera égal à Nothing que si vous lui attribuez explicitement cette valeur avec Set banners = Nothing.

Vous aurez cependant des problèmes avec cette technique si vous avez activé Option Explicit (ce qui est recommandé, mais ce n’est pas toujours le cas). Dans ce cas, si banners n'a pas été Dimed et que vous essayez de tester IsEmpty(banners), vous obtiendrez une erreur d'exécution. Si vous n'avez pas Option Explicit activé, vous ne devriez pas avoir de problèmes.

edit: Je viens de voir cette question liée à la question et à la réponse qui pourrait également aider.

3

IsMissing() permet de vérifier si un paramètre facultatif a été passé, dans ce cas un objet, comme ceci:

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

Vous devez avoir au moins dim banners sur chaque page. 

N'avez-vous pas un head.asp ou quelque chose d'inclus sur chaque page? 

0
Eduardo Molteni

Aucune des méthodes IsEmpty, Is Object, IsNull avec le paramètre "Option Explicit", comme stealthyninja ci-dessus a répondu de manière erronée .. La seule façon que je connaisse consiste à "pirater" le "Option Explicit" avec le "Sur erreur, reprise suivante" comme le fait bien ici Tristan Havelick: Y at-il un moyen de vérifier si une fonction VBScript est définie?

0
devplayer