如何在 Microsoft Access 中创建一个只能通过某些字段搜索并仅由表单上的几个(必要的)文本框和复选框控制的数据库,以便易于使用 - 没有困难的查询?

例子:表单上有多个文本框和多个相应的复选框,当选中文本框旁边的复选框时,将启用该文本​​框,然后您可以通过在该文本框中输入的内容进行搜索

(其实我已经知道这一点了,只是玩stackoverflow Jeopardy,在那里我问一个我知道答案的问题只是为了增加世界的编码知识!大约 5 分钟后回复)

有帮助吗?

解决方案

这实际上是一个相当大的话题,并且充满了各种潜在的问题。大多数有关 Access 的中级到高级书籍都会有一些讨论“按表单查询”的部分,其中有一个未绑定的表单,允许用户选择某些条件,并且在执行时编写即时 SQL 以返回匹配数据。

除了平面的单表数据结构之外,这都不是一项简单的任务,因为 SQL 的 FROM 子句依赖于 WHERE 子句中查询的表。

我为客户创建的应用程序中的一些 QBF 表单的一些示例:

  1. 查询4个基础表
  2. 查询平面单表
  3. 查询3个基础表
  4. 查询6个基础表
  5. 查询2个基础表

第一个由类模块驱动,该类模块具有反映以此形式选择的条件的属性,并且具有编写 FROM 和 WHERE 子句的方法。这使得添加其他字段变得非常容易(只要这些字段不是来自已包含的字段以外的表)。

该过程中最复杂的部分是编写 FROM 子句,因为您必须具有适当的联接类型并且仅包含 SELECT 子句或 WHERE 子句中的表。如果您包含其他任何内容,则会大大减慢查询速度(特别是如果您有任何外部联接)。

但这是一个很大的主题,并且没有灵丹妙药的解决方案 - 相反,必须为每个特定的应用程序创建类似的东西。与用户一起进行彻底的测试也很重要,因为对于开发人员来说完全清楚和可以理解的东西对于最终用户来说通常是非常令人困惑的。

但这是一条不仅仅适用于 QBF 的原则!

其他提示

我自己的解决方案是在表单的标题部分为我希望能够过滤的每一列(通常是所有......)添加一个“过滤器”控件。每次更新这样的“过滤器”控件时,都会运行一个过程来使用 Access VBA 中提供的“BuildCriteria”函数来更新表单的活动过滤器。

因此,当我输入“*cable*” 在采购订单描述列顶部的“过滤器”中,“WHERE PODescription IS LIKE ”*cable*" 会自动添加到 MyForm.filter 属性中......

有些人可能会反对,过滤由多个基础表组成的记录源可能会变得非常棘手。这是正确的。因此,根据我的说法,最好的解决方案是始终(我是认真的!)使用平面表或视图(Access 中的“SELECT”查询)作为表单的记录源。这将使您的生活变得更加轻松!

一旦您确信这一点,您甚至可以考虑一个小模块,它将自动向您的表单添加“过滤器”控件和相关过程。您将获得真正用户友好的客户端界面。

在启动时,您需要显示一个表单并禁用其他菜单等。这样您的用户只能看到您有限的功能,并且无法直接打开表格等。

本书摘录, 现实世界的 Microsoft Access 数据库保护和安全, ,应该很有启发。

对于这么模糊的问题,我只能打开MS Access,点几下鼠标。

再想一想:
使用“OpenForm”方法的“WhereCondition”参数

如果功能非常有限和/或专门化,那么 SQL 数据库无论如何都可能会显得过大。将数据的所有组合缓存在本地,甚至内存中,并根据表单上的复选框显示其中之一。以前,您可以撤销表的权限,并仅在以规定方式查询数据的 VIEW/PROC 上授予权限,但是安全性已从 MS Access 2007 中删除,因此您现在可以真正阻止用户绕过您的简单应用程序,例如、Excel 并以他们喜欢的任何方式查询数据...但这难道不是企业数据库的意义所在吗?;-)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top