违反主键会触发警告,但不会触发错误处理程序
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
我在表单上有一个按钮,它运行一个插入语句,该语句从表单上的一些文本框中获取数据并将它们放入 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