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

Access VBA运行提示数据库或对象只读,.Edit代码行报错如何解决?

报错根本原因

你当前调用.Edit的对象rsOO是基于查询OpenOrdersOnOrderImportFile打开的记录集,从代码中字段前缀Orders.、OrdersRawData.可以看出,这个查询是关联了两张表的联合查询,多表联合查询默认是不可编辑的,所以直接对其执行编辑操作就会触发「Database or object is read-only」报错。
除此之外还有两种可能触发该报错的场景:

  • 打开记录集时没有显式指定编辑权限,默认以只读模式打开
  • 数据库文件本身属性为只读、或者存放在无写入权限的文件夹中

修复方案

方案1:调整查询属性+修改记录集打开参数(改动最小)

  1. 打开OpenOrdersOnOrderImportFile的设计视图,右键空白处打开查询属性面板,将「记录集类型」从「快照」修改为「动态集(可更新的)」,同时确认两张关联表已经设置了主键和正确的关联关系,否则联合查询本身就不支持编辑。
  2. 将代码中打开记录集的两行修改为如下内容,显式指定编辑权限:
Set rsOO = CurrentDb.OpenRecordset("OpenOrdersOnOrderImportFile", dbOpenDynaset, dbSeeChanges)
Set rsCH = CurrentDb.OpenRecordset("OrderChanges", dbOpenDynaset, dbSeeChanges)

方案2:单独操作实体表(更稳定,推荐)

不要直接编辑联合查询的记录集,单独打开Orders表的记录集,用Project、CustomizedItem作为匹配条件定位对应记录后更新,不受联合查询可编辑属性限制,逻辑更稳定。
比如将原来的编辑逻辑:

.Edit
.Fields("Orders.Detailer/Engineer") = .Fields("OrdersRawData.Detailer/Engineer")
.Update

替换为单独更新Orders表的逻辑即可。

其他排查项

  • 确认Access数据库文件属性没有被设置为「只读」,存放路径没有写入权限限制
  • 如果是拆分式数据库,确认后端数据库文件没有被其他用户以独占只读方式打开

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:27:02