填充集合VBA MS Access - 参考问题

问题描述 投票:1回答:2

在MS Access中填充VBA中的集合时出现问题。

这是我的代码:

Private Sub loadInfo()
    Dim sql As String
    sql = "SELECT * FROM table2';"

    Set db = CurrentDb
    Set rs = db.OpenRecordset(sql)

    With rs
        .MoveFirst
        While rs.EOF = False

            Dim person As New person
            Dim idToString As String
            idToString = rs.Fields("ID").value

            person.setFirstName (rs.Fields("first_name").value)
            person.setLastName (rs.Fields("last_name").value)

            people.Add person, idToString

            .MoveNext
        Wend
    End With
End Sub

该集合在类模块的顶部被声明为初始化。我可以添加项目就好了。然而,在Sub的末尾,我最终得到了一个具有适当数量的对象的集合(无论我在Recordset中有多少),但它们都具有相同的firstName和lastName。

现在,我认为每次“when”循环“循环”时,它内部的变量都会超出范围,从而变为空。在这种情况下,情况似乎并非如此。每当它回到person.setFirstName时,该集合中已经存在的项目的firstName将变为新行的当前firstNamelastName也是如此。

这让我相信person不会在每次循环进行时创建,给我一组类似的条目,除了它们的键是唯一的。

关于如何让循环执行它的任何想法?

vba while-loop access-vba
2个回答
0
投票

集合是键值配对列表。它不能有多个维度。

尝试使用用户定义的类型:

在模块声明中......

Public Type Person
    FirstName As String
    LastName As String
End Type

在表格声明中......

Dim typPerson() As Person

然后像这样使用......

ReDim typPerson(0 To rs.RecordCount - 1) As Person

Dim i As Integer
Do While Not rs.EOF
    With typPerson(i)
        .FirstName = rs!FirstName
        .LastName = rs!LastName
    End With
    i = i + 1
    rs.MoveNext
Loop

0
投票

在你的子loadinfo()中,在“.MoveNext”之前插入一行:“Set Person = Nothing”。如果不这样做,则整个时间都会将相同的项目添加到集合中。 HTH

© www.soinside.com 2019 - 2024. All rights reserved.