IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Requête paramétrée, un seul champ avec plusieurs critères différents


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Chef de projet R&D
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 1
    Points
    1
    Par défaut Requête paramétrée, un seul champ avec plusieurs critères différents
    Bonjour à tous,

    Je débute dans l'utilisation d'Access. Je dois créer une base données et je bloque sur une requête, c'est pour quoi je sollicite votre aide...
    Dans ma BDD, j'ai entre autres une table ingrédients et une table recette. J'ai voulu créer une requête permettant d'avoir toutes les recettes liées à un ingrédients, en choisissant avant l'ingrédient dans une liste déroulante (dans un formulaire). J'ai bien réussi à faire cette requête paramétrée.

    Maintenant je souhaiterai pouvoir avoir toutes les recettes liées à une combinaison d'ingrédients, par exemple, toutes les recettes contenant des œufs et de la farine. Je veux pouvoir choisir encore une fois mes ingrédients dans des listes déroulantes, contenue dans un formulaire. Par exemple liste déroulante 1: œufs, liste déroulante 2: farine etc

    C'est donc sur cette requête que je bloque. Cela me paraissait assez simple: je pensais créer un formulaire avec 2 listes déroulantes ayant la même source (ma table ingrédients) et mettre dans critères [Formulaires]![Ingrédients]![Ingrédients] Et [Formulaires]![Ingrédients]![Ingrédients2] mais lorsque je lance ma requête elle ne fonctionne pas...
    J'ai également essayé mettre deux fois le champ ingrédients, venant de la même table ingrédients, dans ma requête, en utilisant un alias, et de mettre un critère de formulaire dans chaque champ, mais cela ne fonctionne pas non plus (lorsque j'enregistre ma requête, Access enlève tout seul la table d'origine du champ alias)...

    Quelqu'un a-t'il une solution? Sachant que je ne maîtrise pas trop trop le SQL...

    Merci d'avance pour votre aide et bonne fin de journée

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    Peux-tu poster la structure de ta table de recette ?

    A+

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Chef de projet R&D
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Encore une fois je débute... Comment fait-on pour obtenir la structure d'une table en code? J'ai trouvé comment l'imprimer mais pas plus...

    Merci d'avance,

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    Tu ouvres ta table en mode création.
    Tu fais une copie d'écran.
    Tu postes la copie de l'écran.

    A+

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Chef de projet R&D
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Voici la copie de l'écran:

    Nom : Structure table recette.jpg
