在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
将更改为新行的当前firstName
。 lastName
也是如此。
这让我相信,每次循环进行循环时都不会创建person
,除了他们的密钥之外,还给我一组类似的条目。
关于如何让循环按原样运行的任何想法?
答案 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