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?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <anonymous@discussions.microsoft.com> wrote in message
news:a38e01c434f7$137a11b0$a301280a@phx.gbl...
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?
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?