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 29/11/2010, 12h11   #1
Invité de passage
 
Lionel PIGNIER
Inscription : décembre 2009
Messages : 18
Détails du profil
Informations personnelles :
Nom : Lionel PIGNIER

Informations forums :
Inscription : décembre 2009
Messages : 18
Points : 4
Points : 4
Par défaut Requête pilotée par zone de liste

Bonjour à tous,

Je recherche de l'aide sur un point au sujet duquel je ne crois pas avoir trouvé de post sur le forum.

Pour planter le décors, je gère une liste principale que je vais appeler [Table].

Pour faire un extract de certains éléments de cette table je fais une sélection d'enregistrements en remplissant une zone de liste[ListeSelection] qui pointe un champs particulier de [Table].

De là, je voudrais faire une requête récupérant les enregistrements de [Table] correspondant aux éléments listés dans[ListeSelection].

Lorsque je paramètre le champs de ma requête en pointant sur ma zone de liste (dans critère), je ne récupère que l'enregistrement qui correspond au critère sélectionné dans ma zone de liste.
Par contre, je n'arrive pas à commander la requête pour extraire les enregistrements correspondant à tous les éléments de ma zone de liste.

Il y a surement une subtilité dans l'écriture du code à mettre dans le critère de ma requête, mais là, je cale.

Si quelqu'un peut éclairer ma lanterne, je suis preneur

Merci d'avance pour votre aide.

Cordialement
LionelDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 13h54   #2
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 238
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 238
Points : 11 025
Points : 11 025
Bonjour,

cela dépend de la propriété contenu de ta zone de liste.
Est-ce une requête ou une liste séparée par des points-virgules ?
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 14h21   #3
Invité de passage
 
Lionel PIGNIER
Inscription : décembre 2009
Messages : 18
Détails du profil
Informations personnelles :
Nom : Lionel PIGNIER

Informations forums :
Inscription : décembre 2009
Messages : 18
Points : 4
Points : 4
et bien en fait, il n'y a rien dans la propriété contenu de cette zone de liste puisque son contenu est variable.

En fait, dans mon programme, je pars d'une liste vide et en fonction des éléments que je choisi dans la liste [Table], je rempli la zone de liste[ListeSelection].

Ensuite, une fois[ListeSelection] remplie des éléments que je souhaitais sélectionner, je veux pouvoir sortir une requête qui a comme critère de filtrage tous les éléments présents dans[ListeSelection].

Le problème est que[ListeSelection] a un contenu dynamique (j'entends par là qu'il varie et n'est pas paramétré à l'avance). C'est là qu'est l'os, puisque je ne sais pas comment paramétrer ma requête pour utiliser le contenu global (c'est à dire tous les éléments) de ma zone de liste.
LionelDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 14h35   #4
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 238
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 238
Points : 11 025
Points : 11 025
Cette requête, veux-tu qu'elle soit permanente ? Ou peux-tu la construire au moment où tu connais les valeurs du contenu de ta zone de liste ?
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 14h37   #5
Invité de passage
 
Lionel PIGNIER
Inscription : décembre 2009
Messages : 18
Détails du profil
Informations personnelles :
Nom : Lionel PIGNIER

Informations forums :
Inscription : décembre 2009
Messages : 18
Points : 4
Points : 4
Et bien, je n'ai pas besoin qu'elle soit permanente.
L'idée est de pouvoir l'exporter ponctuellement.
LionelDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 14h44   #6
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 238
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 238
Points : 11 025
Points : 11 025
Donc, il suffit d'en construire le sql dès l'instant que tu connais les composantes de la zone de liste.

A l'aise avec le code ? Ou besoin d'un coup de main ?
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 14h54   #7
Invité de passage
 
Lionel PIGNIER
Inscription : décembre 2009
Messages : 18
Détails du profil
Informations personnelles :
Nom : Lionel PIGNIER

Informations forums :
Inscription : décembre 2009
Messages : 18
Points : 4
Points : 4
Besoin d'un coup de main !

