2010-10-27 10 views
6

Bir işlevi kullanarak değiştirmek istediğim form verisi sözlüğüm var.VBScript işlevi bir sözlük döndürüyor mu?

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 

sorun

Wrong number of arguments or invalid property assignment 

VBScript'teki bunu yapmanın bir yolu var mı

olarak hat queryCleanForm = myDictForm hatalar nedir?

Seti queryCleanForm = myDictForm

+1

Bu soru, kendi isteğinize göre 5 dakika önce http://stackoverflow.com/questions/4038021/vba-return-dictionary-from-function adresine benzerdir. – JohnFx

+1

Vay canına! (minimum karakter gereksinimini karşılar) – quakkels

cevap

14

bu deneyin: nesneler ile

SET queryCleanForm = myDictForm 

bunun bir olduğunu VBScript anlatmak için SET kullanmak gerekir

+1

teşekkürler ... şu anda acımasızca bariz bir şekilde :-) – quakkels

1

Evet, SET komutunu kullanmak gerekir nesne referansı değil, bir değer türü atamaktadır.

0

Ayrıca, işlevdeki ByRef veya ByVal değerlerini de kullanabilirsiniz. ByVal, bir işlev veya alt öğeye gönderdiğiniz nesne, işlev içinde kullanılacak ve işlev tamamlandıktan sonra atılacak özel belleğe kopyalanır. ByRef, bir işleve gönderdiğiniz nesneye başvurur ve yaptığınız tüm işlemler, anahtarları kaldırma, nesneyi ayarlama vb. Doğrudan gönderdiğiniz nesneye yapılır.

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 

Test alt öğesi, alt koşulu için değişken türden bir değişkenle çağrılar. Fonksiyonda alt tarafa gönderilen nesnenin türünü doğrularım. Nesne türü bir sözlük nesnesi değilse (bu değilse), alt testte bildirilen test_tict nesnesi olan in_Dict nesnesi bir sözlük nesnesine atanacaktır. Referansı daha iyi göstermek için ayrıca addvalue adı verilen ikinci alt kısmı da dahil ettim. Nesneyi tekrar referans olarak işleve iletirim ve sözlük nesnesine başka bir anahtar eklerim. Ana test alt testinde sayımı gönderin. Bu durumda 2 anahtar mevcut.

+0

Bu soru zaten * yıl * önce kabul edilmiş bir cevabı var ... – alestanis