在MS Access中用VBA执行SQL更新查询,求别名支持及语句调试
MS Access VBA中带表别名的UPDATE查询解决方案
1. 表别名在Access UPDATE中的可用性
完全可以使用表别名!Access的SQL支持为表设置别名,不管是查询还是更新操作,合理用别名能让代码更简洁易读。不过要注意Access的UPDATE JOIN语法和SQL Server等数据库不一样,这是你当前代码可能报错的核心原因。
2. 修正后的VBA代码
你写的是SQL Server风格的语句,在Access里执行会失败。Access的UPDATE JOIN需要把关联逻辑放在UPDATE和SET之间,正确写法如下:
Dim sqlstring As String sqlstring = "UPDATE dbo.table1 AS t1 " _ & "INNER JOIN dbo.table2 AS t2 " _ & "ON t1.[problemDescription] = t2.[problemDescription] " _ & "SET t1.[problemID] = t2.[problemID]" DoCmd.RunSQL sqlstring
关键调整点:
- 把JOIN结构移到UPDATE之后、SET之前,这是Access SQL的强制语法要求
- 用
AS关键字定义别名(虽然Access允许省略AS,但加上后可读性更强,也更符合通用SQL规范) - 删掉了原代码里多余的
FROM子句,Access的UPDATE不需要单独用FROM来关联表
3. 额外实用提示
- 如果
dbo.table1和dbo.table2是链接到SQL Server的表,先确认链接配置正常,且你有足够的更新权限 - 建议在执行更新前,先把SQL改成SELECT查询测试匹配逻辑,确认数据对应正确后再执行更新:
SELECT t1.[problemDescription], t1.[problemID] AS 原ID, t2.[problemID] AS 目标ID FROM dbo.table1 AS t1 INNER JOIN dbo.table2 AS t2 ON t1.[problemDescription] = t2.[problemDescription] - 要是不想每次执行都弹出更新确认提示,可以在执行前加
DoCmd.SetWarnings False,执行完再恢复DoCmd.SetWarnings True
内容的提问来源于stack exchange,提问作者Deshaun Smantty
相关产品推荐
相关产品推荐

