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
相关产品推荐
相关产品推荐

