整个表搜索表单 - 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 Access