Я создал форму поиска, которая позволяет пользователю выполнять поиск в отчетах о расходах компании для определенных клиентов, проектов, сотрудников и диапазонов дат.
Для поля критериев даты у меня есть следующая формула:
Between [Forms]![Search Form]![txtDateFrom] And [Forms]![Search Form]![txtDateTo]
Это отлично работает, но если я не ввожу даты, записи не отображаются, я хочу изменить это, чтобы отображались все записи, если они оставлены пустыми.
Я смог сделать это для полей проекта, клиента и сотрудника с помощью следующих формул:
Like "*" & [Forms]![Search Form]![cboProject] & "*"
Like "*" & [Forms]![Search Form]![cboClient] & "*"
Like "*" & [Forms]![Search Form]![txtEmployee] & "*"
Вы, ребята, вероятно, знаете, что это означает, но я все равно кратко объясню это: когда я ввожу что-то в текстовое поле для сотрудника, поле со списком для проекта или поле со списком для клиента в моем поиске и запуске запроса, только появляются значения, соответствующие введенному мной. Бит Like "*" позволяет отображать все значения, если ничего не введено.
Я хочу сделать то же самое для диапазона дат, но для меня это немного сложнее, может ли кто-нибудь помочь мне с синтаксисом этого, чтобы мои даты и даты в окнах отображали все, если они оставлены пустыми? Потому что прямо сейчас, если я оставлю их пустыми, записи не будут отображаться, что является огромной проблемой для пользователя.
Я пытался:
Like "*" & (Between [Forms]![Search Form]![txtDateFrom] And [Forms]![Search Form]![txtDateTo]) & "*"
Но у меня это не сработало, и когда я вводил диапазоны дат, в запросе появлялись неправильные диапазоны дат.
Как правильно это написать?
2 ответа
Похоже, теперь ваш запрос возвращает правильные строки, когда и txtDateFrom , и txtDateTo содержат ненулевые значения.
Но вы хотите, чтобы все строки возвращались, когда либо txtDateFrom , либо txtDateTo имеет значение Null. В этом случае вы можете добавить 2 условия в предложение WHERE
:
WHERE
your_date_field Between [Forms]![Search Form]![txtDateFrom] And [Forms]![Search Form]![txtDateTo]
OR [Forms]![Search Form]![txtDateFrom] Is Null
OR [Forms]![Search Form]![txtDateTo] Is Null
Dim A As String
Dim B As String
Dim p As String
A = Nz(Forms!frmsearchInv!txtDateFrom, "1")
B = Nz(Forms!frmsearchInv!txtDateFor, "1")
If A = "1" Then
A = "0000-01-01"
End If
If B = "1" Then
B = "9999-01-01"
End If
p = "select * from orders where [orderDate] >= #" & A & "# AND [orderDate] <=#" & B & "# "
Похожие вопросы
Связанные вопросы
Новые вопросы
ms-access
Microsoft Access, также известный как Microsoft Office Access, является средством разработки приложений и баз данных от Microsoft. Он сочетает в себе Microsoft Jet / ACE Database Engine с графическим интерфейсом пользователя и инструментами разработки программного обеспечения. Другие механизмы базы данных, такие как SQL Server, также могут использоваться в качестве сервера базы данных для приложений Access.