Access
 sql >> Base de données >  >> RDS >> Access

La fonction IIf() par rapport à l'instruction IIf()

Le IIf() fonction et la IIf() déclaration sont des animaux fondamentalement différents.

Malheureusement, ils sont presque impossibles à distinguer. Et pourtant, il est important de pouvoir le faire. Pourquoi?

Parce que cette fonction IIf() est une erreur d'exécution en attente de se produire :

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

Alors que cette instruction IIf() renverra en toute sécurité une valeur même si Attempts = 0 :

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

Alors, saurez-vous faire la différence entre les deux ?

Les différencier

Si vous ne pouvez pas repérer la différence entre les deux échantillons ci-dessus, c'est parce qu'il n'y a pas de différence.

Le IIf() fonction semble identique au IIf() déclaration.

La différence réside dans le comment, ou plus précisément, où– ils sont évalués.

  • La fonction IIf est membre de la bibliothèque standard VBA.Interaction.
  • L'instruction IIf est évalué par le service d'expression du moteur de base de données Jet/ACE (acees.dll).

J'ai écrit sur les différences entre le code et les expressions ici :

Expressions vs. CodeQuand est-ce que le code n'est pas du code ? Quand c'est une expression. Quelle est la différence et qui s'en soucie vraiment ? Explorons. Plus définiMike Wolfe

La différence fondamentale entre la fonction IIf() et l'instruction IIf()

Trois mots :évaluation de court-circuit.

  • L'instruction IIf a-t-il.
  • La fonction IIf pas.

Qu'est-ce que l'évaluation de court-circuit ?

Dans l'évaluation de court-circuit, le code évalue uniquement les expressions nécessaires pour déterminer le résultat.

L'instruction IIf et la fonction IIf prennent toutes deux trois arguments :

  • expression : une condition booléenne
  • partie vraie : le résultat à retourner si expr est vrai
  • fausse partie : le résultat à retourner si expr est faux

Avec l'instruction IIf, seuls deux de ces arguments sont évalués :le expr et–selon le résultat de l'expr– soit la truepart OU la fausse partie .

Avec la fonction IIf, les trois arguments DOIVENT être évalués avant même d'être transmis à la fonction.

Pourquoi c'est important

Revenons à l'exemple de code d'origine :

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

Que se passe-t-il si la valeur de Tentatives est zéro ?

IIf instruction

  • L'expression est évalué à Vrai.
  • La partie vraie évalue à 0 .
  • L'instruction renvoie 0 .

IIf fonction

  • L'expression est évalué à Vrai.
  • La partie vraie évalue à 0 .
  • La partie fausse est évalué à #ERROR# :Division par zéro

La fonction version renvoie une erreur car elle a été forcée d'évaluer à la fois la truepart et la fausse partie expressions.

Où est IIf Traité comme une déclaration ?

Si est évalué comme une déclaration aux endroits suivants :

  • Requêtes
  • Propriétés de formulaire/rapport/contrôle (par exemple, un TextBox ControlSource)
  • La fonction Access Application.Eval()

Pour plus de détails, y compris comment tester définitivement si IIf est traité comme une instruction ou une fonction - lisez mon article sur les différences entre les expressions et le code :Expressions vs. Code .

Références externes

Fonction IIf (Visual Basic pour Applications)Rubrique de référence Office VBAMicrosoft Docso365devx