Affichages : 1846
Taille : 251,3 Ko

    Merci!

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    Je soupçonne que [Ingrédients] est un champ multi-valué.

    Si oui c'est un poil compliqué car il va falloir utiliser une requête de regroupement.

    1. Tu crées une nouvelle requête.
    2. Tu sélectionnes les champs que tu veux voir dans le résultat. (Ne pas choisir *).
      Personnellement je choisirai : [IdR], [Nom] et [Ingrédients]
    3. Tu ajoutes [Ingredients].Value aux colonnes, 2 fois.
    4. Dans la 1ère colonne [Ingredients].Value, tu mets comme critères =[Forms]![NomTonForm]![NomTalListe1] (Adapter à ta réalité pour les noms).
    5. Dans la 1ième colonne [CODEinline][Ingredients].Value[CODEinline], tu mets comme critères =[Forms]![NomTonForm]![NomTalListe2] (Adapter à ta réalité pour les noms).
    6. Sauvegarde et vérifie les résultats. Tu devrais avoir [Nombre de recettes] * 2 lignes résultats.
    7. Tu reviens en mode conception.
    8. Tu cliques sur l'icône Sigma (celle qui ressemble à un 3 à l'envers).
    9. Sur la ligne Opération qui est apparue, pour les 2 colonne .value, tu décoches la colonne et tu choisi "Où"
    10. Sauvegarde et vérifie les résultats. Tu devrais avoir [Nombre de recettes] lignes résultat.


    A+

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Chef de projet R&D
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci beaucoup pour ta réponse. Effectivement Ingrédients est un champ multi valué, il existe une jointure entre recette et ingrédients.

    Malheureusement la démarche ne fonctionne pas... Je suis allée jusqu'à l'étape 6 et après l'enregistrement, lorsque je passe en mode Feuille de données cela ne donne rien (j'ai bien fait attention à remplir les champs de mon formulaire avant).
    J'ai essayé pour voir de fermer la requête après enregistrement et de la rouvrir et le critère du premier Ingrédient.value s'efface automatiquement pour aller dans le critère du deuxième Ingrédient.value sous la forme: [Formulaires]![Ingrédients]![Ingrédients] Et [Formulaires]![Ingrédients]![Ingrédients2]J'ai quand même essaye en finissant la démarche jusqu'au bout et en lançant la requête via le formulaire et cela ne fonctionne pas non plus (j'ai mis des ingrédients où je sais qu'une recette est associée)

    A+

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    1. Tu peux aussi t'arrêter à l'étape 3 et valider si la requête affiche bien des résultats.
      Si tu as fait les choix suggéré tu devrais voir [IdR], [Nom], [Ingrédients], .Value1 et .Value2 avec des données.
    2. Si cela marche, commence par poser un critère fixe sur .Value1 (une valeur que tu sais être bonne) et vérifie le résultat.
    3. Si cela marche, fait al même chose avec en plus Value2 (une valeur que tu sais être bonne) et vérifie le résultat.
    4. Ensuite ajoute 2 nouvelles colonnes qui valent P1: [Formulaires]![Ingrédients]![Ingrédients] et P2 : [Formulaires]![Ingrédients]![Ingrédients2] (il faut que le formulaire soit ouvert).
    5. Et regarde le résultat, cela va te permettre de valider que Access trouve bien les 2 infos du formulaire.
    6. Si cela marche, remplace les critères fixes par les critères en provenance du formulaire et vérifie le résultat.


    Inutile d'essayer plus loin tant que cela ne marche pas à ces étapes.

    A+

  9. #9
    Nouveau Candidat au Club
    Femme Profil pro
    Chef de projet R&D
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    J'ai suivi tes indications. Cela fonctionne lorsque je m'arrête à l'étape 3 de ton précédent post. Cela ne marche plus dès que je pose un critère fixe sur Value1 (étape 2 de ce post)...

    A+

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    Peux-tu poster le SQL de ta requête ou une copie d'écran du mode conception.
    Pour voir le SQL, cliquer sur l'icône en haut à gauche avec l'équerre et choisir SQL.
    Aussi pourrais-tu poster une copie d'écran du résultat de la requête fonctionnelle. Cela adirerait pour donner des exemples.

    A+

  11. #11
    Nouveau Candidat au Club
    Femme Profil pro
    Chef de projet R&D
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Voici le SQL de la requête fonctionnelle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Recette.IdR, Recette.Nom, Recette.Ingrédients.Value, Recette.Ingrédients.Value
    FROM Recette INNER JOIN (Ingrédients INNER JOIN [Jointure Ingrédients/Recette] ON Ingrédients.IdI = [Jointure Ingrédients/Recette].IdI) ON Recette.IdR = [Jointure Ingrédients/Recette].IdR;
    et la copie d'écran du résultat : Nom : Sans titre.png
