2015-11-03 63 views
0

我有一个查询,我正在使用between语句为日期范围提取数据。我建立了一个VBA函数,它将评估表格中的最后日期(最大日期)(以获取第一个日期)和另一个函数来评估停止日期(之间的最后一个日期)...所以我的在日期声明之间看起来像这样:在hhMaxDte()和hhLastDte()之间hhMaxDte()和hhLastDte()MS访问日期范围函数减慢查询

由于某些原因,在我的两个函数之间的语句需要什么似乎比运行查询的时间长8倍,如果我只是手动输入实际日期在我自己。任何人都知道这是为什么,以及我如何动态地做类似的过程,但花费相同的时间来运行查询,就像我手动输入日期一样?我的功能代码如下:

Function hhMaxDte() 

If DMax("row_date", "HH_CIB_Raw_Data") + 1 = Date Then 
    hhMaxDte = 0 
Else 
    hhMaxDte = DMax("row_date", "HH_CIB_Raw_Data") + 1 
End If 

End Function 

Function hhLastDte() 

If DMax("row_date", "HH_CIB_Raw_Data") + 1 = Date Then 
    hhLastDte = 0 
Else 
    hhLastDte = Date - 1 
End If 

End Function 
+0

根据您的描述,我猜测这两个函数会针对每条记录运行,即使它们没有必要,因为它们不使用任何记录特定的参数。 – SunKnight0

+0

是的,我只是偶然发现你在这里说的:http://allenbrowne.com/QueryPerfIssue.html – wlfente

+0

这些函数只会被调用一次,因为它们没有任何参数,所以如果你调整你的查询替换具有固定值的函数,你会看到几乎相同的结果。然而,没有你的询问,你会让我们在野外猜测。这可能是因为你错过了日期字段的索引。 – Gustav

回答

1

我已经根据上述评论中的反馈计算出答案。该函数正在为每一行数据运行,因此显着减慢了结果的返回。为了避免这种情况,我用内置的功能的Dmax(分析最大的表索引日期)和日期访问查询条件部分,以创建语句之间:

Between DMax("row_date","HH_CIB_Raw_Data")+0 And Date()-1 

现在追加查询能够根据表格中缺失的最近日期动态提取数据,并在几秒钟内运行VS 2-3分钟。 感谢所有的输入家伙!