整个表搜索表单 - Microsoft Access 2010

Posted

技术标签:

【中文标题】整个表搜索表单 - Microsoft Access 2010【英文标题】:Entire Table Search Form - Microsoft Access 2010 【发布时间】:2013-07-23 04:39:05 【问题描述】:

我正在尝试创建一个搜索表单,该表单可以根据用户从组合框中选择的表一次从一个表中进行搜索。我有一个名为 searchCriteria 的文本框,组合框名为 TableList。这个想法是,如果用户想要搜索 customer_table,她会在组合框中选择“customer_table”,在文本框中输入她的搜索条件,然后按搜索按钮。如果她想搜索 order_table,她会从组合框中选择该表,依此类推。我希望查询返回与输入的条件有关的所有完整记录。因此,例如,如果用户从客户表中搜索“James”,我希望返回存在条件“James”的完整记录(所有字段):

公司 |名字 |姓氏 |帐户# |销售代表 果酱汁 | 詹姆斯 |丹 | 555 |吉姆·哈尔伯特 詹姆斯在汽车商店 |汤姆 |蟹肉 |第556章德怀特微笑 兰登制冷|鲍勃 |麦克万斯 |第557章詹姆斯布兰德

据我了解,这需要一些 VBA 来编写查询……

我假设查询将类似于以下内容: SELECT t.* FROM customer_table t WHERE (t.*)::text LIKE '%James%';

输入的字符串 (James) 和表名 (customer_table) 由用户输入。

简单地说,我无法将表单数据(表名和搜索文本)输入到我的查询中。

有谁知道如何在 Microsoft Access 2010 中实现这一点?任何见解将不胜感激。

【问题讨论】:

【参考方案1】:

Access 中的任意字符序列通配符是*而不是%。如果要搜索 Access 中的所有字段,则可以连接所有字段:

WHERE [FirstName] & [Surname] & [City] & [Address] 
LIKE "'*" & Forms!frmSearch!txtFind & "*'"

您可以用不同的字符分隔字段,以防止在字段之间找到重叠的单词。

或者,单独,但效率较低:

WHERE [FirstName] Like "'*" & Forms!frmSearch!txtFind & "*'" 
OR [Surname] Like "'*" & Forms!frmSearch!txtFind & "*'" 
OR [Address] Like "'*" & Forms!frmSearch!txtFind & "*'" 

(不知道(t.*)::text从哪里来,但不是Access。)

因此,您首先需要发现他们选择的表的所有字段名称。您可以为他们选择的表名获取TableDef,并循环通过其Fields 集合来获取字段名。还有其他方法可以做到这一点。例如,GetSchema。

【讨论】:

我会停下来考虑你的方法。这将非常低效,并且可能不可靠,因为您正在搜索所有数据类型但将它们全部视为文本。另一种方法是同步组合框:让他们选择表名,然后用其字段名填充第二个组合框 - 但只是数据类型文本的那些。 评论 1:这是一个特别好的答案,因为 OP“在将表单数据(表名和搜索文本)输入我的查询时遇到问题”,此处演示了必要的方法。跨度> 评论2:我认为OP可能对最后关于TableDef的位特别感兴趣。在这种情况下,这对我来说效果很好,Field 属性甚至可以让您按数据类型(文本 VS 数字等)选择字段。推荐 OP 搜索尽可能多的教程。【参考方案2】:

这是在 Access 2010 中执行此操作的 LAZY 方式:

    创建连续表单 在属性表单中,设置Navigation Buttons = Yes 当您打开表单时,您会看到一个Search 框:

    输入您要搜索的内容。点击Enter查看更多比赛。

注意事项:

这会搜索表单上显示的所有字段 这不会将记录限制为搜索词 这对于非常大的记录集可能不是一个好主意 可能需要为此功能进行一些用户培训

【讨论】:

【参考方案3】:

引用组合框中选定的文本

Me.TableList.Column(0)

在文本框中引用文本

Me.searchCriteria.Text

所以你的 VBA 命令看起来像

DoCmd.RunSQL("SELECT t.* FROM " & Me.TableList.Column(0) & " t WHERE (t.*)::text LIKE '%" & Me.searchCriteria.Text & "%'")

【讨论】:

Access 中的通配符是“*”,而不是“%”。我们不能引用Text 属性,只需删除.Text。但是(t.*)::text 在 Access 中不起作用 - 我不知道这是从哪里来的,但它不是 Access。 我已经提供了代码来引用查询中的表单数据,假设查询在 Access 中独立工作。

以上是关于整个表搜索表单 - Microsoft Access 2010的主要内容,如果未能解决你的问题,请参考以下文章

基于给定查询的 Microsoft 访问表

将表单中的数据输入到联结表 Microsoft Access

如何在 Microsoft Access 中创建/更新具有复杂表关系的表单中的记录集

Microsoft Access 表单查询

保存前检查 Microsoft Access 表单值

Microsoft Access 表单和 Microsoft Windows 应用程序