Использование параметров поиска в Access 2010 - PullRequest
1 голос
/ 20 декабря 2011

Я работаю в Access 2010.

Я создаю базу данных, которая позволяет моей организации каталогизировать пустые стены в городе - включая их местоположение, то, как они выглядят, является ли соседний участок свободным илизаняты и т. д. Эта информация хранится в таблице с именем WallsMaster.

Это мой запрос.

SELECT WallsMaster.StreetAddress, WallsMaster.Zip, WallsMaster.Direction, WallsMaster.LotInfo

FROM WallsMaster

WHERE 

(
((WallsMaster.Zip) Like "*" & [Forms]![Search_Form]![Zip_Search] 
Or 
(WallsMaster.Zip)="" 
Or 
(WallsMaster.Zip) Is Null)

AND 

((WallsMaster.Direction) Like "*" & [Forms]![Search_Form]![Direction_Search] 
Or 
(WallsMaster.Direction)="" 
Or 
(WallsMaster.Direction) Is Null)

AND 

((WallsMaster.LotInfo) Like "*" & [Forms]![Search_Form]![LotInfo_Search] 
Or 
(WallsMaster.LotInfo)="" 
Or 
(WallsMaster.LotInfo) Is Null)
)
;

Когда я ввожу значение для Zip, но оставляю другие параметры пустыми, то язначение хотения составляет все значения Direction & LotInfo (включая нули / пробелы) только для этого zip (не включая нули / пустые значения Zip),Когда я ввожу Направление, но оставляю остальные пустыми, я хочу, чтобы все значения Zip и LotInfo (включая пустые / пустые) для этого Направления (не включая пустые / пустые значения Направления) и т. Д. Для LotInfo.

Что яКогда я делаю, я получаю пустые / пустые поля для параметров, которые я оставил пустыми, но также пустые / пустые поля для поля, для которого я указал поисковый параметр.

то есть, если я ищу Zip19130 и оставив поле Direction & LotInfo пустым, я получаю следующее:

Address,Zip,Direction,LotInfo
123 Main St, 19130, South, Vacant
456 Elm St, , North, Vacant
789 Fake St, 19130, , ,
321 K St, 19130, East, Occupied

То, что я хочу, это:

Address, Zip, Direction, LotInfo
123 Main St, 19130, South, Vacant  
789 Fake St, 19130, , 
321 K St,19130, East, Occupied
  1. Как я могу переписать свой сценарий SQL, чтобы датьмне результаты, которые я хочу?
  2. Ради этого примера я просто делюсь несколькими полями.Моя настоящая таблица WallMaster содержит около 30 полей и сотни записей, и я хочу, чтобы моя форма поиска осуществляла поиск по любому / всем этим полям одновременно.Это самый эффективный способ написать этот поиск?

Ответы [ 3 ]

1 голос
/ 20 декабря 2011

Вы проверяете неправильную вещь, чтобы быть равным "" или Нуль.Вы хотите проверить входы для этого.

SELECT WallsMaster.StreetAddress, WallsMaster.Zip, WallsMaster.Direction, WallsMaster.LotInfo
FROM WallsMaster

WHERE 

(

(WallsMaster.Zip) Like "*" & [Forms]![Search_Form]![Zip_Search] 

Or 

([Forms]![Search_Form]![Zip_Search] ="" 

Or 

[Forms]![Search_Form]![Zip_Search] Is Null))

AND 

((WallsMaster.Direction) Like "*" & [Forms]![Search_Form]![Direction_Search]

Or 

([Forms]![Search_Form]![Direction_Search]="" 

Or 

[Forms]![Search_Form]![Direction_Search] Is Null)

AND 

((WallsMaster.LotInfo) Like "*" & [Forms]![Search_Form]![LotInfo_Search]

Or 

([Forms]![Search_Form]![LotInfo_Search]="" 

Or 

[Forms]![Search_Form]![LotInfo_Search] Is Null)

)
0 голосов
/ 20 декабря 2011

Что касается вашего второго вопроса, я лично не стал бы писать запрос, чтобы отфильтровать все мыслимые комбинации значений, которые вы предполагаете.

Здесь - отличный пример Аллена Брауна, показывающий, как реализовать форму поиска. Я использовал это в прошлом, и это прекрасно работает, однако это было в тот день, когда Access 2003 был единственным доступным вариантом.

Это решение скоро станет громоздким, если вам нужно добавить больше полей в таблицу или бизнес-правила немного изменятся.

Вместо этого просто загрузите данные в таблицу данных и используйте автоматическую фильтрацию, которую Microsoft Access 2010 предлагает вам из коробки. Вы сможете фильтровать все столбцы в любой комбинации по вашему желанию, и это будет работать, даже если вы добавите новые поля в вашу таблицу (при условии, что источник данных форм настроен правильно)

0 голосов
/ 20 декабря 2011

А как насчет этого пути?

WHERE WallsMaster.Zip Like "*" & NZ([Forms]![Search_Form]![Zip_Search],"")  
AND (WallsMaster.Direction) Like "*" & NZ([Forms]![Search_Form]![Direction_Search],"")
AND (WallsMaster.LotInfo) Like "*" & Nz([Forms]![Search_Form]![LotInfo_Search],"")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...