Access VBA中TRANSFORM语句存在语法错误,请求技术协助
排查Access VBA中TRANSFORM语句的语法错误
我帮你梳理了这段代码里的问题,核心是SQL字符串拼接时的语法疏漏,具体修正和分析如下:
错误根源拆解
- 子句间缺少空格:SQL的关键字(比如
SELECT、WHERE)和前一段字符串拼接时没有留空格,导致数据库引擎无法识别独立的子句——比如原代码里TRANSFORM...直接连SELECT,会变成SumOfTONSELECT这种无效语法,这是触发报错的主要原因。 - 字段引用不规范:
BAR1.G最好加上方括号写成BAR1.[G],虽然G不是Access保留字,但这是避免关键字冲突的通用好习惯。 - 冗余括号:WHERE子句里的多层嵌套括号完全多余,既降低可读性,也没必要。
修正后的完整代码
Sub TransformX1() Dim dbs As Database Dim strSQL As String Set dbs = CurrentDb strSQL = "TRANSFORM Sum(BAR1.[TON]) AS SumOfTON " _ & "SELECT BAR1.[MABD], Sum(BAR1.[TON]) AS [Total Of TON] " _ & "FROM BAR1 " _ & "WHERE BAR1.[MABD] < 1300 AND BAR1.[MAGH] < 1300 AND BAR1.[G] = 1 " _ & "GROUP BY BAR1.[MABD] " _ & "PIVOT BAR1.[MAGH]" ' 交叉表属于选择查询,用OpenQuery显示结果更合适,RunSQL更适配动作查询(如INSERT/UPDATE) DoCmd.OpenQuery strSQL ' 如果坚持用RunSQL,确保查询逻辑合法即可,不过OpenQuery体验更好 ' DoCmd.RunSQL strSQL End Sub
额外小提示
拼接SQL字符串时,记得在每个子句的末尾或下一句开头预留空格,能从根源避免这类低级语法错误;另外Access里DoCmd.RunSQL更适合执行修改数据的动作查询,交叉表这类展示数据的查询用DoCmd.OpenQuery会更贴合场景。
内容的提问来源于stack exchange,提问作者Mojtaba
相关产品推荐
相关产品推荐

