VBScript: ¿Cómo utilizar un objeto de diccionario devuelto por una función?

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

  •  02-07-2019
  •  | 
  •  

Pregunta

Estoy tratando de devolver un diccionario de una función. Creo que la función funciona correctamente, pero no estoy seguro de cómo utilizar el diccionario devuelto.

Aquí está la parte relevante de mi función:

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

¿Cómo llamo a esta función y uso el diccionario devuelto?

EDITAR: he intentado esto:

Dim someStuff
someStuff = GetSomeStuff

y

Dim someStuff
Set someStuff = GetSomeStuff

Cuando intento acceder a someStuff, aparece un error:

Microsoft VBScript runtime error: Object required: 'GetSomeStuff'

EDITAR 2: Probar esto en la función:

Set GetSomeStuff = stuff

Resultados en este error:

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

Solución

No estaba muy seguro de cuál era su problema, así que experimenté un poco.

Parece que te lo perdiste para asignar una referencia a un objeto, tienes que usar set , incluso para un 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

Otros consejos

¿Has intentado hacer
establecer GetSomeStuff = stuff
en la última línea de la función?

¿Has probado:

Dim returnedStuff
Set returnedStuff = GetSomeStuff()

Entonces " Para Cada " iterando sobre el diccionario? Hay un ejemplo de uso del Diccionario (aunque para VB6, ¡la esencia es la misma!) aquí .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top