VBScript: Como utiliize um objeto dicionário retornado de uma função?

StackOverflow https://stackoverflow.com/questions/140002

  •  02-07-2019
  •  | 
  •  

Pergunta

Eu estou tentando retornar um dicionário de uma função. Eu acredito que a função está a funcionar correctamente, mas não tenho certeza de como utilizar o dicionário retornado.

Aqui está a parte relevante da minha função:

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

Como faço para chamar esta função e usar o dicionário retornado?

EDIT: Eu tentei isso:

Dim someStuff
someStuff = GetSomeStuff

e

Dim someStuff
Set someStuff = GetSomeStuff

Quando tento acesso someStuff, eu recebo um erro:

Microsoft VBScript runtime error: Object required: 'GetSomeStuff'

EDIT 2: Tentando esta na função:

Set GetSomeStuff = stuff

Os resultados neste erro:

Microsoft VBScript runtime error: Wrong number of arguments or invalid property assignment.
Foi útil?

Solução

Eu não estava muito certo do que era o seu problema, então eu experimentei um pouco.

Parece que você acabou de perder que atribuir uma referência a um objeto, você tem que usar set, mesmo para um valor de retorno:

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

Outras dicas

Você tentou fazer
set GetSomeStuff = stuff
na última linha da função?

Você tentou:

Dim returnedStuff
Set returnedStuff = GetSomeStuff()

Em seguida, "For Each" iteração sobre o dicionário? Há um exemplo de como usar o dicionário (ainda que por VB6, a essência do que é o mesmo embora!) aqui .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top