我有一个表单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子句中进行比较,因为删除这两件事并不会导致显着的改进;我害怕让我一无所知。
答案 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