Неправильное использование VBA Null Access, даже если состояние IIF не проверяется - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь создать запрос даты, чтобы возвращался ноль, если дата не указана, и извлекается только значение даты из даты / времени, если есть значение даты и времени

IIf(Nz(rst("DateAssigned"), "") = "", "NULL", "'" & DateValue(rst("DateAssigned")) & "'")

Теперь я получить ошибку:

Ошибка времени выполнения: '94' Недопустимое использование Null

Когда значение rst("DateAssigned") равно нулю. Я знаю, что это происходит от функции DateValue. Почему он пытается выполнить синтаксический анализ DateValue, когда значение равно нулю?

Анализирует ли vba все во всем операторе без проверки условия IIF? Или я ошибся?

Ответы [ 3 ]

1 голос
/ 29 февраля 2020

Я думаю, что вы правы: VBA сначала разбирает весь оператор IIF перед его выполнением. Попробуйте это в ближайшем окне:

?IIf(1 = 1, "NULL",  DateValue(NULL))

Вы получите ту же ошибку.

Я предлагаю вам использовать регулярный IF-оператор (если вы не хотите использовать его внутри запроса)

0 голосов
/ 29 февраля 2020

Ответ на ваши вопросы

Почему он пытается проанализировать DateValue, когда значение равно нулю?

и

Vba анализирует все во всем операторе без проверки условия IIF? Или я допустил ошибку?

:

Поскольку DateValue используется в качестве аргумента для параметра процедуры Iif.

В общее:

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

0 голосов
/ 29 февраля 2020

Вы должны убедиться, что недопустимые значения не передаются в DateValue :

IIf(IsNull(rst("DateAssigned"), "Null", "'" & DateValue(Nz(rst("DateAssigned"), Date()) & "'")

Но это было бы более простым для использования Формат :

IIf(IsNull(rst("DateAssigned")), "NULL", Format(rst("DateAssigned"), "Short Date"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...