Surtout pour le code SQL, parce que c'est LE point que je ne maitrise pas particulièrement dans l'exercice.
LionelDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 14h59   #8
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 238
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 238
Points : 11 025
Points : 11 025
Citation:
Lorsque je paramètre le champs de ma requête en pointant sur ma zone de liste

Poste le sql de cette requête.
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 15h24   #9
Invité de passage
 
Lionel PIGNIER
Inscription : décembre 2009
Messages : 18
Détails du profil
Informations personnelles :
Nom : Lionel PIGNIER

Informations forums :
Inscription : décembre 2009
Messages : 18
Points : 4
Points : 4
Voila le SQL de ma requête, sans le filtrage

Code :
1
2
3
4
5
6
SELECT [Table].[Serial Number], 
[Table].[Customer Rank], 
[Table].Type, 
[Table].Version, 
[Table].Customer
FROM [Table];
L'idée étant que je filtre [Table] avec les éléments de la zone de liste[ListeSelection] qui eux correspondent à certains éléments du champs [Table].[Customer Rank]

Voila
LionelDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 15h44   #10
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 238
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 238
Points : 11 025
Points : 11 025
J'attendais la requête qui fait référence au contrôle du formulaire.
J'ai besoin du nom du formulaire et du nom du contrôle zone de liste.
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 15h54   #11
Invité de passage
 
Lionel PIGNIER
Inscription : décembre 2009
Messages : 18
Détails du profil
Informations personnelles :
Nom : Lionel PIGNIER

Informations forums :
Inscription : décembre 2009
Messages : 18
Points : 4
Points : 4
Ah pardon,

Oui alors mon formulaire s'appelle [ImprimCRDebrief] et la zone de liste[ListeSelection].

Initialement, j'avais mis cette requête en SQL après le paramétrage habituel au début :
..........
WHERE ((([Table].[Customer Rank])=[Formulaires]![ImprimCRdebrief]![ListeSelection]));

Avec ce code, seul l'élément sélectionné est dans la requête. Dans mon cas, je voudrais tous les éléments de la zone de liste (si c'est possible ? )
LionelDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 16h02   #12
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 238
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 238
Points : 11 025
Points : 11 025
Quel est le type (texte, numérique, date ?) de [Customer Rank] ?
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 16h12   #13
Invité de passage
 
Lionel PIGNIER
Inscription : décembre 2009
Messages : 18
Détails du profil
Informations personnelles :
Nom : Lionel PIGNIER

Informations forums :
Inscription : décembre 2009
Messages : 18
Points : 4
Points : 4
C'est un champs texte (STRING)
LionelDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 16h54   #14
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 238
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 238
Points : 11 025
Points : 11 025
1° copie n'importe quelle requête et baptise la copie "rSouhaitee".

2° dans ton formulaire, ajoute un bouton "btConstriure"
Voici le code que tu dois associer au clic du bouton :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub BtConstruire_Click()
Dim liste() As String, i As Integer, sql As String, ClauseWhere As String, q As QueryDef
sql = "SELECT [Serial Number], [Customer Rank], [Type], [Version], [Customer] FROM [Table] WHERE "
'récupération des valeurs de la zone de liste
liste = Split(Me.ListeSelection.RowSource, ";")
'construction de la clause where
For i = 0 To UBound(liste)
   ClauseWhere = ClauseWhere & "[Customer Rank]=" & liste(i) & " or "
Next i
'Assemblage du sql final
   'suppression du dernier or
ClauseWhere = Left(ClauseWhere, Len(ClauseWhere) - 3)
   'sql + where + ";" final
sql = sql & ClauseWhere & ";"
'Adapter le sql de la requête souhaitée.
Set q = CurrentDb.QueryDefs("rSouhaitee")
q.sql = sql
Set q = Nothing
End Sub
---> ouvre la requête "rSouhaitee" pour vérifier le résultat.

Les commentaires devraient t'aider à comprendre ce qui s'y passe.
Saches aussi que si tu places le curseur au milieu d'un mot-clé et que tu enfonces <F1> l'aide Access s'ouvre à la bonne page.

Reviens si problème.

