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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了填充集合VBA MS Access - 参考问题相关的知识,希望对你有一定的参考价值。

在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不会在每次循环进行时创建,给我一组类似的条目,除了它们的键是唯一的。

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

答案

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

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

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

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
另一答案

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

以上是关于填充集合VBA MS Access - 参考问题的主要内容,如果未能解决你的问题,请参考以下文章

从 VBA (MS-Access) 填写 PDF 表单

在列表框 ms-access 2013 VBA 中将多个不同的字段作为列表项返回

将 VBA 用于 MS Access 2000 文本框的控制源

带有行着色的MS Access VBA列表框?

使用 MS Access 和 VBA 更新 Ms Word 文档中的(字段代码:数据库)字段

MS Access VBA 修改 Excel 工作表而不写入 Drive