Access临时表删除所有记录后表单出现#deleted异常求助
Access拆分视图表单清空临时表后的异常修复
问题概述
在现有运行的Access系统中新增临时表数据收集功能时,遇到以下异常:
按步骤创建绑定到本地临时表TestTable的拆分视图表单,并在表单On Open事件中用DoCmd.RunSQL ("Delete * from TestTable")清空表后,首次关闭再打开表单会出现1条#deleted记录,新增按钮失效;需再次关闭打开才能恢复正常,但下次打开会重复该问题。
操作复现步骤
- 创建仅含少量字段的本地表
TestTable,保留默认设置; - 通过表单向导生成绑定到该表的表单,保留默认设置;
- 进入表单设计视图:将默认视图改为拆分视图,并在
On Open事件中添加上述清空表的VBA代码; - 保存关闭表单后,打开录入几条记录再关闭;
- 再次打开表单,出现
#deleted记录,仅能录入1条,新增按钮失效; - 第三次打开表单,无记录且可正常录入,但后续打开仍会触发异常。
系统环境
- 单机独立系统,无多用户访问;
- 涉及表为本地表,系统内存在其他链接表;
- Windows 11;
- Microsoft Office Professional 2019;
- Microsoft Access 2019 MSO (版本2310 内部版本16.0.16924.20054) 64位
问题根源
拆分视图的记录集在On Open事件触发时已完成初始化,此时用DoCmd.RunSQL清空表会导致表单缓存的记录集与底层数据不同步,产生无效的#deleted记录,进而干扰表单的新增功能逻辑。
修复方案
方案1:移至On Load事件执行清空并刷新记录集
将清空操作移至表单On Load事件,执行后强制刷新记录集,确保数据同步:
Private Sub Form_Load() ' 使用CurrentDb.Execute替代DoCmd.RunSQL,避免弹出确认框 CurrentDb.Execute "DELETE * FROM TestTable", dbFailOnError ' 强制表单重新获取最新数据 Me.Requery End Sub
方案2:清空后重新绑定记录源
若拆分视图缓存问题仍存在,可在清空后重新绑定表单的记录源:
Private Sub Form_Load() CurrentDb.Execute "DELETE * FROM TestTable", dbFailOnError Me.RecordSource = "TestTable" End Sub
方案3:每次打开表单重建临时表
如果临时表仅用于单次会话,可每次打开表单时删除旧表并重建,彻底避免缓存问题:
Private Sub Form_Load() ' 先删除旧表(忽略不存在的错误) On Error Resume Next CurrentDb.TableDefs.Delete "TestTable" On Error GoTo 0 ' 重建临时表,根据实际字段调整结构 CurrentDb.Execute "CREATE TABLE TestTable (ID AUTOINCREMENT PRIMARY KEY, Field1 TEXT(50), Field2 INTEGER)", dbFailOnError ' 绑定表单记录源 Me.RecordSource = "TestTable" End Sub
验证方法
修改代码后保存表单,重复以下步骤验证:
- 打开表单,确认无
#deleted记录,新增按钮正常; - 录入记录后关闭表单;
- 再次打开表单,表已被清空,可正常录入多条记录,无异常。
内容的提问来源于stack exchange,提问作者liz
相关产品推荐
相关产品推荐

