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
解决方案
检查文件与文件夹权限
右键数据库文件→属性→安全选项卡,确认当前登录用户拥有写入、修改权限。若权限缺失,添加对应权限并保存设置。同时检查文件所在文件夹的权限设置,确保用户可对文件夹内文件进行修改操作。压缩修复数据库
数据库文件损坏可能引发这类异常:- 打开Access软件,通过「文件」→「信息」→「压缩和修复数据库」工具处理当前数据库;
- 若修复后问题仍存在,新建空白数据库,将原库中的表、查询等对象导入新库,再测试删除逻辑。
优化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排除文件锁定与只读状态
- 关闭数据库后重新打开,确认窗口标题栏无「只读」标识;
- 检查是否有其他用户或进程(如杀毒软件、备份工具)正在占用数据库文件,暂时关闭相关程序后再测试。
内容的提问来源于stack exchange,提问作者chrtak
相关产品推荐
相关产品推荐

