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违例不是常规错误吗?

4

1 回答 1

2

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

Currentdb().Execute strSQL, dbFailOnError
于 2021-11-09T14:51:24.933 回答