Access
 sql >> Datenbank >  >> RDS >> Access

Die IIf()-Funktion vs. die IIf()-Anweisung

Der IIf() Funktion und die IIf() Aussage sind grundverschiedene Tiere.

Leider sind sie kaum zu unterscheiden. Und doch ist es wichtig, dies zu können. Wieso den?

Denn diese IIf() Funktion ist ein Laufzeitfehler, der darauf wartet, passiert zu werden:

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

Während diese IIf() Anweisung wird sicher einen Wert zurückgeben, auch wenn Attempts = 0 :

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

Können Sie den Unterschied zwischen den beiden erkennen?

Sie auseinanderhalten

Wenn Sie den Unterschied zwischen den beiden Beispielen oben nicht erkennen können, liegt das daran, dass es keinen Unterschied gibt.

Der IIf() Funktion sieht identisch aus wie IIf() Erklärung.

Der Unterschied besteht darin, wie – oder genauer gesagt, wo – sie werden ausgewertet.

  • Die IIf Funktion ist Mitglied der VBA.Interaction-Standardbibliothek.
  • Die IIf Erklärung wird vom Expression Service (acees.dll) der Jet/ACE-Datenbank-Engine ausgewertet.

Ich habe hier über die Unterschiede zwischen Code und Ausdrücken geschrieben:

Ausdrücke vs. CodeWann ist Code kein Code? Wenn es ein Ausdruck ist. Was ist der Unterschied und wen interessiert das wirklich? Lass uns erforschen. Mike Wolfe nicht mehr gesetzt

Der grundlegende Unterschied zwischen der IIf()-Funktion und der IIf()-Aussage

Drei Worte:Kurzschlussauswertung.

  • Die IIf Erklärung hat es.
  • Die IIf Funktion nicht.

Was ist Kurzschlussbewertung?

Bei der Kurzschlussauswertung wertet der Code nur die Ausdrücke aus, die zur Bestimmung des Ergebnisses erforderlich sind.

Die IIf-Anweisung und die IIf-Funktion haben beide drei Argumente:

  • Ausdruck: eine boolesche Bedingung
  • wahrer Teil: das zurückzugebende Ergebnis, wenn expr ist wahr
  • Falsepart: das zurückzugebende Ergebnis, wenn expr ist falsch

Bei der IIf-Anweisung werden immer nur zwei dieser Argumente ausgewertet:der expr und–abhängig vom Ergebnis des expr– entweder der wahre Teil ODER der falsche Teil .

Bei der IIf-Funktion MÜSSEN alle drei Argumente ausgewertet werden, bevor sie überhaupt an die Funktion übergeben werden.

Warum es wichtig ist

Gehen wir zurück zum ursprünglichen Beispielcode:

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

Was passiert, wenn der Wert von Attempts ist Null?

IIf Anweisung

  • Der Ausdruck wird mit True ausgewertet.
  • Der wahre Teil wird zu 0 ausgewertet .
  • Die Anweisung gibt 0 zurück .

IIf Funktion

  • Der expr ergibt True.
  • Der wahre Teil wird zu 0 ausgewertet .
  • Der falsche Teil ergibt #ERROR#:Division by zero

Die Funktion version gibt einen Fehler zurück, da sie gezwungen war, sowohl den truepart auszuwerten und der falsche Teil Ausdrücke.

Wo ist IIf Als Aussage behandelt?

IIf wird an folgenden Stellen als Statement ausgewertet:

  • Abfragen
  • Eigenschaften von Formularen/Berichten/Steuerelementen (z. B. eine TextBox ControlSource)
  • Die Access Application.Eval()-Funktion

Für weitere Details – einschließlich, wie man endgültig testet, ob IIf als Anweisung oder Funktion behandelt wird – lesen Sie meinen Artikel über die Unterschiede zwischen Ausdrücken und Code:Ausdrücke vs. Code .

Externe Referenzen

IIf-Funktion (Visual Basic for Applications)Office VBA-ReferenzthemaMicrosoft Docso365devx