OVH Cloud OVH Cloud

opérateur In list ???

1 réponse
Avatar
débutant
Salut =E0 tous,

J'ai un formulaire que j'utilise pour entrer des crit=E8res=20
de recherche (date d=E9but et date fin, ainsi qu'une chaine=20
de carat=E8res qui correspond =E0 une liste de produits ex:=20
chaine=3DproduitA,produitB,....).

Une fois les crit=E8res saisis je lance une requ=EAte qui les=20
utilise. Ca fonctionne pour les date et si la chaine ne=20
contient qu'un produit. Si la chaine contient plusieurs=20
produits, ca marche pas!

Dans la requ=EAte, comme crit=E8re j'utilise le param=E8tre
In (chaine). En fait j'utilise pr=E9cisement In ([Forms]!
[mon_Formulaire]![produit])

1) quelle est la bonne syntaxe pour le param=E8tre
2) Dans SQL, la chaine serait ('produitA','produitB',...)=20
Dois-je la construire de cette fa=E7on ou diff=E9rement?

Merci de votre aide

1 réponse

Avatar
Michel Walsh
Salut,


WHERE ( "," & param & "," ) LIKE ( "*," & champ & ",*" )


où param est fourni sans espace après les virgules:

produitA,produitB,produitC

et non

produitA, produitB, produitC



Fonctionnement: si le champ contient une des valeurs, disons, produitC,
alors, après concaténation, on se retrouve avec:


WHERE ",produitA,produitB,produitC," LIKE "*,produitC,*"

ce qui est vrai, et donc, l'enregistrement est conservé. Autrement,
l'enregistrement n'est pas conservé. Cette formulation utilisant LIKE est
donc logiquement équivalente à un IN( ) à liste variable.

Par contre, aucun index ne peut être utilisé, et c'est donc potentiellement
lent. Si la liste est longue ou si la table contient beaucoup
d'enregistrements, je suggère plutôt de procéder par INNER JOIN entre la
table de base et une table temporaire qui contiendrait les choix recherchés.




Espérant être utile,
Vanderghast, Access MVP


"débutant" wrote in message
news:a38e01c434f7$137a11b0$
Salut à tous,

J'ai un formulaire que j'utilise pour entrer des critères
de recherche (date début et date fin, ainsi qu'une chaine
de caratères qui correspond à une liste de produits ex:
chaine=produitA,produitB,....).

Une fois les critères saisis je lance une requête qui les
utilise. Ca fonctionne pour les date et si la chaine ne
contient qu'un produit. Si la chaine contient plusieurs
produits, ca marche pas!

Dans la requête, comme critère j'utilise le paramètre
In (chaine). En fait j'utilise précisement In ([Forms]!
[mon_Formulaire]![produit])

1) quelle est la bonne syntaxe pour le paramètre
2) Dans SQL, la chaine serait ('produitA','produitB',...)
Dois-je la construire de cette façon ou différement?

Merci de votre aide