Вложенные операторы IIf работают, но операторы Switch вызывают ошибку «переполнения» в MS Access. Почему? - PullRequest
0 голосов
/ 11 января 2020

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

Вложенный подход 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, и во время отладки я предположил, что была вызвана ошибка переполнения делением на ноль, потому что различные другие посты на этой топике c указывали туда, а также в моем случае, когда деление случайного числа (например, 1) на general_income Деление на ноль заняло место ошибки переполнения.

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

1 Ответ

0 голосов
/ 11 января 2020

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

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

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

...