如何确定要删除的记录?

时间:2019-04-06 16:12:35

标签: ms-access access-vba

已编辑-按照Leif的要求here当用户以表格的形式从数据表视图中删除多个记录时,我希望能够在VBA事件例程中确定要删除的记录。我需要此信息来删除文件服务器上的某些关联文件。如果只删除一条记录,那么我没有问题,因为它将是当前记录。但是,如果要删除多个记录怎么办?此列表在VBA事件过程中的某个位置可用吗?

Form_Delete事件的问题是,当MS Access 尝试删除选定的行时会触发该事件,如果由于某些原因(关系等)而失败,则会弹出错误消息并/或确认对话框。如果用户按“取消”,则删除的记录会“神奇地”返回。我没有找到如何追踪实际删除和未删除的方法。

Form_AfterDelConfirm在确认后运行一次,无法访问已删除的记录集合

我所需要的只是确实已删除的记录ID的集合。

1 个答案:

答案 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

启用它