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

在Excel中执行SQL更新语句报错:需要可更新查询,求技术协助

解决“an updatable query is required for the operation”错误

嘿,我来帮你搞定这个问题!这个报错的核心是你的ADO连接配置和查询执行方式有两个关键问题,我一步步给你拆解修正:

问题1:IMEX=1强制了只读模式

你连接字符串里的IMEX=1是用来处理Excel中混合数据类型列的导入参数,但它会强制把数据源设为只读状态——哪怕你加了Readonly=False也会被覆盖。如果你的表格不需要处理混合数据类型,直接删掉这个参数就行;如果必须保留,把IMEX=1改成IMEX=0(前提是你能保证列数据类型统一)。

问题2:UPDATE是动作查询,不需要用Recordset接收

UPDATE属于动作查询,执行后只会返回受影响的行数,不会返回记录集。你用Set rs = con.Execute(...)的方式完全没必要,反而会因为Recordset无法接收动作查询结果引发问题。

修正后的完整代码

Dim con As ADODB.Connection
Dim affectedRows As Long ' 可选:用来接收更新的行数,方便验证结果
Set con = New ADODB.Connection
' 修正连接字符串:移除IMEX=1,确保可写配置生效
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & _
         ";Extended Properties=""Excel 12.0 Xml;HDR=YES;Readonly=False"";"
' 直接执行UPDATE语句,不需要绑定Recordset
con.Execute "UPDATE [Tipo record 010$] SET tipo_record = 'NICK' WHERE numero_operazione = '999189944458'", affectedRows
' 可选:在立即窗口打印更新行数,确认执行效果
Debug.Print "成功更新了" & affectedRows & "条记录"
' 清理对象
Set con = Nothing

额外提醒

  • 确保你的Excel文件没被其他程序锁定(比如在另一个窗口打开着),否则就算连接配置对了也写不进去;
  • 如果工作表有保护或者冻结窗格,也会导致无法更新,需要先解除这些限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:51:30