在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
相关产品推荐
相关产品推荐

