web-dev-qa-db-fra.com

Expressions de cas dans Access

Pouvez-vous utiliser des expressions case dans Access? J'essaie de déterminer la date maximale des colonnes du formulaire 2, mais je continue à obtenir des erreurs de syntaxe dans le code suivant:

CASE 
  WHEN dbo_tbl_property.LASTSERVICEDATE > Contour_dates.[Last CP12 Date]
    THEN dbo_tbl_property.LASTSERVICEDATE 
  ELSE Contour_dates.[Last CP12 Date] 
END AS MaxDate
35
elphj

Vous pouvez utiliser la fonction IIF() à la place.

IIF(condition, valueiftrue, valueiffalse)
  • condition est la valeur que vous souhaitez tester.

  • valueiftrue est la valeur renvoyée si la condition est évaluée à TRUE.

  • valueiffalse est la valeur renvoyée si la condition est évaluée à FALSE.

Il existe également la fonction Switch qui est plus facile à utiliser et à comprendre lorsque vous avez plusieurs conditions à tester:

Switch( expr-1, value-1 [, expr-2, value-2 ] … [, expr-n, value-n ] )

La liste des arguments de la fonction Switch se compose de paires d'expressions et de valeurs. Les expressions sont évaluées de gauche à droite et la valeur associée à la première expression à évaluer sur True est renvoyée. Si les pièces ne sont pas correctement appariées, une erreur d'exécution se produit. Par exemple, si expr-1 est True, Switch renvoie la valeur-1. Si expr-1 est False, mais expr-2 est True, Switch renvoie la valeur-2, etc.

Switch renvoie une valeur Null si:

  • Aucune des expressions n'est vraie.

  • La première expression True a une valeur correspondante qui est Null.

REMARQUE: Switch évalue toutes les expressions , même s'il n'en renvoie qu'une seule. Pour cette raison, vous devez surveiller les effets secondaires indésirables. Par exemple, si l'évaluation d'une expression entraîne une division par zéro, une erreur se produit.

53
Mitch Wheat

Il n'y a aucune déclaration de cas dans Access. À la place, vous pouvez utiliser l'instruction switch. Il ressemblera à celui ci-dessous:

switch(dbo_tbl_property.LASTSERVICEDATE > Contour_dates.[Last CP12 Date],dbo_tbl_property.LASTSERVICEDATE,dbo_tbl_property.LASTSERVICEDATE <= Contour_dates.[Last CP12 Date],Contour_dates.[Last CP12 Date])

Pour plus de lecture, consultez: http://www.techonthenet.com/access/functions/advanced/switch.php

Ou pour l'exemple d'implémentation de fonction de cas dans VBA:

http://ewbi.blogs.com/develops/2006/02/adding_case_to_.html

Cordialement, J.

9
juckobee