Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 全表搜索表单-Microsoft Access 2010_Sql_Ms Access_Vba_Ms Access 2010 - Fatal编程技术网

Sql 全表搜索表单-Microsoft Access 2010

Sql 全表搜索表单-Microsoft Access 2010,sql,ms-access,vba,ms-access-2010,Sql,Ms Access,Vba,Ms Access 2010,我正在尝试创建一个搜索表单,该表单可以根据用户从组合框中选择的表一次从一个表中进行搜索。我有一个名为searchCriteria的文本框,组合框名为TableList。其想法是,如果用户想要搜索customer_表,她将在组合框中选择“customer_表”,在文本框中输入她的搜索条件,然后按下搜索按钮。如果她想搜索order_表,她会从组合框中选择该表,以此类推。我希望查询返回与输入的条件相关的所有完整记录。因此,例如,如果用户从customer表中搜索“James”,我希望返回标准“Jame

我正在尝试创建一个搜索表单,该表单可以根据用户从组合框中选择的表一次从一个表中进行搜索。我有一个名为searchCriteria的文本框,组合框名为TableList。其想法是,如果用户想要搜索customer_表,她将在组合框中选择“customer_表”,在文本框中输入她的搜索条件,然后按下搜索按钮。如果她想搜索order_表,她会从组合框中选择该表,以此类推。我希望查询返回与输入的条件相关的所有完整记录。因此,例如,如果用户从customer表中搜索“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来编写查询

我假设查询如下所示: 从customer_表t中选择t.*,其中t.*:类似于“%James%”的文本

其中输入的字符串和表名customer\u table由用户输入

简单地说,我很难将表单数据、表名和搜索文本输入到查询中


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

请参阅组合框中选定的文本

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中的任意字符序列通配符为*非%。如果要搜索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集合循环以获取字段名。还有其他方法可以做到这一点。例如,.

以下是在Access 2010中执行此操作的惰性方法:

创建一个连续的表单 在表单属性中,设置导航按钮=是 打开表单时,您将看到一个搜索框: 键入要搜索的内容。点击回车键查看更多匹配项。 注:

这将搜索表单上显示的所有字段 这不会将记录限制为搜索项 对于非常大的记录集,这可能不是一个好主意 可能需要为此功能进行一些用户培训
Access中的通配符是“*”而不是“%”。我们无法引用Text属性,只需删除.Text即可。但是T*::文本在Access中不起作用,我不知道这是从哪里来的,但它不是Access。我已经提供了代码来查询查询中的表单数据,假设查询在Access中是独立工作的。但是我会暂停考虑您的方法。这将是非常低效的,而且可能是不可靠的,因为您正在搜索所有数据类型,但将它们都视为文本。另一种方法是同步组合框:让它们选择表名,然后用字段名填充第二个组合框,但只填充数据类型为文本的字段名。注释1:这是一个特别好的答案,因为OP“在将表单数据、表名和搜索文本放入我的查询中时遇到问题”,这里演示了必要的方法。注释2:我认为OP可能对最后一点是关于TableDef的。在这种情况下,这对我来说效果很好,字段属性甚至可以让您根据数据类型文本和数字等来选择字段。推荐OP在有很多可用教程的情况下运行搜索。