2010-10-27 2 views
6

J'ai un dictionnaire de données de formulaire que je veux modifier en utilisant une fonction.Une fonction VBScript peut-elle renvoyer un dictionnaire?

function queryCleanForm(myDictForm) 

    dim arrayKeys 
    arrayKeys = myDictForm.keys 

    for i=0 to myDictForm.count-1 
     myDictForm(arrayKeys(i)) = replace(myDictForm(arrayKeys(i)), "'", "''") 
     response.write myDictForm(arrayKeys(i)) 
    next 

    queryCleanForm = myDictForm 
end function 

Le problème est la ligne queryCleanForm = myDictForm erreurs que

Wrong number of arguments or invalid property assignment 

Est-il possible de le faire dans VBScript?

+1

Cette question est étrangement similaire à http://stackoverflow.com/questions/4038021/vba-return-dictionary-from-function demandé 5 minutes avant le vôtre. – JohnFx

+1

ouah! (Répondre à l'exigence de caractère minimum) – quakkels

Répondre

14

Essayez ceci:

SET queryCleanForm = myDictForm 

Avec des objets dont vous avez besoin d'utiliser SET pour dire VBScript qu'il est référence d'objet que vous affectez n'est pas un type de valeur.

+1

merci ... c'est douloureusement évident maintenant :-) – quakkels

1

Oui, vous devez utiliser la commande SET:

Set queryCleanForm = myDictForm

0

Vous pouvez également utiliser les valeurs ByRef ou ByVal dans la fonction. ByVal, l'objet que vous avez envoyé à une fonction ou à un sous-répertoire est copié dans une mémoire privée pour être utilisé dans la fonction et supprimé une fois la fonction terminée. ByRef, l'objet que vous avez envoyé à une fonction est référencé et toutes les manipulations que vous effectuez, la suppression des clés, la définition de l'objet etc, est directement effectuée sur l'objet que vous avez envoyé.

E.g.

Sub test 
    DIM testDict as variant 
    call setdict(testDict) 

    testDict.Add "test", "value" 

    call addValue(testDict, "test2","another value") 

    msgbox testDict.Count 

    Set testDict = Nothing 
End Sub 

Sub setdict(ByRef in_Dict as Variant) 
    If Typename(in_Dict) <> "Dictionary" Then 
    SET in_Dict = CreateObject("Scripting.Dictionary") 
    end if 
end sub 

sub addValue(ByRef in_Obj as Variant, ByVal in_Key as String, ByVal in_Value as String) 
if not in_Obj.Exists(in_Key) then 
    in_Obj.Add in_Key, in_Value 
end if 
end sub 

Le sous-appel de test avec une variable de type variant au sous-ensemble. Dans la fonction je valide le type de l'objet envoyé au sous-marin. Si le type d'objet n'est pas un objet dictionnaire (ce qui n'est pas le cas), alors l'objet in_Dict, qui est en fait l'objet testDict déclaré dans le sous-test, sera défini sur un objet dictionnaire.

Pour mieux démontrer la référence, j'ai également inclus le second sous-élément appelé addvalue. Je repasse l'objet à la fonction comme référence et ajoute une autre clé à l'objet dictionnaire. Dans le test principal sub malade puis poster le compte. Dans ce cas, il y a 2 clés présentes.

+0

Cette question a déjà une réponse acceptée il y a * ans * ... – alestanis

Questions connexes