关于我正在构建的数据库采用的方法的一般问题。我计划使用一些表单,允许 DB 业务用户输入条件,通过单选按钮等限制他们的搜索,然后根据他们的选择运行查询。
对于有一个或两个过滤器的简单查询,在查询设计视图中将数据字段的条件与相应的表单元素相关联似乎很容易,但是在处理嵌套时这种方法会失败(并且似乎很难阅读/编辑) if 语句(例如,如果 A 则为 x,如果 B 则为 y,如果 C 则为 z,否则为 q)。
我遇到了一篇文章,该文章描述了在数据库中创建一个单独的表,其中将存储查询名称和相应的 SQL 字符串,它们是在 VBA 中创建的,在 onClick 事件或某些基于表单的触发器之后运行。确定查询条件的逻辑都在VBA中,一旦代码执行,系统就会留下一条干净的SQL语句,存储在上述表中,然后用于执行查询。我相信每次访问/修改表单并请求查询时,表中的 SQL 字符串都会被覆盖。
由于这是我从事的第一个严肃的数据库,我正在寻找有关采取方法的一些指导。我刚才描述的是正确的还是处理这种情况的相当标准/常见的方法?有什么大问题吗?立即想到的一个问题是,如果两个数据库用户同时尝试使用不同的条件运行相同的查询,会发生什么?应该注意的是,我的用户群很小——可能只有 5 个用户会顺便访问数据库,用于临时报告等。
提前致谢!
编辑2:作为一个一般示例,假设我的数据库有一个如下表:
ID......Sale_Date......类别
1....... 2013 年 1 月 1 日............Foo
2....... 2013 年 1 月 3 日............酒吧
3...... .. 2013 年 1 月 1 日........酒吧
4........ 2013 年 1 月 7 日............酒吧
现在在我的表单上,我有文本框,用户可以在其中指定日期范围,这在查询中被过滤为
在 [Forms]![myFrm]![FromDate] 和 [Forms]![myFrm]![ToDate] 之间
效果很好。
至于类别,我希望有复选框或其他一些表单元素,用户可以在其中指定包含/排除的类别。这是我遇到问题的地方。我试过了:
IIf([Forms]![myFrm]![Cat]=1,([tbl_data].[Category]) In ("Foo","Bar"),IIf([Forms]![myFrm]![Cat]= 2,"Foo","酒吧"))
... Cat=1 代表“全部”,2 和 3 分别代表 Foo 和 Bar。Access 给我一个错误,即查询太复杂,但如果我去掉嵌套的 if(因此忽略搜索这两个类别的选项),它就可以工作。
现在,显然这是一个大大简化的示例,但它让我开始思考如何处理表单驱动的查询,因为数据库的增长和更多的固定查询被加入。VBA 的想法是代码将运行,评估形成数据,然后将 SQL 构造为
选择...
从...
在哪里(“Foo”,“Bar”)
希望这有助于澄清一些事情。请原谅我的无知...随着我的发展,我仍在学习很多东西。谢谢。