已编辑-按照Leif的要求here: 当用户以表格的形式从数据表视图中删除多个记录时,我希望能够在VBA事件例程中确定要删除的记录。我需要此信息来删除文件服务器上的某些关联文件。如果只删除一条记录,那么我没有问题,因为它将是当前记录。但是,如果要删除多个记录怎么办?此列表在VBA事件过程中的某个位置可用吗?
Form_Delete
事件的问题是,当MS Access 尝试删除选定的行时会触发该事件,如果由于某些原因(关系等)而失败,则会弹出错误消息并/或确认对话框。如果用户按“取消”,则删除的记录会“神奇地”返回。我没有找到如何追踪实际删除和未删除的方法。
Form_AfterDelConfirm
在确认后运行一次,无法访问已删除的记录集合
我所需要的只是确实已删除的记录ID的集合。
答案 0 :(得分:2)
将所有可能删除的记录存储在一个集合中,然后与表单的记录集进行比较:
Private PossiblyDeleted as New Collection 'Module level collection
Private Sub Form_Delete(Cancel As Integer)
'If collection doesn't exist it is created
PossiblyDeleted.Add Str(Me!ID) 'Store every ID
End Sub
Private Sub Form_AfterDelConfirm(Status As Integer)
If Status = 0 Then 'If Yes pressed
Dim RecID As Variant
Dim RS As Recordset
Set RS = Me.Recordset.Clone
For Each RecID In PossiblyDeleted 'loop through collection
RS.FindFirst ("ID = " & RecID)
If RS.NoMatch Then 'and see what was deleted
'Perform the action here
Debug.Print RecID
End If
Next
End If
Set PossiblyDeleted = Nothing 'Delete collection
Set RS = Nothing
End Sub
正如上文所述的C Perkins一样-当用户禁用确认时,这可能不起作用。我猜可以通过DoCmd.SetWarnings True