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

MS Access 2016删除100条记录后报错3027求助

MS Access 2016 删除记录触发3027只读错误的解决方案

问题复现

执行VBA代码清空[Name_List]表时,删除100条记录后触发错误:

3027 - Cannot update. Database or object is read-only.
手动全选删除记录可正常执行,问题近期出现,使用代码如下:

strStep = "Step 1 : Purge Table"
strSQL = "" & _
        "DELETE [Name_List].* FROM [Name_List]"
db.Execute strSQL, dbFailOnError

解决方案

  • 检查文件与文件夹权限
    右键数据库文件→属性→安全选项卡,确认当前登录用户拥有写入、修改权限。若权限缺失,添加对应权限并保存设置。同时检查文件所在文件夹的权限设置,确保用户可对文件夹内文件进行修改操作。

  • 压缩修复数据库
    数据库文件损坏可能引发这类异常:

    1. 打开Access软件,通过「文件」→「信息」→「压缩和修复数据库」工具处理当前数据库;
    2. 若修复后问题仍存在,新建空白数据库,将原库中的表、查询等对象导入新库,再测试删除逻辑。
  • 优化VBA删除逻辑
    逐行删除的事务日志可能触发异常,可修改代码为更高效的全表清空方式,同时提前释放可能的记录集锁定:

    Dim rs As Recordset
    ' 关闭所有打开的记录集,避免锁定冲突
    On Error Resume Next
    For Each rs In CurrentDb.Recordsets
        rs.Close
    Next rs
    On Error GoTo 0
    
    strStep = "Step 1 : Purge Table"
    ' 简化DELETE语句,直接清空表
    strSQL = "DELETE * FROM [Name_List]"
    ' 改用dbRunAsync参数异步执行,减少事务压力
    CurrentDb.Execute strSQL, dbFailOnError + dbRunAsync
    
  • 排除文件锁定与只读状态

    1. 关闭数据库后重新打开,确认窗口标题栏无「只读」标识;
    2. 检查是否有其他用户或进程(如杀毒软件、备份工具)正在占用数据库文件,暂时关闭相关程序后再测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:03:06