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 :

Requete de liste déroulante avec critere


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 140
    Points : 37
    Points
    37
    Par défaut Requete de liste déroulante avec critere
    Bonsoir

    Je suis débutant, mais j'essaie d'élaborer des tables Acess "correctes".
    En particulier, j'ai une table "Enemies" où les utilisateurs peuvent ajouter/modifier les enregistrements.
    Par conséquent, je souhaite mettre 2 des champs de cette table sous forme de liste déroulante (afin d'éviter que les utilisateurs mettent n'importe quoi ou fautes de frappe).
    Pour la 1ère liste déroulante, je n'ai pas eu de problème en écrivant la requete suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT [Mob Data].[Family] FROM [Mob Data]
    J'ai du rajouter le DISTINCT car il y a dans la table MobData qui sert de "référence" plusieurs RACE pour chaque FAMILY. [Mob Data].[RACE] est clé primaire.

    Le probleme survient lorsque j'ai voulu écrire la requete construisant la 2eme liste déroulante avec ::
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT [Mob Data].[RACE] FROM [Mob Data] WHERE [Mob Data].[Family] = [Enemies].[Family]
    où [Enemies].[Family] est la valeur de la 1ére liste déroulante.

    Quand je clique sur la 2e liste déroulante, Access me sort une pop up me demandant la valeur de Enemies.Family.... alors qu'elle existe déjà (non NULL) juste en face...

    Quant aux jointures, le problème reste le même... que ce soit avec LEFT JOIN ou INNER JOIN ou RIGHT JOIN...

    Je ne sait plus quoi faire Help please

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    Bonjour,
    As tu essayé d'actualiser ta seconde liste déroulante sur changement de la première ? Je pense que tu devrais faire ceci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub ListeDéroulante1_Change()
    Me.ListeDéroulante2.Requery
    End Sub
    Ensuite quand je regarde tes requêtes. La valeur de la première liste déroulante me semble plustot être [Mob Data].[Family] et non [Enemies].[Family] et dans ce cas la tu ne fais aucune référence a [Enemies].[Family].

    Désolé si je tombe à coté.
    Manu

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 140
    Points : 37
    Points
    37
    Par défaut
    Bonjour et merci pour votre réponse

    Je suis débutant je ne sait pas trop où on mets du code dans la fenetre Access (a part la fenetre SQL)
    Ca m'a l'air d'etre du code VB, m'etonnerait qu'il faille taper ca avec mes lignes SQL ?

    Sinon je viens de découvrir une allusion a ce refresh dans la FAQ, mais je comprends pas le rapport avec l'apparition de ce pop-up...

    Concernant l'ordre dans l'expression égalité de la requete, oui j'avais pensé la même chose avant de poster mais j'ai testé dans les 2 sens... le bon sens est clairement celui que j'ai posté ci-dessus, sinon j'obtient vraiment n'importe quoi lol.
    En fait pour faire une comparaison, la table Enemies correspondrait à une table "Commandes" et MobData à une table "Clients", où Commandes repertorie toutes les commandes passées, et Clients toutes les adresses N° tel etc... des clients.
    La requete SQL ci-dessus est basée sur cet exemple qui vient de la FAQ aussi.
    Je pense que j'ai oublié quelquechose de vraiment tout bete mais quoi ? le refresh mais quel rapport et où le mettre ?

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    Vous travaillez dans un formulaire ?

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    Pour ma part j'ai un formulaire ou je fais a peu près la même chose. Il faut faire attention à l'orthographe de tes champs.

    J'ai dans mon formulaire une liste déroulante recherchant l'année.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XAnnée = SELECT T_année.Année FROM T_année ORDER BY [Année];
    Et une seconde (qui change celon le choix de l'année)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Modifiable12 = SELECT T_Rdv.Index_RDV, T_Rdv.Client, T_Rdv.Société, T_Rdv.Date_RDV, T_Rdv.Sujet_RDV FROM T_Rdv WHERE T_Rdv.Login_Commercial=Forms!F_Modif_Rdv!Texte2 AND year(DATE_Rdv)=XAnnée ORDER BY DATE_RDV;
    Sur ma liste XAnnée dans l'événement "sur changement" j'ai mis le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub XAnnée_Change()
    Me.Modifiable12.Requery
    End Sub
    Ceci me permet d'actualiser ma liste appelé Modifiable12 en fonction du résultat mis dans XAnnée. Sans ce bout de code (qui est en effet du VBA), ma liste Modifiable12 ne trouve aucune valeur de XAnnée et ne sort donc pas de valeur.

    En mettant de coté ce bout de code. Je pense que c'est ton appel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [Mob Data].[Family] = [Enemies].[Family]
    qui n'est pas correct car tu ne fais vraiment aucune référence à ce champ Family de table Enemies.

    Manu

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 140
    Points : 37
    Points
    37
    Par défaut
    Oui moi aussi je pense que ca vient de l'égalité, mais quoi exactement je ne sait pas ...

    et si j'essayait comme ca ca marcherait ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... WHERE [Mob Data].[Family] = (SELECT DISTINCT [Mob Data].[Family] FROM [Mob Data])
    EDIT: non ca marche pas...

    Je ne suis pas sûr de comprendre ce que tu veux dire par "manque une référence à Enemies.Family dans la requete"

    sinon, non je ne travaille pas avec formulaire ni VBA, mais directement sur les tables. En fait je m'en fout des formulaires car ces tables seront juste exportées vers une appli VB.NET qui elle sert de "formulaire".
    Mes 2 listes déroulantes se trouvent dans la table Enemies, j'espere que VB2008 m'importera ces 2 listes déroulantes pour mes DataGridViews, avec les relations et autres contraintes faites sous Access (comme cette requete).

    Ci joint la relation existante entre ces 2 tables, peut être que ca aidera à comprendre d'où ca vient ?

    EDIT: je viens d'essayer une autre syntaxe je crois je n'avais pas essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT [Mob Data].Race FROM [Mob Data] INNER JOIN Enemies ON [Mob Data].Family=Enemies.Family;
    Là la 2nde liste déroulante ne me sort plus cette fenetre pop up mais carrement toutes les races... alors que je n'en veux qu'une partie correspondant justement a la valeur selectionnée dans la 1ere liste déroulante (Enemies.Family). Autrement dit, ma condition égalité ne sert a rien...

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    Quand je clique sur la 2e liste déroulante, Access me sort une pop up me demandant la valeur de Enemies.Family.... alors qu'elle existe déjà (non NULL) juste en face...
    Si tu ne travaille pas sur un formulaire, il te demandera toujours de lui donner une valeur pour ce champ afin qu'il puisse exécuter la requete.

    Reprend ton code du départ et donne lui une valeur, la requête devrait s'exécuter si elle est bonne.

    Access ne peut pas "deviner" la valeur de Enemies.Family si elle n'est pas écrite quelque part.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 140
    Points : 37
    Points
    37
    Par défaut
    Bizarre, pourtant Enemies.Family est la colonne juste a coté de Enemies.Race. Le seul cas où access ne pourrait pas deviner la valeur de Enemies.Family serait quand l'utilisateur oublie de selectionner une valeur dans ce champ qui a alors valeur NULL.

    Il faut que j'ecrive quelquechose en plus quelquepart ? Je n'ai tapé aucun code pour l'instant, juste les requetes SQL dans le gestionnaire de requetes de la table Enemies.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    Pour être honnête je ne travail pas de la même façon que toi. Mais d'après ce que je sais et ce que tu as mis, même si la colone est à coté, la requête permet de rechercher seulement les informations répondant aux critères.

    Si tu mets dans ton where [Mob Data].[Family] = "Super méchant", il devrait te sortir tous les enregistrement ou Super méchant est présent dans les deux tables, je suppose donc que c'est pour sa qu'il te demande une valeur.

    Tu as essayé de rentrer manuellement une valeur dans le fenetre pop up ?

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 140
    Points : 37
    Points
    37
    Par défaut
    Bien sûr ! cf. 2 posts + haut, et ca marche exactement comme tu l'as décrit.

    Le hic c'est que l'utilisateur va pas s'amuser a retaper dans la pop-up une valeur qu'il vient juste de selectionner dans la colonne juste avant... ni moi pour "rattraper" les 500 enregistrements existants :s

    Honnetement j'ai laissé tomber l'affaire...

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2010
    Messages : 210
    Points : 243
    Points
    243
    Par défaut
    Bonjour,

    Ce que je veux dire, est que lors de la création de table ou de requete, la fenetre pop up s'ouvre et te demande la valeur car il ne l'a connait pas. En ce qui concerne tes utilisateurs, ils auront un IHM du type des formulaires et dans ce cas la, après avoir choisi la première valeur dans une liste déroulante, access ne t'ouvrira plus de fenêtre pop up. Il ira automatiquement la chercher dans la liste.

    Manu

Discussions similaires

  1. [XL-2007] Liste Déroulante avec une requete SQL
    Par guigui69 dans le forum Excel
    Réponses: 1
    Dernier message: 08/03/2011, 14h48
  2. Source liste déroulante avec 2 requetes
    Par om-player dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 20/02/2008, 10h30
  3. requete d'insertion avec liste déroulantes avec deux colonnes
    Par maxeur dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 25/01/2007, 14h56
  4. Remplissage liste déroulante avec requete
    Par nicoaix dans le forum IHM
    Réponses: 2
    Dernier message: 27/02/2006, 12h13
  5. liste déroulante avec session
    Par leeloo076 dans le forum ASP
    Réponses: 3
    Dernier message: 19/03/2004, 11h01

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