Ms access 创建表单以基于多个条件搜索记录
我正在尝试创建一个表单,允许您根据多个条件返回结果 我有Ms access 创建表单以基于多个条件搜索记录,ms-access,ms-access-2016,Ms Access,Ms Access 2016,我正在尝试创建一个表单,允许您根据多个条件返回结果 我有FirstName字段、LastName字段和State字段 我还有一个名为searchFirst,searchLast,searchState的文本框,用户可以在其中输入条件 单击“搜索”按钮后,将执行以下代码 Private Sub mySearchQuery\u Click() 将筛选器设置为字符串 将firstname设置为字符串 Dim rtLastName作为字符串 将状态设置为字符串 rtFirstName=Me.search
FirstName
字段、LastName
字段和State
字段
我还有一个名为searchFirst
,searchLast
,searchState
的文本框,用户可以在其中输入条件
单击“搜索”按钮后,将执行以下代码
Private Sub mySearchQuery\u Click()
将筛选器设置为字符串
将firstname设置为字符串
Dim rtLastName作为字符串
将状态设置为字符串
rtFirstName=Me.searchFirst.Value
rtLastName=Me.searchLast.Value
rtState=Me.searchState.Value
如果不是IsNull(rtFirstName),则
如果不是IsNull(filter),则filter=filter&“和”
filter=filter&“(类似于“*”的FirstName&rtFirstName&“*”)
如果结束
如果不是IsNull(rtLastName),则
如果不是IsNull(filter),则filter=filter&“和”
filter=filter&“(类似于“*”的LastName&rtLastName&“*”)
如果结束
如果不是IsNull(rtState),则
如果不是IsNull(filter),则filter=filter&“和”
filter=filter&“(类似于“*”的状态&rtState&“*”)
如果结束
'现在重新构造SQL查询'
将sql设置为字符串
sql=“从主数据中选择*”
如果不是IsNull(过滤器),则
sql=sql&“WHERE”&过滤器
如果结束
Me.RecordSource=sql
'SubForm.Form.RecordSource=sql
端接头
我得到下面的错误
运行时错误“3075”:查询中出现语法错误(缺少运算符)
表达式“AND”(姓氏如“*tracy*”)和(姓氏如“*Smith*”)
和(状态如“*ga*”)
我不知道为什么搜索查询的开头包含了和
我不知道为什么,并且在搜索开始时被包括在内
询问
由于Dim filter是字符串
,filter
不能包含Null。这意味着这些如果条件<代码>如果不为空(过滤器)
。。。永远都是真的
类似地,非IsNull(rtFirstName)
、非IsNull(rtLastName)
和非IsNull(rtState)
将始终为真
最终结果是,代码将另一个条件片段添加到过滤器
字符串中,而不管相应的搜索文本框是否包含任何内容,并且每个条件片段都以和“
作为前缀
考虑到这些要点,只有在相应的搜索文本框中有内容并决定何时包含和“
时,才可以重构代码以添加过滤器
段。然而,我发现更简单的方法是为它们中的每一个包含”和“
”,然后从过滤器中去掉第一个”和“
,然后再将其添加到WHERE
子句中
Private Sub mySearchQuery\u Click()
Dim strSelect As字符串
作为字符串的Dim strWhere
如果Len(Trim(Me!searchFirst.Value)&vbNullString)>0,则
strWhere=strWhere&“和像“*”这样的名字&Me!searchFirst.Value&“*”“”
如果结束
如果Len(Trim(Me!searchLast.Value)&vbNullString)>0,则
strWhere=strWhere&“LastName像”*“&Me!searchLast.Value&“*”“”
如果结束
如果Len(Trim(Me!searchState.Value)&vbNullString)>0,则
strWhere=strWhere&“并且像”*“&Me这样的状态!searchState.Value&“*”“”
如果结束
'现在重新构造SQL查询
strSelect=“从主数据中选择*
'仅当strWhere中有内容时才添加WHERE子句
如果Len(strWhere)>0,则
'使用Mid()忽略前导的“AND”
strSelect=strSelect&“WHERE”和Mid(strWhere,6)
如果结束
调试。打印strSelect'
我不知道为什么,并且在搜索开始时被包括在内
询问
由于Dim filter是字符串
,filter
不能包含Null。这意味着这些如果条件<代码>如果不为空(过滤器)
。。。永远都是真的
类似地,非IsNull(rtFirstName)
、非IsNull(rtLastName)
和非IsNull(rtState)
将始终为真
最终结果是,代码将另一个条件片段添加到过滤器
字符串中,而不管相应的搜索文本框是否包含任何内容,并且每个条件片段都以和“
作为前缀
考虑到这些要点,只有在相应的搜索文本框中有内容并决定何时包含和“
时,才可以重构代码以添加过滤器
段。然而,我发现更简单的方法是为它们中的每一个包含”和“
”,然后从过滤器中去掉第一个”和“
,然后再将其添加到WHERE
子句中
Private Sub mySearchQuery\u Click()
Dim strSelect As字符串
作为字符串的Dim strWhere
如果Len(Trim(Me!searchFirst.Value)&vbNullString)>0,则
strWhere=strWhere&“和像“*”这样的名字&Me!searchFirst.Value&“*”“”
如果结束
如果Len(Trim(Me!searchLast.Value)&vbNullString)>0,则
strWhere=strWhere&“LastName像”*“&Me!searchLast.Value&“*”“”
如果结束
如果Len(Trim(Me!searchState.Value)&vbNullString)>0,则
strWhere=strWhere&“并且像”*“&Me这样的状态!searchState.Value&“*”“”
如果结束
'现在重新构造SQL查询
strSelect=“从主数据中选择*
'仅当strWhere中有内容时才添加WHERE子句
如果Len(strWhere)>0,则
'使用Mid()忽略前导的“AND”
strSelect=strSelect&“WHERE”和Mid(strWhere,6)
如果结束
调试。打印strSelect'非常感谢!是的!这是我们的初衷。你救了我5个小时的压力!谢谢,谢谢!!非常感谢你!是的!这是我们的初衷。你救了我5个小时的压力!谢谢,谢谢!!