【问题标题】:MS Access vba save button error 3021MS Access vba 保存按钮错误 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:是的,这就是解决方法。不过,由于(基本上)有两种保存条目的方法(按下按钮或切换到另一种形式),我想将这两个函数放在一个代码中。

标签: vba ms-access


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多