我试图将SELECT查询附加到Access中的VBA对象,但我不断收到错误消息:
Join操作中的语法错误
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)
我无法让它在我的绝对生命中运行。谁能告诉我是怎么回事?
答案 0 :(得分:0)
如果您运行的查询中,条件是以表格形式输入的值(例如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中)创建复杂的查询时,在支持语法突出显示等功能的更友好的编辑器(例如Notepad ++)中编写SQL可能会有所帮助。 。然后,您可以将查询粘贴到需要的地方。