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 не могут, я не знаю - но, по крайней мере, я снова запущен.

Другие вопросы по тегам