"不支持JOIN表达式"在Access中,如何编辑查询

时间:2016-12-19 14:37:30

标签: ms-access

我在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代码?

1 个答案:

答案 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模块。