编辑 - 正如Leif问here:当用户从数据表视图中删除多个记录时,我希望能够在VBA事件例程中确定要删除哪些记录。我需要此信息来删除文件服务器上的一些相关文件。如果只删除一条记录,我没有问题,因为它将是当前记录。但是如果删除多个记录呢?此列表是否可在VBA事件过程中的某个位置使用?
Form_Delete
事件的问题是当MS Access尝试删除所选行时它被触发,如果由于某些事情(关系等)失败,则会弹出错误消息和/或确认对话框。如果用户按取消,则删除的记录“神奇地”回来。我没有找到如何追踪实际删除的内容以及未删除内容的方法。
Form_AfterDelConfirm
在确认后运行一次,无法访问已删除的记录集合
我只需要一个真正删除的记录ID集合。
将所有可能删除的记录存储在集合中,然后与表单的记录集进行比较:
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
启用