Affichages : 1794
Taille : 43,2 Ko

    Voici le SQL de ma requête lorsque je mets un critère fixe sur l'une des value:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Recette.IdR, Recette.Nom, Recette.Ingrédients.Value, Recette.Ingrédients.Value
    FROM Recette INNER JOIN (Ingrédients INNER JOIN [Jointure Ingrédients/Recette] ON Ingrédients.IdI = [Jointure Ingrédients/Recette].IdI) ON Recette.IdR = [Jointure Ingrédients/Recette].IdR
    WHERE (((Recette.Ingrédients.Value)="Farine"));
    Voici le SQL de ma requête lorsque mes critères viennent du formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     SELECT Recette.IdR, Recette.Nom, Recette.Ingrédients.Value, Recette.Ingrédients.Value
    FROM Recette INNER JOIN (Ingrédients INNER JOIN [Jointure Ingrédients/Recette] ON Ingrédients.IdI = [Jointure Ingrédients/Recette].IdI) ON Recette.IdR = [Jointure Ingrédients/Recette].IdR
    WHERE (((Recette.Ingrédients.Value)=[Formulaires]![Ingrédients]![Ingrédient]) AND ((Recette.Ingrédients.Value)=[Formulaires]![Ingrédients]![Ingrédients2]));


    A+

  12. #12
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    Se pourrait-il que IdI soit de type numérique (genre 1,2,3) et pas texte ?

    A+

  13. #13
    Nouveau Candidat au Club
    Femme Profil pro
    Chef de projet R&D
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Effectivement, IdI est la clé primaire de la table ingrédient. Il s'agit donc d'un "numéro auto"

    A+

  14. #14
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Fait un test avec la valeur numérique correspondant à "Farine".

    A+

  15. #15
    Nouveau Candidat au Club
    Femme Profil pro
    Chef de projet R&D
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Ca marche!!

    Du coup j'ai essayé en changeant la valeur 1 avec [Formulaires]![Ingrédients]![Ingrédients] puis en changeant celui de value2 et cela marche également, voici le SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Recette.IdR, Recette.Nom, Recette.Ingrédients.Value, Recette.Ingrédients.Value AS Ingrédients2
    FROM Recette INNER JOIN (Ingrédients INNER JOIN [Jointure Ingrédients/Recette] ON Ingrédients.IdI = [Jointure Ingrédients/Recette].IdI) ON Recette.IdR = [Jointure Ingrédients/Recette].IdR
    WHERE (((Recette.Ingrédients.Value)=[Formulaires]![Ingrédients]![Ingrédient] And (Recette.Ingrédients.Value)=[Formulaires]![Ingrédients]![Ingrédient2]));
    ...

    Cela n'a pas marché dès le premier essai, il a fallu que je modifie quelques petites choses dans mon formulaire initial (Ingrédients) : dans le format de mes listes déroulantes, passer le nombre de colonnes à 2 (IdI et Ingrédient) et changer la largeur des colonnes pour ne plus voir IdI... Au final le problème devait juste venir de là...

    Merci beaucoup en tous cas pour ton aide Marot_r!!!
    Je suis surprise que dans la requête, nous utilisions Ingrédient.value de recette et non directement Ingrédient de la table Ingrédient?
    J'avais déjà fait ce type de requête, où cette fois je n'avais qu'un seul critère pour un champ, en la faisant avec le champ ingrédient de la table ingrédients et cela avait très bien marché. J'ai fait le test ici et cela ne fonctionne pas.

    Merci encore!

  16. #16
    Nouveau Candidat au Club
    Femme Profil pro
    Chef de projet R&D
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Maintenant que cela marche, j'ai d'autres petits problèmes liés à cette requête:

    Lorsque je créé un formulaire à plusieurs éléments pour avoir la liste des recettes joliment présentée, je ne vois plus les ingrédients mais les numéros qui correspondent (comme montré dans la copie d'écran)... Et je n'arrive pas à les changer pour avoir le nom des ingrédients.
    Nom : Sans titre3.jpg
Affichages : 1735
Taille : 74,0 Ko

    De plus, j'ai essayé de faire le regroupement des résultats, selon ta démarche de ton post du 12/04. J'arrive à obtenir le bon résultat lorsque je décoche l'affichage des ingrédients et de IdR. Autrement j'ai le message d'erreur ci-dessous:
    Nom : Sans titre4.jpg
Affichages : 1970
Taille : 149,3 Ko

    A+

  17. #17
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Bonjour.

    Comme je ne me sers pas des champs multivalués je ne suis pas certain que ce soit une anomalie mais ton champ Ingrédients de la table des recettes fait double emplois avec ta table Jointure Recette/Ingredient.

    Personnellement je garderai la table et je supprimerai le champ multivalué.
    Cela contraint à faire la saisie des ingrédients d'une recette dans un sous-formulaire.
    En gros cela se présente comme suit :

    Formulaire Recette basé sur ta table Recette

    Sous Formulaire basé sur ta table Jointure Recette/Ingredient.

    En passant à propos des noms d'objets internes (tables, requêtes, variables, modules, ...), bien que Access soit TRÈS (voir TROP) tolérant, je recommande de se limiter à :
    • Lettres majuscules et minuscules non accentués et non "décorées" (pas de ç)
    • Aux chiffres
    • Au souligné (_) si on veut séparer les mots
    • Pas d'espace, de tiret (-) et autres caractères non alphabétiques.


    Cela évite des bugs assez vicieux est sournois.
    Il faut garder en tête que M$ est américain et qu'en anglais il n'y a (sauf imports d'autres langues) pas d'accent.
    Si tu as besoin de textes plus agréable pour un humain,, utilise les formulaires et des étiquettes où tu peux laisser libre court à toutes (ou presque) tes fantaisies sans risque pour le fonctionnement de ton application.

    A+

  18. #18
    Nouveau Candidat au Club
    Femme Profil pro
    Chef de projet R&D
    Inscrit en
    Avril 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2017
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Je n'ai pas encore eu le temps d'essayer de supprimer le champ multivalué et de faire la saisie des ingrédients dans un sous formulaire mais je testerai!
    Dans tous les cas j'ai réussi ce que je voulais faire. Merci encore pour ton aide!

    Bonne journée!

Discussions similaires

  1. [awk] Extraire des champs avec plusieurs séparateurs différents
    Par leon1983 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 20/11/2013, 16h20
  2. [AC-2003] Mise à jour d'un seul champ avec critères
    Par ocean312 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 11/03/2013, 05h07
  3. Réponses: 6
    Dernier message: 23/11/2011, 16h36
  4. [Toutes versions] Requête vba avec plusieurs critères ?
    Par Duch9 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/02/2011, 12h35
  5. requête SQL avec plusieurs critères de sélection
    Par gailup dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/06/2007, 08h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo