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

La funzione IIf() e l'istruzione IIf()

Il IIf() e la funzione IIf() dichiarazione sono animali fondamentalmente diversi.

Sfortunatamente, sono quasi impossibili da distinguere. Eppure, è importante essere in grado di farlo. Come mai?

Perché questa IIf() funzione è un errore di runtime in attesa di verificarsi:

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

Mentre questa IIf() dichiarazione restituirà in modo sicuro un valore anche se Attempts = 0 :

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

Quindi, riesci a individuare la differenza tra i due?

Distinguerli

Se non riesci a individuare la differenza tra i due campioni sopra, è perché non c'è differenza.

Il IIf() funzione sembra identico a IIf() dichiarazione.

La differenza sta nel come, o più precisamente, nel dove– vengono valutati.

  • La funzione di IIf è un membro della libreria standard VBA.Interaction.
  • La dichiarazione di IIf viene valutato dal servizio di espressione del motore di database Jet/ACE (acees.dll).

Ho scritto delle differenze tra codice ed espressioni qui:

Espressioni e codiceQuando il codice non è codice? Quando è un'espressione Qual è la differenza e a chi importa davvero? Esploriamo. Non è più impostatoMike Wolfe

La differenza fondamentale tra la funzione IIf() e l'istruzione IIf()

Tre parole:valutazione di cortocircuito.

  • La dichiarazione di IIf ce l'ha.
  • La funzione di IIf no.

Cos'è la valutazione di cortocircuito?

Nella valutazione di cortocircuito, il codice valuta solo le espressioni necessarie per determinare il risultato.

L'istruzione IIf e la funzione IIf accettano entrambe tre argomenti:

  • espr: una condizione booleana
  • parte vera: il risultato da restituire se expr è vero
  • falsepart: il risultato da restituire se expr è falso

Con l'istruzione IIf, vengono valutati solo due di questi argomenti:expr e–a seconda del risultato dell'espr– o la parte vera OPPURE il falsepart .

Con la funzione IIf, tutti e tre gli argomenti DEVONO essere valutati prima ancora di essere passati alla funzione.

Perché è importante

Torniamo al codice di esempio originale:

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

Cosa succede se il valore di Tentativi è zero?

IF dichiarazione

  • L'espr restituisce True.
  • La parte vera restituisce 0 .
  • L'istruzione restituisce 0 .

IF funzione

  • L'espr restituisce True.
  • La parte vera restituisce 0 .
  • Il falso restituisce #ERROR#:Divisione per zero

La funzione version restituisce un errore perché è stato forzato a valutare sia il truepart e la falsa parte espressioni.

Dov'è IIf Trattata come una dichiarazione?

Se viene valutato come un'istruzione nei seguenti punti:

  • Query
  • Proprietà modulo/report/controllo (ad es. una sorgente di controllo TextBox)
  • La funzione Access Application.Eval()

Per ulteriori dettagli, incluso come verificare definitivamente se IFf viene trattato come un'istruzione o una funzione:leggi il mio articolo sulle differenze tra espressioni e codice:Espressioni vs. codice .

Riferimenti esterni

Funzione IIf (Visual Basic, Applications Edition) Argomento di riferimento VBA di OfficeMicrosoft Docso365devx