访问动态查询 - 更好地建设一个有条件的SQL查询或多个查询使用VBA?(Access dynami

2019-10-21 16:51发布

我有一个Microsoft Access 2010的形式投寄箱,并代表某些参数的复选框。 我需要运行基于这些参数条件的查询。 这也应该是为了拉的所有数据,无论从下拉框和复选框标准的可能性。

我有实现这个的两个工作方式:

  1. 我建立与查询IIf中陈述WHERE子句中,嵌套语句,直到我已经占了标准每个组合。 我参考在SQL逻辑的标准通过使用Forms!frmMyFrm!checkbox1例如或通过使用函数FormFieldValue(formName,fieldName)返回的形式和控制名的输入的控制值(这是由于先前问题)。 我设置的查询与窗体的按钮按运行。

  2. 我设置了VBA子与按下按钮运行。 余检查条件和查询SQL设置为基于所述控制标准(以同样的方式作为参考以前的方法)规定的SQL字符串。 这也涉及到许多If...Else语句,但有一点更容易比一个巨大的查询阅读。

什么是首选的方法? 哪个更有效?

Answer 1:

我不相信你会找到一个方法是比其他更有效的,至少不会明显。 在大多数情况下它仅仅是个人喜好。

我一般使用VBA和检查每个下拉/复选框的值并构建SQL查询的片段,然后在最后放在一起。 你可能会碰到这种方法的问题是,虽然,如果你有大量的下拉菜单和复选框的代码很容易在得到“丢失”。

如果长时间运行是非常关键的,虽然你总是可以使用一些提示的你怎么测试的VBA代码运行时间? 看哪种方式速度更快。



Answer 2:

大量的实验,并经过指示具有预先建立的查询比有SQL在VBA编译的快了一点新的信息 ,在Microsoft Access的背景下,最有效和明确的解决方案是建立并保存了一些相关的查询预先。

本质上,建立与每个查询的字符串IIf依赖于不同的绕圈。 然后,你只需要运行的最终查询。 在这里你将要结合VBA的唯一情况If...Else是,如果你需要查询的东西比更复杂的SELECT...WHERE(IIf(...))

这有几个优点:

  1. 该SQL已经编译在保存的查询,加快东西。
  2. 没有更多的迷路中的代码:
    • 没有巨大的, 近乎不可能到编辑查询与太多的IIf秒。
    • 最小VBA代码更容易效仿。
  3. 至少对我来说,谁不是在SQL方面的专家,它的方便,我可以经常使用的MS Access可视化查询生成的每一个部分。


文章来源: Access dynamic query - Better to build one conditional SQL query or multiple queries with VBA?