Execution de deux requêtes SELECT à la suite

Fermé
SILBA31 Messages postés 37 Date d'inscription mardi 28 avril 2015 Statut Membre Dernière intervention 27 mai 2015 - 29 avril 2015 à 09:47
SILBA31 Messages postés 37 Date d'inscription mardi 28 avril 2015 Statut Membre Dernière intervention 27 mai 2015 - 12 mai 2015 à 11:48
Bonjour,

j'utilise ACCESS 2010 et voudrais automatiser l'exécution de deux requêtes l'une à la suite de l'autre ou alors en imbriquant la seconde dans la première.
Ma première requête est:

SELECT [Architectures-besoins].Architecture, [Materiel pour architecture].ID_materiel, [Materiel pour architecture].Pondération, Materiel.Materiel
FROM Materiel INNER JOIN ([Architectures-besoins] INNER JOIN [Materiel pour architecture] ON [Architectures-besoins].Architecture = [Materiel pour architecture].Architecture) ON Materiel.ID = [Materiel pour architecture].ID_materiel
WHERE ((([Architectures-besoins].Besoin)="Automatic filling of the application"));


Ma seconde requête est une requête de tri sur le champ "pondération":

SELECT [Pour un besoin donné quel matériel est nécessaire].Pondération, [Pour un besoin donné quel matériel est nécessaire].Architecture, [Pour un besoin donné quel matériel est nécessaire].ID_materiel, [Pour un besoin donné quel matériel est nécessaire].Materiel
FROM [Pour un besoin donné quel matériel est nécessaire]
WHERE ((([Pour un besoin donné quel matériel est nécessaire].Pondération)=DMax("Pondération","Pour un besoin donné quel matériel est nécessaire")));


J'ai essayé de faire une macro:

Public Sub DoSQL()
    Dim qry1 As String
    Dim qry2 As String
 
    qry1 = "SELECT [Architectures-besoins].Architecture, [Materiel pour architecture].ID_materiel, [Materiel pour architecture].Pondération, Materiel.Materiel"
FROM Materiel INNER JOIN ([Architectures-besoins] INNER JOIN [Materiel pour architecture] ON [Architectures-besoins].Architecture = [Materiel pour architecture].Architecture) ON Materiel.ID = [Materiel pour architecture].ID_materiel
WHERE ((([Architectures-besoins].Besoin)="Automatic filling of the application"))"
 
    qry2 = "SELECT [Pour un besoin donné quel matériel est nécessaire].Pondération, [Pour un besoin donné quel matériel est nécessaire].Architecture, [Pour un besoin donné quel matériel est nécessaire].ID_materiel, [Pour un besoin donné quel matériel est nécessaire].Materiel"
FROM [Pour un besoin donné quel matériel est nécessaire]
WHERE ((([Pour un besoin donné quel matériel est nécessaire].Pondération)=DMax("Pondération","Pour un besoin donné quel matériel est nécessaire")))"
 
 
DoComd.RunSQL qry1
DoComd.RunSQL qry2
 
End Sub



Malheureusement cela ne fonctionne pas car à priori on ne peut pas exécuter une requête de sélection avec cette commande.

Si quelqu'un avait une solution simple à mettre en place ou des pistes de réflexion à me donner, je suis preneur.

merci d'avance :)

26 réponses

SILBA31 Messages postés 37 Date d'inscription mardi 28 avril 2015 Statut Membre Dernière intervention 27 mai 2015
11 mai 2015 à 14:04
Bonjour, je n'ai pas éssayé de modifier la requête en SQL, le code SQL de mon message précédent n'est là que "pour info".

J'ai procédé comme tu l'explique et malgré cela j'obtiens le message d'erreur que j'ai mentionné plus haut:

0
SILBA31 Messages postés 37 Date d'inscription mardi 28 avril 2015 Statut Membre Dernière intervention 27 mai 2015
11 mai 2015 à 14:51
Pour illustrer, voilà ce que j'ai fait mais qui ne fonctionne pas:
0
Re...
Tu ne peux pas mettre une jointure un-à-un derrière une jointure un-à-plusieurs; il faut donc que tu mettes ta jointure en un à plusieurs. Voir ma réponse précédente à SnowManXDXD : http://www.commentcamarche.net/forum/affich-31955809-fusionner-des-tableaux (tout en bas de la page)
Bonne suite
0
SILBA31 Messages postés 37 Date d'inscription mardi 28 avril 2015 Statut Membre Dernière intervention 27 mai 2015
12 mai 2015 à 09:47
Nickel, ta réponse sur l'autre poste a été très utile :)

J'ai éssayé de modifier cette requête:
SELECT Max(Materiel_Architecture.Pondération) AS MaxPondération
FROM ([Architectures-besoins] AS ab1 LEFT JOIN [Architectures-besoins] AS ab2 ON ab1.Architecture = ab2.Architecture) LEFT JOIN Materiel_Architecture ON ab2.Architecture = Materiel_Architecture.Architecture
GROUP BY ab1.Besoin, ab2.Besoin
HAVING (((ab1.Besoin) Like "*" & [Besoin1] & "*") AND ((ab2.Besoin) Like "*" & [Besoin2] & "*")) 

afin d'avoir 3 "besoins" mais sans succès. Sais-tu comment faire cela facilement?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Re...
Regarde comment procéder avec 2 et tu rajoutes un 3ème. Après tu testes et tu corriges jusqu'à ce que ça passe.
Bonne suite
0
SILBA31 Messages postés 37 Date d'inscription mardi 28 avril 2015 Statut Membre Dernière intervention 27 mai 2015
12 mai 2015 à 11:48
Salut,

j'ai fais pas mal d'essais, voilà ce que ça donne si jamais ça peut servir à d'autres:

SELECT Max(Materiel_Architecture.Pondération) AS MaxPondération
FROM ([Architectures-besoins] AS ab1 LEFT JOIN [Architectures-besoins] AS ab2 ON ab1.Architecture = ab2.Architecture) LEFT JOIN ([Architectures-besoins] AS ab3 LEFT JOIN Materiel_Architecture ON ab3.Architecture = Materiel_Architecture.Architecture) ON ab2.Architecture = ab3.Architecture
GROUP BY ab1.Besoin, ab2.Besoin, ab3.Besoin
HAVING (((ab1.Besoin) Like "*" & [Besoin1] & "*") AND ((ab2.Besoin) Like "*" & [Besoin2] & "*") AND ((ab3.Besoin) Like "*" & [Besoin3] & "*"));



Encore merci pour ton aide ;)
0