整个表搜索表单 - Microsoft Access 2010

时间:2013-07-23 04:39:06

标签: sql vba ms-access access-vba ms-access-2010

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

 
    Company               |   First Name    |   Last Name   |   Account #   |   Sales Rep
    Jammy Juice           |   James         |   Dan         |   555         |   Jim Halbert
    Jameson Car Shop      |   Tom           |   Cramb       |   556         |   Dwight Smiles
    Landon Refrigeration  |   Bob           |   McVance     |   557         |   James Bland

根据我的理解,这需要一些VBA来编写查询......

我假设查询将如下所示: SELECT t。* FROM customer_table t WHERE(t。*):: text LIKE'%James%';

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

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

有谁知道如何在Microsoft Access 2010中实现此功能?任何见解都将不胜感激。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

  1. 创建连续表单
  2. 在表单属性中,设置Navigation Buttons =是
  3. 当您打开表单时,您会看到Search框:
  4. Search box in Navigation Bar

    1. 输入您要搜索的内容。点击Enter即可查看更多匹配项。
    2. 注意:

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

答案 2 :(得分:-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 & "%'")