如何在Access VBA的AfterDelConfirm事件中判断用户删除确认状态
问题说明
我的数据库允许用户删除记录,当前使用的窗体关联了Delete、BeforeDelConfirm和AfterDelConfirm事件。在BeforeDelConfirm与AfterDelConfirm事件之间,系统会弹出提示框询问:“您即将删除1条记录。如果点击是,将无法撤销此删除操作。确定要删除这些记录吗?”(是/否)。我需要在VBA的AfterDelConfirm事件中判断用户选择的选项,仅在用户确认删除时,将被删记录插入Audit_Table。但现有代码无论用户选择如何都会执行插入操作,现有代码如下:
Dim Global_ModelKey As Integer 'used to store temporarily the ModelKey value Private Sub Form_Delete(Cancel As Integer) Global_ModelKey = Me.modelKey.Value End Sub Private Sub Form_AfterDelConfirm(Status As Integer) '--- SQL command --- sql = '<sql command> '--- display message with the SQL command to check syntax --- result = MsgBox(sql, vbOK, "SQL check", "", 1000) DoCmd.SetWarnings False DoCmd.RunSQL (sql) DoCmd.SetWarnings True Global_ModelKey = 0 End Sub
解决方法
AfterDelConfirm事件的Status参数直接反映了用户的操作结果,它的关键取值如下:
- acDeleteOK(值为0):用户确认执行删除
- acDeleteCancel(值为1):用户取消删除
只需通过判断Status的值,仅在其等于acDeleteOK时执行插入Audit_Table的SQL命令,即可实现需求。
修改后的代码如下:
Dim Global_ModelKey As Integer ' 临时存储ModelKey值 Private Sub Form_Delete(Cancel As Integer) Global_ModelKey = Me.modelKey.Value End Sub Private Sub Form_AfterDelConfirm(Status As Integer) ' 仅当用户确认删除时执行审计插入操作 If Status = acDeleteOK Then ' --- SQL命令 --- sql = "<sql command>" ' --- 弹出消息检查SQL语法 --- result = MsgBox(sql, vbOK, "SQL检查", "", 1000) DoCmd.SetWarnings False DoCmd.RunSQL (sql) DoCmd.SetWarnings True End If Global_ModelKey = 0 End Sub
内容的提问来源于stack exchange,提问作者Lubomir Burian
相关产品推荐
相关产品推荐

