【发布时间】:2021-12-22 04:41:54
【问题描述】:
我在表单上有一个按钮,该按钮运行插入语句,该语句从表单上的某些文本框中获取数据并将它们放入表格中。
如果用户在主键(两个文本框的串联)中输入重复信息,我想弹出一个消息框,说明发生了什么,并可能删除标准 Access 警告(但这不是那么大一笔交易)。
我以为我可以输入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违例不是常规错误吗?
【问题讨论】:
-
使用
Currentdb().Execute方法并传递dbFailOnError标志。 -
@KostasK。那成功了,谢谢!您能否将此作为答案发布,以便我接受?也仅供参考,数据库错误不属于 vba 错误,因此我们必须使用标志强制它,这是问题吗?
-
确实,这就是
dbFailOnError标志的目的(加上它回滚更改)。请参阅方法文档页面上的备注。
标签: vba error-handling primary-key ms-access-2016 insert-statement