Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Iterate through a VB6 Dictionary

I'm a non-VB6 person who had the misfortune of inheriting a buggy legacy VB6/Classic ASP project. There's a section where a lot of entries are put into a Dictionary and I want to see all it contains. I tried this (oParams is a Dictionary):

Dim o As Object
Dim sDicTempAggr As String
sDicTempAggr = ""
For Each o In oParams
    sDicTempAggr = sDicTempAggr & ", " & o
Next

Which returned:

Object doesn't support this property or method : 438

Using Option Explicit, how do I iterate through a VB6 Dictionary to find out everything it contains?

like image 779
Dinah Avatar asked May 07 '10 15:05

Dinah


2 Answers

Here's a sample for iterating, if you still have a problem look at the second loop to inspect the types of the values in the dictionary

  Dim oParams As New Dictionary
    oParams.Add 1, "This"
    oParams.Add 2, "That"
    oParams.Add 3, "The other"
    Dim key As Variant
    Dim sDicTempAggr  As String
    Dim sTypes As String
    For Each key In oParams.Keys
        sDicTempAggr = sDicTempAggr & IIf(sDicTempAggr <> "", ",", "") & oParams(key)
    Next key
    For Each key In oParams.Keys
          sTypes = sTypes & IIf(sTypes <> "", ",", "") & TypeName(oParams(key))
    Next key
like image 100
cmsjr Avatar answered Sep 22 '22 08:09

cmsjr


An enumeration over a Dictionary isn't of type Object, you should use Variant instead:

Dim o As Variant
Dim sDicTempAggr As String
sDicTempAggr = ""

For Each o In oParams
    sDicTempAggr = sDicTempAggr & ", " & oParams(o)
Next

Also within the For Each the Key is returned not the dictionary member hence the oParams(o) for the value, if you change to For Each o In oParams.items you can use oParams directly.

like image 21
Alex K. Avatar answered Sep 21 '22 08:09

Alex K.