我正在尝试创建一个搜索表单,该表单可以根据用户从组合框中选择的表一次从一个表中搜索。我有一个名为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中实现此功能?任何见解都将不胜感激。
答案 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 方式:
答案 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 & "%'")