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

时间:2008-09-16 13:56:43

标签: sql vba ms-access access-vba

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

实施例: 表单上有几个文本框和几个相应的复选框,当选中文本框旁边的复选框时,文本框将启用,然后您可以按照输入到所述文本框中的内容进行搜索

(实际上我已经知道了这一点,只是玩堆栈溢出危险,我问一个问题,我知道答案只是为了增加世界的编码知识!答案大约需要5分钟)

5 个答案:

答案 0 :(得分:1)

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

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

有人会反对由多个基础表组成的过滤记录源变得非常棘手。那就对了。所以最好的解决方案是根据我总是(我的意思是!)使用平面表或视图(Access中的“SELECT”查询)作为表单的记录源。这将使您的生活更轻松!

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

答案 1 :(得分:0)

对于一个含糊不清的问题,我只能打开MS Access,然后点击鼠标几次。

第二个想法:
使用“OpenForm”方法的“WhereCondition”参数

答案 2 :(得分:0)

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

这本书的摘录Real World Microsoft Access Database Protection and Security应该具有启发性。

答案 3 :(得分:0)

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

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

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

  1. Querying 4 underlying tables
  2. Querying a flat single table
  3. Querying 3 underlying tables
  4. Querying 6 underlying tables
  5. Querying 2 underlying tables
  6. 第一个是由类模块驱动的,该类模块具有反映在此表单中选择的条件的属性,并且具有写入FROM和WHERE子句的方法。这使得添加其他字段变得非常容易(只要这些字段不是来自已经包含的字段之外的表)。

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

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

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

答案 4 :(得分:0)

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