Bonjour,
j'essaie de faire une recherche multicritère en fonction du critère que l'on choisit dans une liste déroulante.
Pour simplifier, j'essaie déjà de le faire avec 2 critères seulement : dans une table offre (désigne les offres proposées au client), on a un champ "typeConteneur" (20 pieds, 40 pieds...), un champ dateoffre (la date de l'offre) et un champ prixvente (le prix proposé)
Les critères rentrés seront le type et la date. Par exemple si l'on souhaite connaître tous les conteneurs de 20 pieds proposés le 4 mai on rentrera "20 pieds" dans la zone de liste "critereType" et "04/05/2010" dans la zone de liste "critereDate".
Voici la requête que ça donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT TableOffre.TypeConteneur, TableOffre.DateOffre, TableOffre.PrixVente FROM TableOffre WHERE (((TableOffre.TypeConteneur) Like Formulaires!FiltrageOffres!CritereType) And ((TableOffre.DateOffre) Like Formulaires!FiltrageOffres!CritereDate));
Ca fonctionne, malheureusement, si l'un des critères n'est pas renseigné alors il n'affiche aucune offre car affiche que les offres où le champ est vide mais aucun n'est vide.
Comment faire pour qu'ils prenne en compte le critère que si il n'est pas vide ??
Avec un tuto trouvé sur ce site j'ai trouvé la fonction iif qui pourrait peut être résoudre mon problème mais n'ayant jamais fait de sql, je n'arrive pas à trouver la bonne syntaxe:
Mais ça fonctionne pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT TableOffre.TypeConteneur, TableOffre.DateOffre, TableOffre.PrixVente FROM TableOffre WHERE Tableoffre.TypeConteneur=IIf(Formulaires!FiltrageOffres!CritereType=0,Tableoffre.TypeConteneur,Formulaires!FiltrageOffres!CritereType) And ((TableOffre.DateOffre) Like Formulaires!FiltrageOffres!CritereDate);
Sinon, j'ai trouvé des posts où certains parlaient de concaténation, là aussi je me suis lancé:
mais sans succès...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 sql = "SELECT TableOffre.TypeConteneur, TableOffre.DateOffre, TableOffre.PrixVente FROM TableOffre WHERE " ifnot isnull(me.CritereType) then sql = sql & "(((TableOffre.TypeConteneur) Like [Formulaires]![FiltrageOffres]![CritereType]) AND ((TableOffre.DateOffre) Like [Formulaires]![FiltrageOffres]![CritereDate]));" else if isnull(me.modifiable2) then sql = sql & "((TableOffre.DateOffre) Like [Formulaires]![FiltrageOffres]![CritereDate]);" end if end if
Ca fait depuis vendredi que je galère la dessus, alors je me suis dit qu'il était temps d'appeler au secours
Merci d'avance à ceux qui auront déjà pris le temps de lire![]()
Partager