#vba #ms-access #criteria #date-range
#vba #ms-access #критерии #диапазон дат
Вопрос:
У меня есть запрос, который выполняет поиск сохраненных записей и создает отчет на основе записей. Некоторые поля доступны для поиска либо независимо, либо совместно с другими частями сохраненной записи (например, можно выполнить поиск по идентификатору, местоположению и / или уведомлению полиции). Однако я сталкиваюсь с проблемами при поиске по дате.
У меня есть поля для ввода пользователем даты начала и даты окончания желаемого диапазона дат. Когда ОДНО или НИ ОДНО поле не заполнено, поиск выявляет все записи ПОСЛЕ даты начала, ДО даты окончания или ВСЕ записи. Когда ОБА поля заполнены, поиск выдает запись, в которой все поля пустые (которых не существует в таблице).
Каждое поле для поиска использует одни и те же критерии в запросе:
Like Nz([field that you're searching],"*")
Но в диапазоне дат используется модифицированная версия (извините, если она ОЧЕНЬ неуклюжая):
Like Nz(([Data_Input_Table].[Day_Current])>=[Forms]![Search_Form]![Start_Date_Lookup_text] And ([Data_Input_Table].[Day_Current])<=[Forms]![Search_Form]![End_Date_Lookup_text],"*")
В идеале я бы хотел, чтобы пользователь выполнял поиск НИ по ОДНОЙ, НИ ПО ОДНОЙ или ПО обеим датам начала и окончания.
Пожалуйста, помогите!
Ответ №1:
Вы не можете использовать Like для дат. Попробуйте это:
[Data_Input_Table].[Day_Current] >= Nz([Forms]![Search_Form]![Start_Date_Lookup_text], [Data_Input_Table].[Day_Current]) And [Data_Input_Table].[Day_Current] <= Nz([Forms]![Search_Form]![End_Date_Lookup_text], [Data_Input_Table].[Day_Current])