Access
 sql >> база данни >  >> RDS >> Access

Функцията IIf() срещу изявлението IIf().

IIf() функция и IIf() твърдение са коренно различни животни.

За съжаление, те са почти невъзможно да бъдат разграничени. И все пак е важно да можете да го направите. Защо?

Защото тази функция на IIf(). е грешка по време на изпълнение, която чака да се случи:

IIf(Attempts = 0, 0, Successes / Attempts)

Докато това IIf() изявление безопасно ще върне стойност, дори ако Attempts = 0 :

IIf(Attempts = 0, 0, Successes / Attempts)

И така, можете ли да забележите разликата между двете?

Разделянето им

Ако не можете да забележите разликата между двете проби по-горе, това е, защото няма разлика.

IIf() функция изглежда идентично с IIf() изявление.

Разликата е в това как – или по-точно, къде те се оценяват.

  • Функцията IIf е член на стандартната библиотека VBA.Interaction.
  • Изявлението IIf се оценява от Expression Service на машината за база данни Jet/ACE (acees.dll).

Писах за разликите между кода и изразите тук:

Изрази срещу код Кога кодът не е код? Когато е израз. Каква е разликата и кой наистина се интересува? Да изследваме. Вече не се задава Майк Улф

Фундаменталната разлика между функцията IIf() и изявлението IIf()

Три думи:оценка на късо съединение.

  • Изявлението IIf има го.
  • Функцията IIf не.

Какво е оценка на късо съединение?

При оценката на късо съединение кодът оценява само онези изрази, необходими за определяне на резултата.

Изявлението IIf и функцията IIf приемат три аргумента:

  • израз: булево условие
  • вярна част: резултатът за връщане if expr е вярно
  • фалшива част: резултатът за връщане if expr е False

С оператора IIf само два от тези аргумента винаги се оценяват:expr и–в зависимост от резултата от expr– или истинската част ИЛИ фалшивата част .

С функцията IIf и трите аргумента ТРЯБВА да бъдат оценени, преди дори да бъдат предадени на функцията.

Защо е важно

Нека се върнем към оригиналния примерен код:

IIf(Attempts = 0, 0, Successes / Attempts)

Какво се случва, ако стойността на Опити е нула?

IIf изявление

  • Expr оценява на True.
  • Истинската част оценява на 0 .
  • Изразът връща 0 .

IIf функция

  • Expr оценява на True.
  • Истинската част оценява на 0 .
  • Невярната част се оценява на #ГРЕШКА#:Деление на нула

Функциятана версия връща грешка, защото е била принудена да оцени и двете truepart и фалшивата част изрази.

Къде е IIf Третира се като изявление?

IIf се оценява като изявление на следните места:

  • Запитвания
  • Свойства на формуляр/отчет/контрола (напр. TextBox ControlSource)
  • Функцията Access Application.Eval()

За повече подробности – включително как да тествате окончателно дали IIf се третира като изявление или функция – прочетете статията ми за разликите между изрази и код:Изрази срещу код .

Външни препратки

Функция IIf (Visual Basic за приложения) Референтна тема за Office VBA Microsoft Docso365devx
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съвети и трикове за Microsoft Access, част 2 – Формуляри

  2. Деклариране и инициализиране на променливи в един и същи ред във VBA

  3. Как да създадете заявка за параметри в Access

  4. Как да групирате отчет в Access 2016

  5. Кога трябва да използвате SQL Server с Access? (Съвет:Почти винаги)