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

Для поля критериев даты у меня есть следующая формула:

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]) & "*"

Но у меня это не сработало, и когда я вводил диапазоны дат, в запросе появлялись неправильные диапазоны дат.

Как правильно это написать?

1
Ricky Bobby 20 Фев 2015 в 20:04
Я бы поделился изображением моей формы и формул, чтобы лучше понять, о чем я говорю, но я все еще относительно новичок в SO и еще не имею требуемой 10 репутации :(
 – 
Ricky Bobby
20 Фев 2015 в 20:18
Я могу отправить фотографии по электронной почте, если потребуется
 – 
Ricky Bobby
20 Фев 2015 в 20:19

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
1
HansUp 20 Фев 2015 в 20:34
Это действительно здорово @HansUp, но потребуется ли для этого sql? или я могу ввести это в поле моих критериев
 – 
Ricky Bobby
20 Фев 2015 в 20:38
Переключите запрос с представления «Дизайн» на представление SQL. Добавьте первое условие Is Null в представление SQL, а затем снова вернитесь в представление конструктора, чтобы увидеть, как оно там представлено.
 – 
HansUp
20 Фев 2015 в 20:41
Ничего!! @HansUp, это потрясающе! работал как шарм, большое вам спасибо. Я бы поддержал ваш комментарий, но, к сожалению, у меня нет репутации. когда я это сделаю, я обязательно вернусь к этому и дам вам свой голос!
 – 
Ricky Bobby
20 Фев 2015 в 20:42
Я все-таки смог сделать это в поле критериев
 – 
Ricky Bobby
20 Фев 2015 в 20:42
OK. Тем не менее потребуется некоторое время, чтобы сравнить те же изменения в представлении «Дизайн» и «Просмотр SQL». Эти усилия познакомят вас с синтаксисом Access SQL ... и это понимание будет бесценным для будущего развития Access. Ваше здоровье.
 – 
HansUp
20 Фев 2015 в 20:44
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 & "# "
-2
dbc 13 Май 2021 в 16:23
Спасибо, что разместили это. Но не могли бы вы отредактировать свой ответ, чтобы дать текстовое объяснение того, как он отвечает на вопрос? правильное объяснение того, как это работает, повысит ценность вашего ответа в долгосрочной перспективе.
 – 
dbc
13 Май 2021 в 16:27
 – 
dbc
13 Май 2021 в 16:34
Привет, я искал ту же тему, наконец, я подумал о самой большой и самой низкой приемлемой дате в доступе, когда вы хотите показать все данные, вы можете указать самый большой допустимый диапазон дат или вы можете поместить свою дату из текстового поля , и это сработало для меня
 – 
Hamza Abbas
14 Май 2021 в 18:57