所以我有这个简单的代码循环一个附加到表的列表框。它在列表框中找到所选项目,并在我的"操作日志"中更新相应的记录集。表。我的问题是即使它说lstAllGroups.Column(1, i)
保持正确的价值;它没有更新记录。我已在调试器中逐步完成此操作,并添加了所有内容但是groupNum。
Dim recPicker As String
Dim recAllPicker As String
Set db = CurrentDb
Set RstRecSet = db.OpenRecordset("tblActionLog", dbOpenDynaset)
'Set RstRecSet = db.OpenRecordset("Select * from tblActionLog Where GroupNum = '" & recAllPicker & "';", dbOpenDynaset)
If chkGrp = True Then
allGrps = lstAllGroups.ListCount
For i = 0 To allGrps
If lstAllGroups.Selected(i) = True Then
recAllPicker = lstAllGroups.Column(1, i)
RstRecSet.AddNew
RstRecSet("GroupNum").Value = lstAllGroups.Column(1, i)
RstRecSet("GroupName").Value = lstAllGroups.Column(0, i)
RstRecSet("ActionItem").Value = txtActionitm.Value
RstRecSet("GroupNum").Value = recPicker
RstRecSet("DateClosed").Value = txtDateClosed.Value
RstRecSet("DateIdentified").Value = txtDateID.Value
RstRecSet("Analyst").Value = txtAnalyst.Value
RstRecSet("Comments").Value = txtComments.Value
RstRecSet.Update
End If
Next
Else
答案 0 :(得分:1)
您的代码使用lstAllGroups.ListCount
按索引号访问列表框行。但是,.ListCount
从1开始计数,列表框行索引值从0开始。这意味着等效于lstAllGroups.Column(1, lstAllGroups.ListCount)
指的是列表框中不存在的行。
这是一个立即窗口示例,希望能够澄清情况。我的列表框包含4行。
? Me.lstUsers.ListCount
4
? Me.lstUsers.Column(0, 0) ' <-- first row
46
? Me.lstUsers.Column(0, 3) ' <-- last row
48
? Me.lstUsers.Column(0, 4) ' <-- row which does not exist
Null
请注意,当我从列表框行中请求一个不存在的值时,Access只会给我Null而不会抱怨---它不会抛出错误消息。
我认为您的代码受此问题影响。但是,我不确定这是否是唯一涉及的因素。在我看来,您的代码会为 tblActionLog 添加一行,其中包含列表框每行的 GroupNum 和 GroupName 值。然后在表中添加一个最后一行(对应于不存在的列表框行),其中包含 GroupNum 和 GroupName 的Null。