【发布时间】:2025-12-05 23:30:01
【问题描述】:
在 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 中有多少),但它们都具有相同的名字和姓氏。
现在,我认为每次“when”循环运行时,其中的变量都会超出范围,从而变为空。在这种情况下,情况似乎并非如此。每次返回到person.setFirstName 时,集合中已有项目的firstName 都会更改为新行的当前firstName。 lastName 也是如此。
这让我相信 person 并不是在每次循环运行时都被创建,这给了我一个相似条目的集合,除了它们的唯一键。
关于如何让循环按应有的方式执行的任何想法?
【问题讨论】:
-
我会将循环内的变量声明移动到函数的顶部。我会用
Set person = new Person代替它。 -
这里是。谢谢你,DiegoAndresJAY。
标签: vba ms-access while-loop