在Microsoft Access中创建只能由某些字段搜索的数据库

时间:2020-03-05 18:56:00  来源:igfitidea点击:

我们将如何在Microsoft Access中创建一个只能由某些字段搜索并且仅由表单上的几个(必要)文本框和复选框控制的数据库,以便轻松使用无困难的查询?

例子:
我们在表单上有几个文本框和几个对应的复选框,并且选中了该文本框旁边的复选框后,将启用该文本​​框,然后可以通过在该文本框中输入的内容进行搜索

(实际上,我已经知道这一点,只是在玩stackoverflow危险游戏时,在这里问一个问题,我知道答案只是为了增加世界各地的编码知识!大约5分钟后就会出现答案)

解决方案

回答

对于一个模糊的问题,我所能回答的就是打开MS Access,然后单击几次鼠标。

再三考虑:
使用" OpenForm"方法的" WhereCondition"参数

回答

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

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

回答

我自己的解决方案是在表单的标题部分中为我希望能够进行过滤的每一列(通常是所有...)添加"过滤器"控件。每次更新此类"过滤器"控件时,将使用Access VBA中提供的" BuildCriteria"功能运行一个过程,以更新表单的活动过滤器。

因此,当我在"采购订单描述"列顶部的"过滤器"中键入" 电缆"时," WHERE PODescription就像"" 电缆"会自动添加到MyForm.filter属性中。 ...

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

一旦确信了这一点,我们甚至可以想到一个小模块,该模块将自动为表单添加"过滤器"控件和相关过程。我们将以正确的方式获得一个真正的用户友好的客户端界面。

回答

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

除了平面的单表数据结构外,这并不是一件容易的事,因为SQL的FROM子句依赖于WHERE子句中查询的表。

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

  • 查询4个基础表
  • 查询平面单表
  • 查询3个基础表
  • 查询6个基础表
  • 查询2个基础表

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

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

但这是一个很大的主题,并且没有万能的解决方案-相反,必须为每个特定的应用程序创建类似的东西。与用户进行全面测试也很重要,因为对于开发人员来说,我们完全清楚和可以理解的内容对于最终用户而言常常是很神秘的。

但这是一个原则,不仅适用于QBF!

回答

如果功能非常有限和/或者专用,那么SQL数据库可能无论如何都会变得过时了。在本地甚至在内存中缓存所有数据组合,并根据表格上的复选框显示一个。以前,我们可能已经从表中撤消了权限,而只授予了以规定方式查询数据的VIEW / PROC,但是安全性已从MS Access 2007中删除,因此我们现在可以真正阻止用户绕过使用简单应用程序,例如,Excel并以他们喜欢的任何方式查询数据...但是那不是企业数据库的重点吗? ;-)