MS Access - Использование форм ввода для фильтрации по нескольким критериям в запросе - PullRequest
0 голосов
/ 02 июля 2018

В MS Access я хочу использовать форму для управления несколькими критериями фильтрации для запроса. В каждом из полей со списком я добавил пустые значения, чтобы пользователи оставляли пустыми, поскольку не всем критериям требуется указанное значение

Форма

В настоящее время я могу выполнить фильтрацию по первому полю [Тип соглашения], но не могу заставить работать поле Спонсора. Это мешает мне даже пытаться фильтровать по другим полям. Для начала вот что я имею:

SELECT TestInPut.[Type of Agreement], TestInPut.Sponsor, TestInPut.[Proposal Title], TestInPut.Div,  TestInPut.[Award Status], 
FROM TestInPut
WHERE ((TestInput.[Type of Agreement])=Forms!Console!SelectType) Or ((Forms!Console!SelectType) Is Null); 

Я попробовал следующее решение, но мой код не применялся, если я выбрал значение в поле со списком Спонсора: https://stackoverflow.com/a/19568169

Как правильно разработать код?

Спасибо.

1 Ответ

0 голосов
/ 03 июля 2018

Идея для этого типа фильтра заключается в преобразовании значения Null в элементе управления в SQL, что означает отсутствие условий для этого поля. Для этого мы используем функцию Nz и ключевое слово LIKE.

Часть WHERE должна гласить:

WHERE TestInput.[Type of Agreement] LIKE Nz("'" & Forms["Console"].SelectType & "'","'*'") AND
      TestInPut.Sponsor LIKE Nz("'" & Forms["Console"].Sponsor & "'","'*'") AND ...

и т. Д. Для каждого поля, которое вы хотите фильтровать. Теперь, если выпадающий список имеет значение Null, он заменяет LIKE '*', который возвращает все для этого поля. Если оно заполнено значением, оно заменяет, например, LIKE 'Grant'. Отсутствие подстановочных знаков (*,?) Означает, что оно фактически запрашивает, чтобы оно было равно.

РЕДАКТИРОВАТЬ: Извините несколько ошибок в этом. Должно быть:

WHERE TestInput.[Type of Agreement] LIKE Nz([Forms]![Console]![SelectType],"*") AND
          TestInPut.Sponsor LIKE Nz([Forms]![Console]![Sponsor],"*") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...