Ps quand tu auras un peu de temps lis ceci :

- conventions typographiques
Code :
http://argyronet.developpez.com/office/vba/convention/
pour les noms que tu donnes aux contrôles et objets.
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 17h24   #15
Invité de passage
 
Lionel PIGNIER
Inscription : décembre 2009
Messages : 18
Détails du profil
Informations personnelles :
Nom : Lionel PIGNIER

Informations forums :
Inscription : décembre 2009
Messages : 18
Points : 4
Points : 4
C'est presque ça !
En fait, ce code me récupère bien le contenu de la zone de liste, mais il génère une commande SQL avec des crochets [] pour les éléments de la liste alors que je pense qu'il faudrait que ce soit des guillemets " ". En effet, avec les crochets, il recherche le contrôle qui se nomme ainsi alors qu'il faut qu'il trie le contenu.

Et là, je ne sais pas comment il faut le taper en vba, au niveau de la ligne

ClauseWhere = ClauseWhere & "[Customer Rank]=" & liste(i) & " or "
LionelDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 17h35   #16
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 238
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 238
Points : 11 025
Points : 11 025
Mon code ,n'ajoute pas de crochets.
Dans "contenu" de ta zone de liste, je m'attends à trouver quelque chose comme " "a";"c" " (puisque texte). J'ai testé avant de te donner ma réponse.
Qu'as-tu dans contenu ?
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 17h45   #17
Invité de passage
 
Lionel PIGNIER
Inscription : décembre 2009
Messages : 18
Détails du profil
Informations personnelles :
Nom : Lionel PIGNIER

Informations forums :
Inscription : décembre 2009
Messages : 18
Points : 4
Points : 4
et bien lorsque je regarde le contenu de la zone liste si des éléments sont intégrés, j'ai a;b;c et non "a","b","c"

Je viens de percuter que c'est ce que tu m'a demandé au tout début.....mais en fait, je n'avais pas vu qu'on pouvais visualiser les propriétés de l'élément à chaud, pendant que le formulaire tourne....
LionelDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 18h05   #18
Rédacteur

 
Avatar de ClaudeLELOUP
 
Homme Claude LELOUP
Chercheur de loisirs (ayant trouvé !)
Inscription : novembre 2006
Messages : 5 238
Détails du profil
Informations personnelles :
Nom : Homme Claude LELOUP
Âge : 66
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de loisirs (ayant trouvé !)
Secteur : Finance

Informations forums :
Inscription : novembre 2006
Messages : 5 238
Points : 11 025
Points : 11 025
Dans ce cas, un chouia différent :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub BtConstruire_Click()
Dim liste() As String, i As Integer, sql As String, ClauseWhere As String, q As QueryDef
sql = "SELECT [Serial Number], [Customer Rank], [Type], [Version], [Customer] FROM [Table] WHERE "
'récupération des valeurs de la zone de liste
liste = Split(Me.ListeSelection.RowSource, ";")
'construction de la clause where
For i = 0 To UBound(liste)
   ClauseWhere = ClauseWhere & "[Customer Rank]=""" & liste(i) & """ or "
Next i
'Assemblage du sql final
   'suppression du dernier or
ClauseWhere = Left(ClauseWhere, Len(ClauseWhere) - 3)
   'sql + where + ";" final
sql = sql & ClauseWhere & ";"
'Adapter le sql de la requête souhaitée.
Set q = CurrentDb.QueryDefs("rSouhaitee")
q.sql = sql
Set q = Nothing
End Sub
ClaudeLELOUP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 18h41   #19
Invité de passage
 
Lionel PIGNIER
Inscription : décembre 2009
Messages : 18
Détails du profil
Informations personnelles :
Nom : Lionel PIGNIER

Informations forums :
Inscription : décembre 2009
Messages : 18
Points : 4
Points : 4
YES !!!

Ca marche nickel.

En fait, il me fallait juste un peu d'aide sur le code SQL.

Merci pour le support Claude !

C'est top.
LionelDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h28.


 
 
 
 
Partenaires

Hébergement Web