【问题标题】:Entire Table Search Form - Microsoft Access 2010整个表搜索表单 - 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 中实现这一点?任何见解将不胜感激。

【问题讨论】:

    标签: sql ms-access vba ms-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 方式:

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

    1. 输入您要搜索的内容。点击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 中独立工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-30
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多