MS Access vba 保存按钮错误 3021
Posted
技术标签:
【中文标题】MS Access vba 保存按钮错误 3021【英文标题】:MS Access vba save button error 3021 【发布时间】:2017-12-18 14:32:52 【问题描述】:出于各种原因,我想在我的表单上设置一个自定义按钮来保存当前记录。我使用导航表单并希望在保存条目时触发相同的过程(完整性检查、用户输入等),因此每当用户按下“保存”按钮或切换到另一个表单时。将有条件地要求用户确认该过程,因此也可以取消它。
一切运行顺利,但有一个非常奇怪和烦人的异常:每当我点击 new 记录上的保存按钮并在“BeforeUpdate”事件中提示一条消息时,我都会收到
RTE 3021(“没有当前记录”)
没有 MsgBox,一切都很好。更奇怪的是: 当我通过使用导航表单切换到另一个表单来触发保存过程时(或简单地按用于数据输入的表单“外部”),一切都很好。
这是一个极简示例(与 DoCmd.Save、Requery 或 acCmdSaveRecord 类似的结果):
Private Sub vt_save_Click()
Me.Dirty = False
End Sub
Private Form_BeforeUpdate(Cancel As Integer)
Cancel = True
MsgBox "Test"
End Sub
有什么想法吗?我根本无法解决这个错误。
【问题讨论】:
应该展示什么简约示例?可能错误来自在BeforeUpdate
触发器中调用的 other 代码(即完整性检查、用户输入),无法在新记录上运行。请发布更完整的代码。
我从未使用过更新前事件的表单。我在按钮 Click 事件中进行数据验证。
@Parfait 这个简约的例子向您展示了所描述的内容。新建一个数据库,一张表,一张表格。创建记录,输入数据并按下按钮。等等 - 你会得到错误。
@June7:是的,这就是解决方法。不过,由于(基本上)有两种保存条目的方法(按下按钮或切换到另一种形式),我想将这两个函数放在一个代码中。
【参考方案1】:
您可以尝试使用表单中的值运行查询,同时检查记录是否存在。
表上有主键吗?如果是这样,主键将是您的焦点。
Private Sub vt_Save_Click()
dim rst as DAO>Recordset
Dim strSQL as String
Dim strID as string
strID = me.YourPrimaryKeyField
strSQL = "SELECT * " & _
"FROM YourTableName " & _
"WHERE (((YourTableName.YourFieldName) =" & me.PrimaryKeyField & "));"
set rst = currentdb.openrecordset(strsql)
if rst.recordcount = 0 then
currentdb.execute "INSERT INTO YourTableName ( List All Fields to Add ) " & _
"SELECT List All Field controls with values to add;"
End IF
'Anything else you want the code to do from here
EndCode:
If not rst is nothing then
rst.close
set rst = nothing
End IF
End Sub
对 Form_LostFocus() 事件重复此过程。如果您想让它变得更简单,请将此代码设为模块并在表单上的两个事件触发器中调用。
如果这不起作用,请告诉我,我很乐意提供进一步的帮助。
【讨论】:
【参考方案2】:最直接、最合理的解决方案是使用错误处理程序——我至今顽固地忽略了它。
Private Sub save_Click()
On Error GoTo Err_Handler
Me.Dirty = False
Exit_Here:
Exit Sub
Err_Handler:
If Err.Number = 2101 Then
'ignore or message
Else
MsgBox Err.Description
End If
Resume Exit_Here
End Sub
【讨论】:
以上是关于MS Access vba 保存按钮错误 3021的主要内容,如果未能解决你的问题,请参考以下文章
MS Access 2013 从 VBA 调用插入查询并出现奇怪的错误
MS Access VBA,只有在所有必需的文本框都包含有效数据后才启用按钮的有效方法