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

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

验证方法

修改代码后保存表单,重复以下步骤验证:

  1. 打开表单,确认无#deleted记录,新增按钮正常;
  2. 录入记录后关闭表单;
  3. 再次打开表单,表已被清空,可正常录入多条记录,无异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:35:26