我在Access 2010数据库中有一个大致如下的查询:
select * from (table1 inner join table2 on table1.city = table2.code)
inner join table3 on table3.col1 = table2.col1 and table3.col2 = table2.col2;
查询用于报表,工作正常(我可以运行报表并获取数据)。但是,当我尝试打开查询时(在数据表或设计视图中),我得到不支持JOIN表达式。
我知道这意味着什么 - 嵌套的JOIN以及长ON条件需要放在括号中。以下方法可行:
select * from (table1 inner join table2 on table1.city = table2.code)
inner join table3 on (table3.col1 = table2.col1 and table3.col2 = table2.col2);
现在抓住这个问题:当我保存查询并稍后再打开时, Access会再次删除括号。结果,我再次收到同样的错误。 Access GUI没有提供直接在SQL视图中打开查询的方法,在设计或数据表视图中打开它会在我有机会修复SQL代码之前给出错误。 (在数据表视图中,显示数据,错误对话框显示在其上,并在我单击“确定”后立即关闭。)
在这种情况下如何获取查询的SQL代码?
答案 0 :(得分:0)
用于提取查询的SQL代码的VBA宏显示为here。
首先,创建一个VBA模块。在模块中,创建以下子项:
Public Sub printBrokenQuery()
Debug.Print CurrentDb().QueryDefs("BrokenQuery").SQL
End Sub
按Ctrl + G调出立即窗口(显示调试输出)。然后通过将光标放在源代码中并按下F5来运行上面的子程序。
现在创建另一个子:
Public Sub setBrokenQuery()
CurrentDb().QueryDefs("Broken").SQL = _
"(your query here)"
End Sub
获取查询的源代码并找出解决方法(有几个答案)。最后,将SQL代码粘贴到新的子区域中,其中显示(your query here)
。将光标放在该子中并运行它。 Voilà问题解决了。修复错误后,可以删除VBA模块。