2016-06-27 130 views
0

我想优化使用Access作为数据库的遗留应用程序。一些查询的问题是,运行几小时后他们没有返回任何东西。我试图通过逐个添加连接来找出问题。现在我碰到了一个查询,因为它没有返回任何东西并且永远不会执行。 查询在添加使用SubQueries获取数据的左连接之后的行为如下。
任何建议,将衷心感激..访问查询永远执行

回答

1

加入聚合列(MaxOfColumn)可能无法正常工作。

我建议:将[qry Aggregate Query]的结果插入临时表中。加入该表,而不是在有问题的查询中。

您可以使用SELECT INTO查询(以及事先删除旧的临时表)或INSERT INTO查询(并预先清空临时表)。

编辑
一旦你拥有了它的原理工作的,我建议使用追加查询(INSERT INTO)而不是生成表查询。

因此,您的临时表保持不变,您可以在用于JOIN的字段上添加索引,以进一步提高性能。

要打开主查询,然后你做VBA:

' Empty temp table 
CurrentDb.Execute "DELETE * FROM Temptable" 
' Run Append query 
CurrentDb.Execute "NameOfYourAppendQuery" 
' Open main query 
DoCmd.OpenQuery "MainQuery" 
+0

@拉拉:做一些阅读,试一试。这并不难。查询类型:http://www.fmsinc.com/tpapers/queries/#Action_Queries。复制'[qry List ASDT tbl ASDT P1T_AGENT_STAFF Active MAX END DATE]',将其更改为** Make Table **查询。运行。相反,在主要查询中使用结果表。 – Andre

+0

感谢您的链接Andre.I创建并运行Make Table.Now在查询中我应该如何加入'LEFT JOIN [MakeTableName] ON [tbl ADW] .H10_STAFF_PARTY_ID = [MakeTableName] .STF_STAFF_PARTY_ID)'。这是正确的方式吗? – Lara

+0

@Lara:是的,无论你现在有哪些'[qry List ASDT tbl ASDT P1T_AGENT_STAFF Active MAX END DATE]',用'[MakeTableName]'代替它。 – Andre

1

尝试添加索引的表在这些列:

[tbl ASDT P1T_AGENT_STAFF] - (STF_END_EFF_DT) 
[qry List ASDT tbl ASDT P1T_AGENT_STAFF Active MAX END DATE] - (maxOfSTF_END_EFF_DT) 

虽然好像你甚至不使用此列,你已经拥有它可在maxOfSTF_END_EFF_DT ,那为什么要加入这张表?

+0

我加盟让'STF_END_EFF_DT' Column.'STF_END_EFF_DT'已经是一个指数和'QRY列表ASDT TBL ASDT P1T_AGENT_STAFF活动MAX END DATE'是Subquery ..我在这里失踪的任何事情? – Lara

+0

但是不是'STF_END_EFF_DT' ='maxOfSTF_END_EFF_DT'?你已经有这个信息。 – sagi