Проблемы фильтрации списка с использованием переменных - PullRequest
0 голосов
/ 05 июля 2019

Я не уверен, является ли это лучшим способом выполнить то, что я пытаюсь выполнить, но в настоящее время я пытаюсь изменить активные фильтры в списке, используя несколько текстовых полей.

У меня есть одно основное окно поиска, которое фильтрует начальное поле списка, это также отфильтрует несколько других моих списков, которые также заполняют соответствующие данные.

Когда я заглядываю в другие свои списки (кроме основного), у меня есть данные, которые я хотел бы отфильтровать. Итак, я захожу в другое текстовое поле и ввожу все, что пытаюсь разобраться, когда я нажимаю вторую «кнопку поиска», здесь я получаю свою ошибку. Это синтаксическая ошибка, но я не до конца понимаю синтаксис, стоящий за ней.

Я бы хотел, чтобы мой первоначальный фильтр был сохранен в дополнение к моим новым критериям поиска.

Вот код моей начальной кнопки поиска (это работает)

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

В идеале я бы хотел иметь возможность создавать "поисковую систему".

1 Ответ

1 голос
/ 05 июля 2019

Синтаксическая ошибка окружает ваше предложение 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] на имя вашей формы.

...