sql >> Database teknologi >  >> RDS >> Access

IIf()-funktionen vs. IIf()-sætningen

IIf() funktionen og IIf() udsagn er fundamentalt forskellige dyr.

Desværre er de næsten umulige at skelne fra hinanden. Og alligevel er det vigtigt at kunne gøre det. Hvorfor?

Fordi denne IIf() funktion er en køretidsfejl, der venter på at ske:

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

Mens denne IIf() sætning returnerer sikkert en værdi, selvom Attempts = 0 :

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

Så kan du se forskellen mellem de to?

Fortæl dem fra hinanden

Hvis du ikke kan se forskellen mellem de to eksempler ovenfor, er det fordi der ikke er nogen forskel.

IIf() funktion ser identisk ud med IIf() erklæring.

Forskellen ligger i hvordan – eller mere præcist, hvor – de bliver evalueret.

  • IIf funktionen er medlem af VBA.Interaction standardbiblioteket.
  • IIf erklæringen bliver evalueret af Jet/ACE-databasemotorens Expression Service (acees.dll).

Jeg skrev om forskellene mellem kode og udtryk her:

Udtryk vs. kode Hvornår er kode ikke kode? Når det er et udtryk. Hvad er forskellen, og hvem bekymrer sig egentlig? Lad os udforske. Ikke længere indstilletMike Wolfe

Den grundlæggende forskel mellem IIf()-funktionen og IIf()-sætningen

Tre ord:kortslutningsevaluering.

  • IIf erklæringen har det.
  • IIf funktionen ikke.

Hvad er kortslutningsevaluering?

Ved kortslutningsevaluering evaluerer koden kun de udtryk, der er nødvendige for at bestemme resultatet.

IIf-sætningen og IIf-funktionen tager begge tre argumenter:

  • udløb: en boolsk tilstand
  • truepart: resultatet, der returneres, hvis udt. er sandt
  • falsepart: resultatet, der returneres, hvis udt. er falsk

Med IIf-sætningen bliver kun to af disse argumenter nogensinde evalueret:expr og–afhængigt af resultatet af udtr.– enten den sande del ELLER falseparten .

Med IIf-funktionen SKAL alle tre argumenter evalueres, før de overhovedet bliver overført til funktionen.

Hvorfor det betyder noget

Lad os gå tilbage til den oprindelige eksempelkode:

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

Hvad sker der, hvis værdien af ​​Forsøg er nul?

IIf erklæring

  • Den udg. vurderer til Sand.
  • Den sande del evalueres til 0 .
  • Sætningen returnerer 0 .

IIf funktion

  • Den udl. evalueres til Sand.
  • Den sande del evalueres til 0 .
  • Den falsedel evalueres til #ERROR#:Division med nul

funktionen version returnerer en fejl, fordi den blev tvunget til at evaluere både truepart og falseparten udtryk.

Hvor er IIf Behandles som en erklæring?

If vurderes som et udsagn følgende steder:

  • Forespørgsler
  • Formular/Rapport/Kontrolegenskaber (f.eks. en TextBox ControlSource)
  • Access Application.Eval()-funktionen

For flere detaljer – herunder hvordan man definitivt tester om IIf bliver behandlet som et udsagn eller en funktion – læs min artikel om forskellene mellem udtryk og kode:Udtryk vs. kode .

Eksterne referencer

IIf-funktion (Visual Basic for Applications) Office VBA-referenceemneMicrosoft Docso365devx
  1. Sådan returneres rækker, der har de samme kolonneværdier i MySql

  2. Hvordan tilføjer jeg en auto_increment primær nøgle i SQL Server-databasen?

  3. Det læste forpligtede isolationsniveau

  4. SQL Server Database Snapshots -1