访问 VBA 'Syntax Error in Join Operation'

Access VBA 'Syntax Error in Join Operation'

我试图将 SELECT 查询附加到 Access 中的 VBA 对象,但我不断收到错误消息:

Syntax Error in Join operation

Dim sql As String
sql = "SELECT R_History.iteration, R.RuntimeID, Policylanguage.FormBody " & _
      "FROM PolicyLanguage " & _
      "INNER JOIN ([Policy&Elements] " & _
      "INNER JOIN ((R " & _
      "INNER JOIN R_History " & _
      "ON (R.RunTimeID = R_History.RunTimeID " & _
      "AND (R.ReportID = R_History.ReportID)) " & _
      "INNER JOIN StatePolicyLanguage " & _
      "ON R_History.Iteration = StatePolicyLanguage.Iteration) " & _
      "ON [Policy&Elements].[Text&ElementID] = StatePolicyLanguage.[TextID&ElementID] " & _
      "ON PolicyLanguage.TextID = [Policy&Elements].TextID " & _
      "WHERE (((R.RuntimeID) = Dlast('runtimeID','r')));"
DoCmd.RunSQL (sql)

我这辈子都做不到 运行。谁能告诉我哪里出了问题?

编辑:这是我试图模拟的代码

如果您是 运行 查询,其中条件是在表单中输入的值(例如 field1 = frm1.txtValue),您可以创建一个参数化查询,其中将传递的参数添加到 WHERE 子句.这样,您就不必在 VBA 中创建 SQL---您只需在 VBA.

中设置参数

正如其他人所指出的,Access 要求您在每次联接后加上括号:

from (((Table1
    inner join Table2 on Table2.field1 = Table1.field1)
    inner join Table3 on Table3.field2 = Table2.field2)
    inner join Table4 on Table4.field3 = Table3.field3)

因此,正如其他人所建议的,如果您绝对需要通过 VBA 构建查询,请将 JOIN 和 ON 子句放在一起以防止混淆,并添加必要的括号。

我发现当您必须在 Access 中创建复杂查询时(在 SQL 编辑器或 VBA 中),将 SQL 写在更友好的编辑器(例如 Notepad++),支持语法高亮显示等功能。然后,您可以将查询粘贴到需要的地方。