MS Access - ошибка "Не удается найти имя... в выражении" - IIf оператор CDbl
Моя проблема
У меня довольно простой макрос autoexec для проверки контроля версий для моей разделенной базы данных. У меня есть таблица во внешнем интерфейсе LocalVersionNumber
и таблица в бэкэнде называется LiveVersionNumber
, Каждый номер версии может иметь несколько значений (например, какая версия сервера используется, какой интерфейс и т. Д.). Из-за этого значения в этих таблицах анализируются с помощью запросов __LiveVersionParser_Q
а также __LocalVersionParser_Q
, Не вдаваясь в излишние подробности, локальный номер версии всегда должен быть равен или больше, чем текущий номер версии.
Я написал запрос, который сравнил мои локальные и живые проанализированные значения - и с помощью выражений IIF определил логику для обновления или сохранения с текущей версией. Этот тестовый запрос выполнялся без проблем, но теперь, когда я извлек логику в макрос autoexec и получаю сообщение об ошибке:
Не удается найти имя "__LiveVersionParser_Q", которое вы ввели в выражение.
Я дважды проверил, и таблица и поля написаны правильно. Я даже зашел так далеко, что скопировал и вставил оператор из макроса обратно в запрос, и запрос по-прежнему выполняется должным образом.
Код
(В Macro Builder нет VBA - тьфу)
"ЕСЛИ" Акция
CDbl([__LiveVersionParser_Q].[DevelopmentVersion])
<=CDbl([__LocalVersionParser_Q].[DevelopmentVersion])
Тогда... выполните мою обновленную логику интерфейса.
ПРИМЕЧАНИЕ. Для тех, кто спрашивает "зачем использовать CDbl?", Это используется, потому что номер версии представляет собой текстовую строку с несколькими значениями, разделенными ".". После анализа версий эти строки сравниваются путем преобразования их в double (с использованием CDbl), чтобы увидеть, какая из них больше.
Поиск проблемы
Как я уже говорил ранее, это утверждение работает, но не в этом макросе. Я решил эту проблему, используя следующий запрос (чтобы сохранить его согласованность, вот протестированное выражение представления "дизайн", а не SQL):
Expr1: IIf(CDbl([__LiveVersionParser_Q].[DevelopmentVersion])
<=CDbl([__LocalVersionParser_Q].[DevelopmentVersion]),"OK","UPDATE")
Какие-либо предложения? Я чувствую, что упускаю что-то простое.
1 ответ
Я нашел обходной путь (не основная причина и решение). Если кто-то может дать правильное объяснение первопричины, я с удовольствием переключу кредит ответа на них!
Но тем временем, если кто-то столкнется с подобной проблемой, вот мой обходной путь:
Шаг 1: Как указано в моем вопросе, у меня есть запрос, который отлично выполняет действие "IF". Так что я использовал это для вывода Result
поле, в котором указано "ОК" или "Обновить".
Шаг 2: Я изменил свой макрос autoexec следующим образом:
IF...
DMax("Result","__VersionControl_FinalTest")="Update"
THEN...
Run my update code.
ELSE...
CancelEvent
END IF
ПРИМЕЧАНИЕ: я попытался использовать простое утверждение:
IF...
[__VersionControl].[Result] = "Update"
Однако, когда я запустил этот макрос, я снова получил ошибку 2482 ("не могу найти имя...").
Почему DMax может "найти" __VersionControl_FinalTest
запрос и оператор IF не могут, я не знаю - но, по крайней мере, я снова запущен.