You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access表单重新查询后新记录回退至旧记录的问题排查

Access表单新记录Requery后无法定位的解决方法

问题核心原因

你遇到的问题本质是:在新记录的After_Update事件中执行Requery时,这条新记录还没被正式保存到底层数据表中——Access默认会在切换记录、关闭表单等操作时自动保存,但After_Update触发时,记录可能仍处于内存编辑状态。此时Requery后的RecordsetClone里还没有这条新记录,自然会触发.NoMatch提示,表单也会回退到之前的旧记录。

修改后的VBA代码

在执行Requery前先强制保存当前记录,确保新记录写入数据表后再执行查询和定位:

Dim lngPK As Long

' 强制保存当前编辑的新记录,确保写入数据表
If Me.Dirty Then
    DoCmd.RunCommand acCmdSaveRecord
End If

' 获取保存后的记录主键(替换为你的实际主键字段)
lngPK = Me.[Ack_Number]

' 重新查询表单以更新控件
Me.Requery

' 定位回刚保存的新记录
With Me.RecordsetClone
    ' 如果主键是数字类型,用这个语句
    .FindFirst "[Ack_Number] = " & lngPK
    ' 如果主键是文本类型,替换成下面这条:
    '.FindFirst "[Ack_Number] = '" & lngPK & "'"
    
    If .NoMatch Then
        MsgBox "未找到记录!", vbCritical
    Else
        Me.Bookmark = .Bookmark
    End If
End With

关键注意事项

  • 必须先保存记录:Me.Dirty用于判断当前记录是否有未保存的修改,通过acCmdSaveRecord强制提交到数据表,这是解决问题的核心步骤
  • 主键类型适配:如果你的Ack_Number是文本类型,一定要修改.FindFirst的语句格式,用单引号包裹变量值
  • 避免重复保存:添加If Me.Dirty Then判断可以避免对已保存的旧记录执行多余的保存操作

内容的提问来源于stack exchange,提问作者PegTT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 18:50:13