Вложенные операторы IIf работают, но операторы Switch вызывают ошибку «Переполнение» в MS Access. Почему?

Запрос, над которым я работаю, отображает процент стоимости страхового полиса по отношению к общему доходу человека.

Вложенный подход IIf:

percentage: IIf([general_income]=0,"No income",
IIf(IsNull([PolicyValue]),"No policy",
IIf([PolicyValue]>[general_income],"Error",
Format([PolicyValue]/[general_income],"Percent"))))

Подход Switch:

percentage: Switch(
[general_income]=0,"No income",
IsNull([PolicyValue]),"No policy",
[PolicyValue]>[general_income],"Error",
True,Format([PolicyValue]/[general_income],"Percent")
)

Моим первоначальным подходом был метод Switch, и во время отладки я предположил, что ошибка переполнения была вызвана делением на ноль, потому что на это указывали различные другие сообщения по этой теме, а также в моем случае при делении случайного числа (например, 1) на general_income Деление на ноль занял место ошибки переполнения.

Однако я не понимаю, как general_income может когда-либо быть равным 0, учитывая, что об этом позаботится первый случай. Любые идеи о том, что вызвало ошибку переполнения в сценарии Switch?


person Amar Cerim    schedule 10.01.2020    source источник


Ответы (1)


Из Функция переключения:

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

Таким образом, в первом случае не учитывается тот факт, что general_income может быть 0, а затем [PolicyValue]/[general_income] выдает ошибку.

person forpas    schedule 10.01.2020