Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
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 09/03/2011, 19h34   #1
Futur Membre du Club
 
Olivier Dugas
Inscription : juin 2009
Messages : 24
Détails du profil
Informations personnelles :
Nom : Olivier Dugas
Âge : 23
Localisation : Canada

Informations forums :
Inscription : juin 2009
Messages : 24
Points : 17
Points : 17
Envoyer un message via MSN à SpyKe974
Par défaut sous requête avec UNION

Bonjour.
J'ai tenté d'effectuer une belle requête qui échouait. Bin quoi? Ça peut arriver à tout le monde !

J'ai donc découpé ma requête en sous requêtes qui créaient des tables temporaires. Voici en gros le code. des sous requêtes. (Elle s'effectuent avec succès.)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
sql = ""
sql = sql & "SELECT "
sql = sql & "fdbase.champ1 AS 'Funds',"
sql = sql & "SUM(podmst.champ2*iftchg.champ3) AS 'MV',"
sql = sql & "pohmst.champ4 AS 'PortfDate' "
sql = sql & "INTO #soustable1 "
sql = sql & "FROM "
sql = sql & "podmst, pohmst, fdbase, iftchg "
sql = sql & "WHERE "
sql = sql & "(blah=blah') AND "
...
sql = sql & "(blah = (SELECT MAX(blah) FROM iftchg)) AND "
sql = sql & "(blah = blah) "
sql = sql & "GROUP BY(fdbase.champ1), (pohmst.champ4) "
sql = sql & "ORDER BY(fdbase.champ1)"
con.Execute sql
La seconde sous requête fonctionne tout aussi bien. elle est très semblables ET le nom des sous champs sont les mêmes que la première soustable1 :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
sql = ""
sql = sql & "SELECT "
sql = sql & "fdbase.champ1 'Funds',"
sql = sql & "SUM(podmst.champ2) AS 'MV',"
sql = sql & "pohmst.champ4 AS 'PortfDate' "
sql = sql & "INTO #soustable2 "
sql = sql & "FROM "
sql = sql & "podmst,pohmst,fdbase "
sql = sql & "WHERE "
...
con.Execute sql
Donc, ces deux sous-tables sont créées et contiennent les données désirées et les mêmes noms de champs, le même format bien entendu.

Je veux faire une union. Ca aussi ca marche.

Citation:
(SELECT * FROM #soustable1
UNION
SELECT * FROM #soustable2)
Toutefois, ce que je veux faire, c'est :
Lorsuqe le champ1 (Funds) est le même, fusionner les enregistrements en sommant le deuxième champ (MV) comme suit :

Code :
1
2
3
4
5
6
7
8
 
SELECT merged.Funds, Sum(merged.MV), merged.PortfDate
FROM
(SELECT * FROM #soustable1
UNION
SELECT * FROM #soustable2) As merged 
WHERE merged.Funds IN (UnelistedeFundsQuiExiste)
GROUP BY merged.Funds, merged.PortfDate
j'ai tenté de remplacer la première ligne par SELECT *.
même problème, lorsque je passe par vba je recois une error odbc, si je passe directement par une requête dans la base de données Access m'indique que j'ai une syntaxe invalide dans mon FROM (comme si l'union était invalide, mais pourtant l'union isolée fonctionne parfaitement).

Quelqu'un peut m'aider?

Merci beaucoup
SpyKe974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2011, 10h58   #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
bonjour,

j'ai testé cette syntaxe sur un exemple similaire qui me semblait valide. Et elle fonctionne

et puis , j'ai rajouté le symbole 'dièse' (#) devant le nom de ma table :
==>erreur de syntaxe dans la clause FROM.

==>essayer en mettant le nom de la table entre crochets []:

Code sql :
1
2
3
4
5
6
7
8
SELECT merged.Funds, Sum(merged.MV), merged.PortfDate
FROM
(SELECT * FROM [#soustable1]
UNION
SELECT * FROM [#soustable2]) As merged 
WHERE merged.Funds IN (UnelistedeFundsQuiExiste)
GROUP BY merged.Funds, merged.PortfDate
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/03/2011, 14h44   #3
Futur Membre du Club
 
Olivier Dugas
Inscription : juin 2009
Messages : 24
Détails du profil
Informations personnelles :
Nom : Olivier Dugas
Âge : 23
Localisation : Canada

Informations forums :
Inscription : juin 2009
Messages : 24
Points : 17
Points : 17
Envoyer un message via MSN à SpyKe974
Bonjour f-leb

Merci pour ta réponse. Malheureusement, ça ne fonctionne toujours pas.
J'ai décidé de contourner le problème en ne faisant que l'union, puis en modifiant les résultats avec du vba.

moi aussi, la syntaxe me semble parfaitement correcte... Peut-être en rapport avec access 97 et les tables temporaires (#) ?

Je ne sais pas.
Merci encore d'avoir mis du temps pour ça.

Problème contourné.
SpyKe974 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 18h21.


 
 
 
 
Partenaires

Hébergement Web