如何修复:Access VBA 中更新语句上的“操作必须使用可更新查询”

Posted

技术标签:

【中文标题】如何修复:Access VBA 中更新语句上的“操作必须使用可更新查询”【英文标题】:How to fix: "Operation must use an updateable query" on update statement in Access VBA 【发布时间】:2019-08-15 18:14:11 【问题描述】:

我正在尝试在 Access VBA 中运行更新查询以从临时更改表更新主表。表格按以下方式组织:

     Change_Table       
B_ID          Change       New_Value
111           Email         new@.com
222           email         new2@.com

Master_Table    
B_ID    Email
111    old@.com
222    old2@.com

Successful output:

Master_Table    
B_ID    Email
111    new@.com
222    new2@.com

我已确保两个表都具有主键,并且数据库/文件夹具有完全控制权限。该数据库在我的机器上是本地的。

我开发了以下代码来执行更新:

SQL = "Update Master_Table SET Email = (SELECT Change FROM Change_Table WHERE Master_Table.B_ID = Change.B_ID)"

DoCmd.RunSQL SQL

我不断收到运行时错误“3073”:操作必须使用可更新查询。

【问题讨论】:

【参考方案1】:

加入表格而不是嵌套。

SQL = "UPDATE Master_Table INNER JOIN Change_Table ON Master_table.B_ID = Change_Table.B_ID SET Master_Table.Email = Change_Table.Email"

使用 Access 查询生成器获取正确的语法,然后从 SQLView 复制/粘贴到 VBA。经常需要在 VBA 中做一些小的编辑,但它应该得到你想要的。

【讨论】:

感谢您的帮助。当我尝试运行该代码时,出现运行时错误“3144”:UPDATE 语句中的语法错误。 顺便说一句@gharold,最好保存JOIN查询,这将比VBA字符串SQL调用更有效,因为Access引擎保存了最佳执行计划。

以上是关于如何修复:Access VBA 中更新语句上的“操作必须使用可更新查询”的主要内容,如果未能解决你的问题,请参考以下文章

Access 2007 / VBA - 多个表单实例,从模块更新特定实例的控件

在access中用vba如何把SQL语句查询到的一个值赋给变量?

如何在 access accde 中更新表单和编译的 vba

如何使用 VBA 动态 SQL SELECT 语句调用 MS Access 参数查询

更新底层 SQL 表时如何在 Access 中触发 VBA 代码?

Access VBA:更改子表单的记录源