包含2个或更多字段的VBA集合

时间:2014-09-25 14:52:42

标签: sql excel vba excel-vba recordset

我使用Collection来存储VBA中记录集的数据。记录集有两个字段。

我正在使用集合,因为我想通过使用key参数来利用其防止重复的能力。我正在运行SQL查询以多次生成记录集,并且很多结果将与之前的结果相同,但有些会有所不同。我想从每个记录集中捕获一组独特的结果。

我目前可以使用以下方法执行此操作:

        rs.Open sql_vehicles, cn

        If rs.RecordCount > 0 Then

            Do While Not rs.EOF
                On Error Resume Next
                value = rs.Fields("EVN").value
                catalogue_Tags.Add Item:=value, Key:=value
                rs.MoveNext
                On Error GoTo 0
            Loop
        End If

所有都驻留在for循环中,每次生成一个新的记录集,可能会有所不同。

这将为我提供一个具有来自" EVN"的独特价值的集合。记录集中的字段,但我需要能够将第二个字段存储在记录集中,但我仍然希望避免重复EVN字段!

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:0)

在我看来,你可以使用2个系列来获得2个独特的列表...

value = rs.Fields("EVN").value
catalogue_Tags_EVN.Add Item:=value, Key:=value
value = rs.Fields("ABC").value
catalogue_Tags_ABC.Add Item:=value, Key:=value

我只是注意到你的要求与我第一次阅读时略有不同...... 添加" Microsoft Scripting Runtime"参考你的项目并使用字典词典。

Dim evnValues as new Scripting.Dictionary ' this will actually be a dictionary of dictionaries.
循环内部

执行此操作...

ABCvalue = rs.Fields("ABC").value
if not evnValues.Exists(value) then
    ' sub dictionary does not exist yet. initialize the list for this evn value
    evnValues(value)=New Scripting.Dictionary
end if 
evnValues(value).item(ABCValue)=ABCValue ' accumulate a list of the ABCValues relative to the unique evnValue.

最后,您将获得一个字典,其中顶级名称是您唯一的EVN值,子值将是一个或多个ABC值的集合。