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

VBA执行SQL关联UPDATE查询报80004005语法错误如何解决?

问题解决方案

问题根因

  • 你使用的SQLite ODBC驱动对应的SQLite版本不支持带FROM子句的UPDATE关联更新语法,这是SQLite和其他主流关系型数据库(PostgreSQL/MySQL等)的语法差异
  • UPDATE属于数据操作类语句,不会返回结果集,你用rst.Open执行UPDATE语句会直接触发报错,非查询类SQL需要调用连接对象的Execute方法执行
  • 你之前添加方括号的写法错误,[Tech_Share.Date]会被识别为单个列名,而非Tech_Share表的Date列,正确分隔写法为[Tech_Share].[Date]

修复步骤

1. 调整SQL语句为SQLite兼容写法

优先选择全版本兼容的关联子查询写法,避免版本兼容问题:

UPDATE Tech_Share_Attendance
SET Match_Date = (
    SELECT Date FROM Tech_Share 
    WHERE Tech_Share.TechShare_ID = Tech_Share_Attendance.Tech_Share_ID
)
WHERE EXISTS (
    SELECT 1 FROM Tech_Share 
    WHERE Tech_Share.TechShare_ID = Tech_Share_Attendance.Tech_Share_ID
)

如果你确认当前SQLite版本>=3.33.0,也可以使用SQLite标准UPDATE FROM写法:

UPDATE Tech_Share_Attendance AS tsa
SET Match_Date = ts.Date
FROM Tech_Share AS ts
WHERE ts.TechShare_ID = tsa.Tech_Share_ID

2. 修改VBA执行逻辑

你需要先执行更新操作,再单独执行查询拉取最新数据填充列表,替换你原来的SQL执行部分代码即可:

' 执行更新操作
Dim updateSql As String
updateSql = "UPDATE Tech_Share_Attendance SET Match_Date = (SELECT Date FROM Tech_Share WHERE Tech_Share.TechShare_ID = Tech_Share_Attendance.Tech_Share_ID) WHERE EXISTS (SELECT 1 FROM Tech_Share WHERE Tech_Share.TechShare_ID = Tech_Share_Attendance.Tech_Share_ID)"
conn.Execute updateSql

' 执行查询获取最新数据
Dim selectSql As String
selectSql = "SELECT * FROM Tech_Share_Attendance T WHERE T.Contact_Key = " + Str(ContactKey) + " ORDER BY T.Tech_Share_ID"
Debug.Print selectSql
rst.Open selectSql, conn

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:36:04