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

时间:2015-08-05 00:37:56

标签: vba while-loop access-vba

在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。

现在,我想每次"当"循环进行循环,其中的变量将超出范围,从而变为空。在这种情况下,情况似乎并非如此。每次返回person.setFirstName时,集合中已有项目的firstName将更改为新行的当前firstNamelastName也是如此。

这让我相信,每次循环进行循环时都不会创建person,除了他们的密钥之外,还给我一组类似的条目。

关于如何让循环按原样运行的任何想法?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

在您的sub loadinfo()中,插入以下行: “设置人=没有”,之前 “ .MoveNext”。 如果您不这样做,则始终将同一项目添加到集合中。 HTH