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 15/02/2011, 20h38   #1
Nouveau Membre du Club
 
Inscription : janvier 2009
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 130
Points : 29
Points : 29
Par défaut Requête SQL et liste box

Bonsoir,

Je dispose d'une série de trois requête effectué dans trois tables différentes mais de même structure. Comment joindre les résultats dans un même listebox.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
strSql = "Select DISTINCTROW " & " Employé, Types, Jour_1, Horaires_1, Jour_2, Horaires_2, " & SourceTable & ".* FROM " & SourceTable & " WHERE [...]
 
Me.Enregistrement_liste_1.RowSource = strSql
Me.Enregistrement_liste_1.Requery
 
strSql = "Select DISTINCTROW " & " Employé, Types, Jour_1, Horaires_1, Jour_2, Horaires_2, " & SourceTable_3 & ".* FROM " & SourceTable & " WHERE [...]
 
Me.Enregistrement_liste_2.RowSource = strSql
Me.Enregistrement_liste_2.Requery
 
strSql = "Select DISTINCTROW " & " Employé, Types, Jour_1, Horaires_1, Jour_2, Horaires_2, " & SourceTable_2 & ".* FROM " & SourceTable & " WHERE [...] 
 
Me.Enregistrement_liste_3.RowSource = strSql
Me.Enregistrement_liste_3.Requery
Très cordialement
fisio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 20h55   #2
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 410
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 410
Points : 4 439
Points : 4 439
bonsoir fisio,

si je comprends bien tu as besoin de combiner les résultats de plusieurs requêtes sélection à l'aide d'une requête union

je note également que tu emploies l'opérateur DISTINCTROW, or:
Citation:
...DISTINCTROW est ignorée si votre requête n'inclut qu'une seule table,
autant l'enlever dans ce cas...
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 21h52   #3
Nouveau Membre du Club
 
Inscription : janvier 2009
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 130
Points : 29
Points : 29
Merci,

Mais quelle syntaxe employer avec UNION ?
fisio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 23h18   #4
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 254
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant/développeur ERP
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 1 254
Points : 1 870
Points : 1 870
Bonsoir,

