由于查询中的VBA功能,访问表单更新速度极慢

时间:2015-05-28 15:13:04

标签: sql vba ms-access access-vba

我有一个表单DW_Query_subform,它显示查询qryDataExport的输出,它收集另一个查询DW_Query的内容,并通过VBA函数提供进一步的过滤器(WHERE){ {1}}。

ToDouble(inputValue As Variant) As Double

当从查询中删除此功能时,它会合理地快速运行。 (完成时间不到一秒。)但是,当Function ToDouble(inputValue As Variant) As Double If (IsNull(inputValue)) Then inputValue = "59999" 'If we have no input, assume the area being covered is the whole Earth. ToDouble = CDbl(inputValue) End Function 添加到查询中时,通常需要十秒钟才能完成。

Radius在这里是WHERE (((DW_Query.Distance)<ToDouble([Forms]![DW_Form]![Radius])))表单上的TextBox控件,其中DW_Form是子表单。在测试用例中,表单包含“8”或空白。

即使DW_Query_subform包含少于100行,也会发生减速。 (已执行测试,其中父查询的行数与ZERO一样少,结果一致。)

可能导致这种放缓的原因是什么?完整查询如下。

DW_Query

我试图遵循下面的Gustav建议,但在引用新创建的表时,查询将不会更新并正确显示。 (除了一个字段外,所有字段都显示为空白,仅显示SELECT DW_Query.Map_Number, DW_Query.Map_Name, DW_Query.Map_Type, DW_Query.Town, DW_Query.Address, DW_Query.Street, DW_Query.Block, DW_Query.Lot, DW_Query.group, DW_Query.Folder, DW_Query.Distance FROM DW_Query WHERE ((DW_Query.Distance)<ToDouble([Forms]![DW_Form]![Radius])); ,用于显示两个其他字段的连接内容。)

更新:问题不在于使用ToDouble函数,还是在\的WHERE子句中进行比较,因为删除这两件事并不会导致显着的改进;我害怕让我一无所知。

2 个答案:

答案 0 :(得分:0)

您可以使用:

WHERE ((DW_Query.Distance)<Nz([Forms]![DW_Form]![Radius], 5999)) 

但由于只调用一次Radius的值,它不会运行得更快。

如果您没有距离索引,请尝试添加它。

答案 1 :(得分:0)

我对访问的了解很差,但是......为什么不这样做:

dim myDoubleValue as double 
myDoubleValue = ToDouble([Forms]![DW_Form]![Radius])
WHERE DW_Query.Distance < myDoubleValue

或者,如果这不起作用,您可以使用变量上的#符号来指定这是一个双精度值:

dim myDoubleValue#

myDoubleValue# = ToDouble([Forms]![DW_Form]![Radius])

WHERE DW_Query.Distance < myDoubleValue