Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/11/2010, 23h53   #1
Invité régulier
 
Inscription : août 2009
Messages : 140
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 140
Points : 9
Points : 9
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 :
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 :
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
Masamunai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 10h08   #2
Nouveau Membre du Club
 
Emmanuel Gautier
Inscription : juin 2010
Messages : 60
Détails du profil
Informations personnelles :
Nom : Emmanuel Gautier
Localisation : France, Yvelines (Île de France)

Informations forums :
Inscription : juin 2010
Messages : 60
Points : 28
Points : 28
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 :
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
egautier18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 10h56   #3
Invité régulier
 
Inscription : août 2009
Messages : 140
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 140
Points : 9
Points : 9
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 ?
Masamunai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 11h16   #4
Nouveau Membre du Club
 
Emmanuel Gautier
Inscription : juin 2010
Messages : 60
Détails du profil
Informations personnelles :
Nom : Emmanuel Gautier
Localisation : France, Yvelines (Île de France)

Informations forums :
Inscription : juin 2010
Messages : 60
Points : 28
Points : 28
Vous travaillez dans un formulaire ?
egautier18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 11h29   #5
Nouveau Membre du Club
 
Emmanuel Gautier
Inscription : juin 2010
Messages : 60
Détails du profil
Informations personnelles :
Nom : Emmanuel Gautier
Localisation : France, Yvelines (Île de France)

Informations forums :
Inscription : juin 2010
Messages : 60
Points : 28
Points : 28
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 :
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 :
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 :
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 :
[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
egautier18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 12h22   #6
Invité régulier
 
Inscription : août 2009
Messages : 140
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 140
Points : 9
Points : 9
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 :
... 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 :
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...
Masamunai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 12h55   #7
Nouveau Membre du Club
 
Emmanuel Gautier
Inscription : juin 2010
Messages : 60
Détails du profil
Informations personnelles :
Nom : Emmanuel Gautier
Localisation : France, Yvelines (Île de France)

Informations forums :
Inscription : juin 2010
Messages : 60
Points : 28
Points : 28
Citation:
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.
egautier18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 13h38   #8
Invité régulier
 
Inscription : août 2009
Messages : 140
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 140
Points : 9
Points : 9
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.
Masamunai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 13h45   #9
Nouveau Membre du Club
 
Emmanuel Gautier
Inscription : juin 2010
Messages : 60
Détails du profil
Informations personnelles :
Nom : Emmanuel Gautier
Localisation : France, Yvelines (Île de France)

Informations forums :
Inscription : juin 2010
Messages : 60
Points : 28
Points : 28
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 ?
egautier18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 18h20   #10
Invité régulier
 
Inscription : août 2009
Messages : 140
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 140
Points : 9
Points : 9
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...
Masamunai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 09h03   #11
Nouveau Membre du Club
 
Emmanuel Gautier
Inscription : juin 2010
Messages : 60
Détails du profil
Informations personnelles :
Nom : Emmanuel Gautier
Localisation : France, Yvelines (Île de France)

Informations forums :
Inscription : juin 2010
Messages : 60
Points : 28
Points : 28
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
egautier18 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h31.


 
 
 
 
Partenaires

Hébergement Web