Par défaut UNION évite de dupliquer les lignes identiques (sauf s'il est suivi de ALL)
Il suffit donc de mettre les 3 requetes bout à bout :
Code :
1
2
3
4
5
6
select a,b,c from t1 (where ...)
union
select d,e,f from t2 (where ...)
union
select g,h,i from t3 (where ...)
order by 1,2,3
les noms de champ par défaut sont ceux du 1er select (a,b,c)
la seule condition est que les champs d'une même colonne soient de même nature
nico84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 04h14   #5
Nouveau Membre du Club
 
Inscription : janvier 2009
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 130
Points : 29
Points : 29
Très bien une dernière question cependant. Comment ce code s'exprime en VBA comme dans le code d'origine.

Code :
1
2
3
4
5
 
strSql = "Select " & " Employé,[...], " & SourceTable & ".* FROM " & SourceTable & " WHERE (([...])) UNION Select " & " Employé,[...], " & SourceTable & ".* FROM " & SourceTable & " WHERE (([...]));"
 
Me.Enregistrement_liste_1.RowSource = strSql
Me.Enregistrement_liste_1.Requery
fisio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 13h55   #6
Nouveau Membre du Club
 
Inscription : janvier 2009
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 130
Points : 29
Points : 29
Ok le code fonctionne correctement. Cependant comment obtenir des entêtes de colonnes de la liste-box reprenant les légendes des champs. Ces derniers sont actuellement nommés par le nom de la table suivi du nom du champ.

Merci
fisio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 14h14   #7
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour,
Il suffit de mettre un alias AS ...
Ici :
Code :
1
2
 
strSql = "Select " & " Employé AS ... ,[...] AS ..., " & SourceTable & ".<champ xx> as ...,  FROM " & SourceTable & " WHERE (([...])) UNION Select " & " Employé,[...], " & SourceTable & ".* FROM " & SourceTable & " WHERE (([...]));"
Nota1 : L'alias ne marche pas pour un '*', en effet un alias ne marche que pour un champ unique

Nota2 : pour une requete Union, mets bien les mêmes alias au même endroit en respectant le même ordre des champs
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 23h35   #8
Nouveau Membre du Club
 
Inscription : janvier 2009
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 130
Points : 29
Points : 29
un grand merci. enfin comment puis ordonner le classement selon un champ?
fisio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 00h07   #9
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Normalement, c'est la clause ORDER BY
Attention cependant. Dans le cas d'une requête UNION, l'ORDER BY ne fonctionnera pas.
La seule solution sera de passer par une requête qui prendra la requete UNION comme source ... difficilement compatible avec un code VBA sauf si tu arrive à le construire de cette manière là :
Code :
1
2
3
4
5
6
7
8
9
 
SELECT T_UNION.a, T_UNION.b, T_UNION.c FROM
(select a,b,c from t1 (where ...)
union
select d,e,f from t2 (where ...)
union
select g,h,i from t3 (where ...)
) T_UNION
order by a,b,c
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 19h40   #10
Nouveau Membre du Club
 
Inscription : janvier 2009
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 130
Points : 29
Points : 29
J'ai une question concernant les intitulés des colonnes de la listebox :

Ce que j'ai compris c'est que lors des associations de requête avec la formule UNION les précisions AS ne se positionne que sur la première requête suivi de : .<champ xx> as ... Comment peut on expliquer ce : ".<champ xx> as ..."

Code :
1
2
3
strSql = "Select " & " Employé AS Employé, Types AS Types, Jour_1 AS Date de début, Horaires_1 AS Heure de début, Jour_2 AS Date de fin, Horaires_2 AS Heure de fin, " & SourceTable & ".* FROM " & SourceTable & " WHERE  ((N° <> N°.Value And Validation = '" & 1 & "' And Jh_1 >= Jh_3.Value And Jh_1 < Jh_4.value)or(N° <> '" & N°.Value & "' And Validation = '" & 1 & "' And Jh_2 <= Jh_2.Value And Jh_2 > Jh_1.value)); " _
    & "UNION " _
    & "Select " & " Employé, Types, Jour_1, Horaires_1, Jour_2, Horaires_2, " & SourceTable3 & ".* FROM " & SourceTable3 & " WHERE  ((N° <> N°.Value And Validation = '" & 1 & "' And Jh_1 >= Jh_3.Value And Jh_1 < Jh_4.value)or(N° <> '" & N°.Value & "' And Validation = '" & 1 & "' And Jh_2 <= Jh_2.Value And Jh_2 > Jh_1.value));"
fisio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 19h44   #11
Nouveau Membre du Club
 
Inscription : janvier 2009
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 130
Points : 29
Points : 29
Pour le by order comment peut on envisager un tri au sein même des tables différent de la clef primaire.
fisio est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 22h16   #12
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Citation:
Ce que j'ai compris c'est que lors des associations de requête avec la formule UNION les précisions AS ne se positionne que sur la première requête suivi de : .<champ xx> as ... Comment peut on expliquer ce : ".<champ xx> as ..."
Qu'entends-tu par la ?
Citation:
Pour le by order comment peut on envisager un tri au sein même des tables différent de la clef primaire.
Je ne comprends pas bien la question. Dans un SQL, on peut trier sur n'importe quelle colonne.
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/02/2011, 11h54   #13
Membre Expert
 
Avatar de nico84
 
Homme Nicolas Guimbal
Consultant/développeur ERP
Inscription : mai 2008
Messages : 1 254
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Guimbal
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant/développeur ERP
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 1 254
Points : 1 870
Points : 1 870
Pour info (tardive), Order by est possible dans une requête union à condition d'utiliser les n° de colonne (ce qui est aussi possible dans une requete simple d'ailleurs).

Cf mon post précédent
nico84 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 13h39.


 
 
 
 
Partenaires

Hébergement Web