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

