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-访问,VBA 错误

使用 MS Access VBA 更改标签的默认标题

MS Access VBA,只有在所有必需的文本框都包含有效数据后才启用按钮的有效方法

按下按钮后在 MS Access 中导入 .DBF 文件,使用 VBA

在按钮单击 MS Access 2013 VBA 在子窗体中创建新记录