MS Access关联更新查询报错‘Operation must use an updateable query’求助
解决Access更新查询报错“Operation must use an updateable query”的方法
针对你遇到的问题,给你几个实用的排查和解决方向:
检查关联的查询是否可更新
先确认[MJS_Get ROs]这个查询本身能不能被编辑:直接运行它,尝试手动修改任意一条记录。如果改不了,说明这个查询是不可更新的——常见原因包括用了DISTINCT、聚合函数(比如SUM/COUNT)、UNION联合查询,或者它的数据源是只读的外部文件(比如锁定的Excel、无主键的SQL Server视图)。
解决办法:把查询结果转成临时表,再用临时表做关联:-- 先创建临时表 SELECT * INTO Temp_ROs FROM [MJS_Get ROs]; -- 用临时表执行更新 UPDATE ROtable INNER JOIN Temp_ROs ON ROtable.[Repair Order] = Temp_ROs.REPR_ORDR_ID SET ROtable.Ul_Date = Date(), ROtable.UL_Empl = "12345", ROtable.UL_Grp = "A1", ROtable.UL_Br = "2C", ROtable.NoAllocation = "Not Allocated" WHERE ROtable.NoAllocation Is Null; -- 更新完成后删除临时表 DROP TABLE Temp_ROs;改用IN子句替代JOIN关联
既然你之前用[MJS_Get ROs]筛选RO编号没问题,直接用子查询的IN语句来定位要更新的记录,绕开JOIN带来的不可更新问题:UPDATE ROtable SET ROtable.Ul_Date = Date(), ROtable.UL_Empl = "12345", ROtable.UL_Grp = "A1", ROtable.UL_Br = "2C", ROtable.NoAllocation = "Not Allocated" WHERE ROtable.NoAllocation Is Null AND ROtable.[Repair Order] IN (SELECT REPR_ORDR_ID FROM [MJS_Get ROs]);检查表的基础设置
- 确保
ROtable有主键字段,Access需要主键来精准定位要更新的记录,没有主键的表很容易出现更新失败的情况。 - 确认你打开数据库的权限足够,要是数据库文件设为只读,或者当前账号没有写入
ROtable的权限,也会触发这个报错。
- 确保
简化语句语法
原语句的WHERE子句有多余的嵌套括号,虽然不影响逻辑,但有时候Access对过于冗余的语法兼容性不佳,改成简洁的写法即可:WHERE ROtable.NoAllocation Is Null。
内容的提问来源于stack exchange,提问作者Shaves
相关产品推荐
相关产品推荐

