如何确定要删除哪些记录?

问题描述 投票:2回答:1

编辑 - 正如Leif问here:当用户从数据表视图中删除多个记录时,我希望能够在VBA事件例程中确定要删除哪些记录。我需要此信息来删除文件服务器上的一些相关文件。如果只删除一条记录,我没有问题,因为它将是当前记录。但是如果删除多个记录呢?此列表是否可在VBA事件过程中的某个位置使用?

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

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

我只需要一个真正删除的记录ID集合。

ms-access access-vba
1个回答
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启用

© www.soinside.com 2019 - 2024. All rights reserved.