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 :

Avoir des check box pour les parametres d'une requete


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Points : 5
    Points
    5
    Par défaut Avoir des check box pour les parametres d'une requete
    Bonjour,
    Je suis nouveau sur Access ... je suis sous business object et je pense que ce n'est qu'un manque de connaissance pour resoudre mon probleme :
    J'ai 2 tables : equipement et categorie.
    Je souhaites afficher uniquement certains equipments en fonction de leur categorie.
    Je voudrai pouvoir avoir en parametre des checkboxs ( issus de ma table categorie ) a selectionner .
    J ai ma requete faites en "manuel" ( j ai fait des tests en SQL direct ), mais impossible de trouver comment le faire via les parametres en dynamique( je n arrive qu a avoir un champs ou je dois taper a la main ...)
    Merci d avance !
    NB: j ai cherche avec parametre dans le forum et a priori rien , donc je pense que la feinte est autre part avec un autre mot clef ?...

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Est-ce que tu veux obligatoirement un checkbox? Parce qu'avec une liste déroulante, tu as un TUTO ICI.
    Après, pour présenter des résultats ou travailler avec l'utilisateur final, on préfère souvent les formulaires. Tu as ICI les différents modèles et propositions pour créer des formulaires de recherches.

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par madefemere Voir le message
    Bonjour,

    Est-ce que tu veux obligatoirement un checkbox? Parce qu'avec une liste déroulante, tu as un TUTO ICI.
    Après, pour présenter des résultats ou travailler avec l'utilisateur final, on préfère souvent les formulaires. Tu as ICI les différents modèles et propositions pour créer des formulaires de recherches.

    Cordialement,
    Bonjour, non pas forcement de check box.
    Ce Tuto je l avais trouve mais il ne prends pas en compte mon choix de la listbox, je m explique :
    Avec le REplace en VB, il ne "reconnais pas " cboPays ( avec Nz(cboPays) dans l exemple ). Chez moi, la listbox s apelle donc categorie mais il remplace juste par du vide ( donc 2 "" )... J'en ai deduit qu il ne savais pas recuperer les selections ... d ou mon idee de checkbox plutot ...
    J ai verifie mon code en lui demandant de remplacer le parametre [XX] par "toto" par exemple, et ca passe nickel ... si tu vois pourquoi, je suis ouvert a la listbox, l idee etait que cela ne devait pas me prendre longtemps en faire ...

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Est-ce que la petite base en pièce jointe te parle ?
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par madefemere Voir le message
    Est-ce que la petite base en pièce jointe te parle ?
    Alors oui, il y a l event apres la mise a jour , je crois que je comprends a peu pres... Mais du coup, qd je passe la combo en listbox, ca ne marche plus.
    J'avais lu un tuto et dans la meme idee du lien que tu m as donne avant, avec un bouton OK a clicquer pour la mise a jour
    Je joint ma base... ce que je ne comprends pas c est pourquoi il ne recupere pas la valeur de ma combo... apres pleins de tests, ca sonne comme du code VB mal utilise ( je vois un me.filter dans ton code ...?? )
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bon, effectivement, récupérer les éléments sélectionnés dans une liste Box n'est pas des plus trivial.
    Ci-joint ta base rectifiée. J'ai aussi enlever le paramètre Context... dans la requête.
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup, en fait c etait bien du VB ..complique .. ...
    Par contre pour contexte, il me le faudrai qd meme ... est ce que c est un mot reservé ? si j apelle ca categorie ?
    L'idee ...
    J ai ma liste d equipement
    MOn user selectionne son activité, et il a une liste d equipement, classe par categorie qui s affiche...
    Pcq la tu as changer le remplacement dans la requete du bouton O, mais quoi d autre ? je ne vois pas d autre modifs si ? que je comprene ;-)

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par smalldragoon Voir le message
    Merci beaucoup, en fait c etait bien du VB ..complique .. ...
    Par contre pour contexte, il me le faudrai qd meme ... est ce que c est un mot reservé ? si j apelle ca categorie ?
    L'idee ...
    J ai ma liste d equipement
    MOn user selectionne son activité, et il a une liste d equipement, classe par categorie qui s affiche...
    Pcq la tu as changer le remplacement dans la requete du bouton O, mais quoi d autre ? je ne vois pas d autre modifs si ? que je comprene ;-)
    Apres tests entre temps, il ne tiens pas compte de "multi selection" ... il ne remplace que le dernier cliqué en fait ...
    Je viens de verifier en regardant la requete SQL :
    SELECT Categorie.nom, Equipement.Nom
    FROM (Equipement INNER JOIN Categorie ON Equipement.[Categorie] = Categorie.[nom]) INNER JOIN Contexte ON Equipement.Contexte.Value = Contexte.Nom
    WHERE (((Contexte.Nom)="Eau Chaude"));
    OR il devrait mettre (Contexte.Nom)="Eau Chaude") or (Contexte.Nom)="Eau Froide") ... je suppose que le Nz(Me.CONTEXT_VALID.ItemData(varItm)) ne gere pas cette syntaxe ?

    J'ai nettoyé la base de tous mes tests et insere des records poru que ce soit plus comprehensible ..
    Fichiers attachés Fichiers attachés

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonsoir,

    Oui, c'est du VBA combiné avec du SQL.
    Commençons par le début et simple :
    1- J'ai supprimé un paramètre "Choose_Context" qui se trouvait dans la requête "Liste_Equipement_Modele" qui était inutile.
    Pièce jointe 158753 Donc t'inquiètes pas là-dessus.
    2- Le résultat de ta requête va être affiché dans "Liste_Equipement", mais on utilise la requête paramétrée "Liste_Equipement_Modele" qui a comme code SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Categorie.nom, Equipement.Nom, Contexte.Nom
    FROM (Equipement INNER JOIN Categorie ON Equipement.[Categorie] = Categorie.[nom]) INNER JOIN Contexte ON Equipement.Contexte.Value = Contexte.Nom WHERE (((Contexte.Nom)=[Choose_context]));
    où donc le =Choose_context est un paramètre qui devra être changé par les données à partir de ton formulaire (c'est le bon paramètre qu'on va utiliser).
    3- L'essentiel du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    'Récupérer les valeurs sélectionnées dans une liste box
    strCriteria = Chr(34) 'commencer le critère par un "
    For Each varItm In Me.CONTEXT_VALID.ItemsSelected
        'Effectue le remplacement du critere par la valeur
        'Uniquement pour une sélection unique
        'strSQLModele = Replace(strSQLModele, "[Choose_context]", Chr(34) & Nz(Me.CONTEXT_VALID.ItemData(varItm)) & Chr(34))
        'Ajouter la valeur sélectionnée et ""
        strCriteria = strCriteria & Me.CONTEXT_VALID.ItemData(varItm) & Chr(34) & "," & Chr(34)
    Next varItm
    strCriteria = Left(strCriteria, Len(strCriteria) - 2) ' enlever la dernière virgule rajoutée
    strSQLModele = Replace(strSQLModele, "=[Choose_context]", " IN(" & strCriteria & ")")
    consiste à récupérer les valeurs à partir des contrôles du formulaire et les organiser pour les intégrer dans le modèle de requête. Et c'est cette expression SQL qui va être utilisée pour définir le code de la requête résultat.

    Comme je disais, la récupération des valeurs d'une liste box est particulière parce qu'il faut utiliser la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For .... ...ItemsSelected
    ....ItemData()
    Next ...
    a- La ligne que j'ai mise en commentaire est utilisable quand tu fais une sélection unique parce qu'il suffisait de changer Choose_context par la valeur sélectionnée dans ta zone de liste.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     strSQLModele = Replace(strSQLModele, "[Choose_context]", Chr(34) & Nz(Me.CONTEXT_VALID.ItemData(varItm)) & Chr(34))
    b- Dans le cas de sélection multiple, il est difficile de constituer un critère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (((Contexte.Nom)="Loisir" AND (Contexte.Nom)="Eau froide"))
    Heureusement, qu'on peut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (((Contexte.Nom) IN ("Loisir","Eau froide"))
    Donc le dernier code remplace le "=Choose_Context" par IN ("Loisir","Eau froide") selon les choix dans la zone de liste.

    Pour le terme "Choose_context", tu peux changer. Aucun problème.

    La base permettant les multi-sélection est jointe.

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Super ! J'ai compris pour le parametre, effectivement cela ne sert a rien ...
    J etais en train d essayer de faire de la concatenation de chaine etc... mais avec ta solution avec le "IN" est bien plus simple et propre !
    Un grand merci ! tout est bon ! y a plus qu a remplir pour chacun les equipements et leur activites !
    Un grand merci pour ton support et ton aide !
    Je me lance sur la partie rapport mais ca, je devrai m en sortir !!!

  11. #11
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    N'oublie de mettre en "RESOLU" dans ce cas !
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par madefemere Voir le message
    N'oublie de mettre en "RESOLU" dans ce cas !
    C est fait !
    Encore merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 16/01/2020, 14h21
  2. Afficher les images selectionner avec des check box
    Par Imène_23 dans le forum Interfaces Graphiques
    Réponses: 6
    Dernier message: 18/06/2009, 11h42
  3. Lister les parametres d'une requete
    Par Antoon dans le forum Langage SQL
    Réponses: 5
    Dernier message: 21/04/2008, 18h05
  4. Mettre a jour les Parametres dans une requete SQL
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 7
    Dernier message: 31/03/2004, 13h51
  5. Des fonctions OGL pour les images de format usuel ?
    Par jamal24 dans le forum OpenGL
    Réponses: 3
    Dernier message: 31/05/2003, 21h59

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