违反主键会触发警告,但不会触发错误处理程序

Primary key violation triggers warning, but does not trigger error handler

我在表单上有一个按钮,它运行一个插入语句,该语句从表单上的一些文本框中获取数据并将它们放入 table。

如果用户在主键(2 个文本框的串联)中输入重复信息,我想弹出一个消息框说明发生了什么,并可能删除标准访问警告(但事实并非如此太重要了)。

我想我可以输入一个 On Error GoTo 然后放入我的 msgbox 但这不起作用。出现访问警告并且未添加新记录,但 On Error 被忽略。 “成功”消息框甚至仍然弹出。

这是我的代码的要点:

Dim strSQL As String
strSQL = [INSERT STATEMENT]

On Error GoTo Duplicate:
DoCmd.RunSQL (strSQL)
MsgBox "Ticket Completed!", vbOKOnly, "Success!"

JumpShip:
    Exit Sub

Duplicate:
Select Case Err.Number
    Case 3022
        MsgBox "This ticket has already been completed!", vbOKOnly, "Error!"
        Resume JumpShip
    Case Else
        Resume JumpShip
    End Select

End Sub

我也试过 On Error 没有指定代码(只是为了更容易找到问题)但结果是一样的。每次都会弹出“由于主键违规等等而未附加 1 条记录”消息,但错误处理程序会被忽略。弹出成功消息框,然后就完成了。 PK违规不是常规错误吗?

您需要使用 Database.Execute() 方法,传递 dbFailOnError 选项标志,如果查询因任何原因失败,它将回滚更改并引发运行时错误。

Currentdb().Execute strSQL, dbFailOnError