我不确定这是否是完成我要完成的工作的最佳方法,但是我目前正在尝试使用多个文本框更改列表框上的活动过滤器。
我有一个主搜索框,它过滤了一个初始列表框,这也将过滤我的其他一些列表框,这些列表框也填充了相关数据。
当我查看其他列表框(不是我的主要列表框)时,我有想要进一步过滤的数据。因此,我进入另一个文本框,然后输入要尝试进行排序的内容,当我单击第二个“搜索按钮”时,这就是我得到错误的地方。这是一个语法错误,但我不完全理解其背后的语法。
除了新的搜索条件外,我还希望保留初始过滤器。
这是我最初的搜索按钮后面的代码(此方法有效)
Private Sub Command37_click()
Dim sql As String
Dim sql2 As String
sql = "SELECT People.LName, People.[Phone #], People.State " _
& "FROM People" _
& "WHERE SystemLocation LIKE '*" & Me.SearchTxt1 & "*' " _
& "ORDER by People.LName "
me.List35.RowSource = sql
me.list35.requery
sql2 = "SELECT Orders.Item, Orders.Price, Orders.Department " _
& "FROM People INNER JOIN Orders " _
& "ON People.SystemLocation = Orders.Department " _
& "WHERE Department LIKE '*" & Me.SearchTxt1 & "*' " _
& "ORDER by Orders.Department"
Me.List41.RowSource = sql2
Me.List41.Requery
这是我尝试与辅助过滤器一起使用的代码
Dim sql2 As String
sql2 = "SELECT Orders.Item, Orders.Price, Orders.Department " _
& "FROM People INNER JOIN Orders " _
& "ON People.SystemLocation = Orders.Department " _
& WHERE (People.SystemLocation LIKE '*" & Me.SearchTxt1 & "*') & (Orders.Item LIKE '*" & Me.SearchTxt2 & "*' " _
& "ORDER by Orders.Department"
Me.List41.RowSource = sql2
Me.List41.Requery
理想情况下,我希望能够创建各种“搜索引擎”。
答案 0 :(得分:1)
语法错误围绕着您的where
子句。
首先,您在这里缺少双引号:
& WHERE (People.SystemLocation LIKE '*" & Me.SearchTxt1 & "*') & (Orders.Item LIKE '*" & Me.SearchTxt2 & "*' " _
^----- Double quote missing
但是主要的问题是您使用的是&串联运算符(&
)来表示逻辑and
语句:
"*') & (Orders.Item LIKE '*"
^----- This should be AND
相反,您应该使用and
运算符,例如:
& "WHERE (People.SystemLocation LIKE '*" & Me.SearchTxt1 & "*') AND (Orders.Item LIKE '*" & Me.SearchTxt2 & "*' " _
但是,在这种情况下,不需要连接表单控制值(这为SQL注入提供了可能),因为您可以直接从列表框的行源中引用表单值。
这样,代码可以变成:
Me.List41.RowSource = _
"SELECT Orders.Item, Orders.Price, Orders.Department " & _
"FROM People INNER JOIN Orders ON People.SystemLocation = Orders.Department " & _
"WHERE " & _
" People.SystemLocation LIKE '*' & Forms![YourForm]!SearchTxt1 & '*' AND " & _
" Orders.Item LIKE '*' & Forms![YourForm]!SearchTxt2 & '*' " & _
"ORDER by Orders.Department"
Me.List41.Requery
在这里,将[YourForm]
更改为您的表单名称。