2008-09-26 6 views
7

J'essaie de retourner un dictionnaire à partir d'une fonction. Je crois que la fonction fonctionne correctement, mais je ne suis pas sûr de savoir comment utiliser le dictionnaire retourné.VBScript: Comment utiliser un objet dictionnaire renvoyé par une fonction?

Voici la partie pertinente de ma fonction:

Function GetSomeStuff() 
    ' 
    ' Get a recordset... 
    ' 

    Dim stuff 
    Set stuff = CreateObject("Scripting.Dictionary") 
    rs.MoveFirst 
    Do Until rs.EOF 
    stuff.Add rs.Fields("FieldA").Value, rs.Fields("FieldB").Value 
    rs.MoveNext 
    Loop 

    GetSomeStuff = stuff 
End Function 

Comment appeler cette fonction et utiliser le dictionnaire retourné?

EDIT: J'ai essayé ceci:

Dim someStuff 
someStuff = GetSomeStuff 

et

Dim someStuff 
Set someStuff = GetSomeStuff 

Lorsque je tente d'accéder someStuff, je reçois une erreur:

Microsoft VBScript runtime error: Object required: 'GetSomeStuff' 

EDIT 2: Essayer ceci dans la fonction:

Set GetSomeStuff = stuff 

résultats dans cette erreur:

Microsoft VBScript runtime error: Wrong number of arguments or invalid property assignment. 

Répondre

22

Je n'étais pas trop sûr de ce qui était votre problème, donc j'ai expérimenté un peu.

Il semble que vous venez de manquer que d'attribuer une référence à un objet, vous devez utiliser set, même pour une valeur de retour:

Function GetSomeStuff 
    Dim stuff 
    Set stuff = CreateObject("Scripting.Dictionary") 
    stuff.Add "A", "Anaconda" 
    stuff.Add "B", "Boa" 
    stuff.Add "C", "Cobra" 

    Set GetSomeStuff = stuff 
End Function 

Set d = GetSomeStuff 
Wscript.Echo d.Item("A") 
Wscript.Echo d.Exists("B") 
items = d.Items 
For i = 0 To UBound(items) 
    Wscript.Echo items(i) 
Next 
+0

je manquais la combinaison de Set GetSOmeStuff = choses et Set d = GetSomeStuff. Merci! – aphoria

+0

@ user66001 Je ne pense pas que ce soit une bonne idée d'essayer de modifier le code (ou la réponse!) De quelqu'un d'autre (en plus des tâches comme les corrections de typo, les mises à jour d'URL, etc.). sont faux ... Si vous remplacez 'd' par le nom de la fonction, vous appelez la fonction à chaque occurrence. L'absence de '()' pourrait vous induire en erreur pour utiliser un appel de fonction comme une variable. Je ne vois pas l'intérêt de créer la structure 'stuff' à chaque fois. Ce n'est pas critique ici, pour une démo aussi simple, mais cela peut être important dans un vrai programme. – PhiLho

+0

@PhiLho - Mon erreur. Désolé (Pensez que c'est important sur le principe, donc supprimé mes mauvaises informations). – user66001

0

Avez-vous essayé:

Dim returnedStuff 
Set returnedStuff = GetSomeStuff() 

Puis "Pour chaque" itérer sur le dictionnaire? Il y a un exemple d'utilisation du dictionnaire (bien que pour VB6, l'essentiel est le même!) here.

4

Avez-vous essayé de faire
set GetSomeStuff = stuff
dans la dernière ligne de la fonction?