0

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

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

据我了解,这将需要一些 VBA 来编写查询……</p>

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

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

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

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

4

3 回答 3

4

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

于 2013-07-23T18:02:46.537 回答
0

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

  1. 创建一个连续的表格
  2. 在表单属性中,设置Navigation Buttons= 是
  3. 打开表格时,您会看到一个Search框:

导航栏中的搜索框

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

笔记:

  • 这将搜索表单上显示的所有字段
  • 这不会将记录限制为搜索词
  • 对于非常大的记录集,这可能不是一个好主意
  • 可能需要为此功能进行一些用户培训
于 2016-01-07T16:13:28.260 回答
-2

参考在组合框中选择的文本

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 & "%'")
于 2013-07-23T06:02:20.193 回答