我有一个Microsoft Access 2010的形式投寄箱,并代表某些参数的复选框。 我需要运行基于这些参数条件的查询。 这也应该是为了拉的所有数据,无论从下拉框和复选框标准的可能性。
我有实现这个的两个工作方式:
我建立与查询IIf
中陈述WHERE
子句中,嵌套语句,直到我已经占了标准每个组合。 我参考在SQL逻辑的标准通过使用Forms!frmMyFrm!checkbox1
例如或通过使用函数FormFieldValue(formName,fieldName)
返回的形式和控制名的输入的控制值(这是由于先前问题)。 我设置的查询与窗体的按钮按运行。
我设置了VBA子与按下按钮运行。 余检查条件和查询SQL设置为基于所述控制标准(以同样的方式作为参考以前的方法)规定的SQL字符串。 这也涉及到许多If...Else
语句,但有一点更容易比一个巨大的查询阅读。
什么是首选的方法? 哪个更有效?
我不相信你会找到一个方法是比其他更有效的,至少不会明显。 在大多数情况下它仅仅是个人喜好。
我一般使用VBA和检查每个下拉/复选框的值并构建SQL查询的片段,然后在最后放在一起。 你可能会碰到这种方法的问题是,虽然,如果你有大量的下拉菜单和复选框的代码很容易在得到“丢失”。
如果长时间运行是非常关键的,虽然你总是可以使用一些提示的你怎么测试的VBA代码运行时间? 看哪种方式速度更快。
大量的实验,并经过指示具有预先建立的查询比有SQL在VBA编译的快了一点新的信息 ,在Microsoft Access的背景下,最有效和明确的解决方案是建立并保存了一些相关的查询预先。
本质上,建立与每个查询的字符串IIf
依赖于不同的绕圈。 然后,你只需要运行的最终查询。 在这里你将要结合VBA的唯一情况If...Else
是,如果你需要查询的东西比更复杂的SELECT...WHERE(IIf(...))
这有几个优点:
- 该SQL已经编译在保存的查询,加快东西。
- 没有更多的迷路中的代码:
- 没有巨大的, 近乎不可能到编辑查询与太多的
IIf
秒。 - 最小VBA代码更容易效仿。
- 至少对我来说,谁不是在SQL方面的专家,它的方便,我可以经常使用的MS Access可视化查询生成的每一个部分。
文章来源: Access dynamic query - Better to build one conditional SQL query or multiple queries with VBA?