bonjour,
j'ai un problème avec des requetes imbriqués.
mon but est le suivant: j'ai des enregistrements avec plusieur données stokées dans plusieurs tables.
je désire trié mes enregistrements a l'aide d'un formulaire ça marche en calculant ma requete en VBA.
ensuite j'affiche le résultat dans un état.
dans un cas d'affichage ça me pose un problème, il faut que je compte le nombre d'enregistrement par client et sur l'état je classe l'ensemble grace à ce chiffre le tout en fonction du trie selectionné.
j'avais créé hors Vba une requete reference croisée qui me permettait de connaitre le nombre d'enregistrement correspondant aux clients mais elle ne tenait pas compte du trie. donc il faut que je l'imbrique dans ma requete VBA pour avoir les bonnes valeurs.
aprés plusieurs tentative j'ai réussi l'imbrication en la testant dabord en SQl avec la clause where tel quelle peux etre calculé:
(en vert la requete qui compte, en rouge la requete de trie sur laquelle est basé le tri)
ça fonctionne, donc je voudrait la mettre dans VBa pour pouvoir calculer comme avant ma clause where. mais je ne parviens pas à la faire fonctionner tel qu'elle est là :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SELECT Activité.Code_a, Activité.Code_p, Activité.Code_t, Activité.Date_a, Activité.tps_H_a, Activité.tps_M_a, Activité.code_prod, Activité.code_l_prod, Activité.commentaire_a, Activité.lieu_a, Code_travail.Intitule, Listing_producteur.CANTON, Listing_producteur.[NOM PROD MEMBRES], Listing_producteur.[ADR PROD VILLE], Personnel.Nom_p, Personnel.Prenom_p, Listing_producteur.TITRE, Listing_producteur.[NOM SOCIETE], TAB_B.[Total de Code_a] FROM ((Personnel RIGHT JOIN ((Code_travail RIGHT JOIN Activité ON Code_travail.code_T = Activité.Code_t) LEFT JOIN Listing_producteur ON (Activité.code_l_prod = Listing_producteur.num_l_prod) AND (Activité.code_prod = Listing_producteur.[CODE PROD])) ON Personnel.Code_p = Activité.Code_p) LEFT JOIN (SELECT TAB_A.code_l_prod, Count(TAB_A.Code_a) AS [Total de Code_a] FROM ( SELECT Activité.Code_a, Activité.Code_p, Activité.Code_t, Activité.Date_a, Activité.tps_H_a, Activité.tps_M_a, Activité.code_prod, Activité.code_l_prod, Activité.commentaire_a, Activité.lieu_a, Code_travail.Intitule, Listing_producteur.CANTON, Listing_producteur.[NOM PROD MEMBRES], Listing_producteur.[ADR PROD VILLE], Personnel.Nom_p, Personnel.Prenom_p, Listing_producteur.TITRE, Listing_producteur.[NOM SOCIETE] FROM (Personnel RIGHT JOIN (((Code_travail RIGHT JOIN Activité ON Code_travail.code_T = Activité.Code_t) LEFT JOIN detail_activite ON Activité.Code_a = detail_activite.code_a) LEFT JOIN Listing_producteur ON (Activité.code_l_prod = Listing_producteur.num_l_prod) AND (Activité.code_prod = Listing_producteur.[CODE PROD])) ON Personnel.Code_p = Activité.Code_p) WHERE ((Activité.code_p=3) And (Activité.Date_a Is Null Or Activité.Date_a Is Not Null) And (Activité.lieu_a="Divers") And (Activité.code_t Is Null Or Activité.code_t Is Not Null) And (detail_activite.detail_da Is Null Or detail_activite.detail_da Is Not Null) And (Activité.code_l_prod Is Null Or Activité.code_l_prod Is Not Null)And (Listing_producteur.AGRICONF Is Null Or Listing_producteur.AGRICONF Is Not Null) And (Listing_producteur.TSE Is Null Or Listing_producteur.TSE Is Not Null)) GROUP BY Activité.Code_a, Activité.Code_p, Activité.Code_t, Activité.Date_a, Activité.tps_H_a, Activité.tps_M_a, Activité.code_prod, Activité.code_l_prod, Activité.commentaire_a, Activité.lieu_a, Code_travail.Intitule, Listing_producteur.CANTON, Listing_producteur.[NOM PROD MEMBRES], Listing_producteur.[ADR PROD VILLE], Personnel.Nom_p, Personnel.Prenom_p, Listing_producteur.TITRE, Listing_producteur.[NOM SOCIETE]) AS TAB_A GROUP BY TAB_A.code_l_prod) AS TAB_B ON Activité.code_l_prod = TAB_B.code_l_prod) LEFT JOIN detail_activite ON Activité.Code_a = detail_activite.code_a WHERE (((Activité.Code_p)=3) AND ((Activité.Date_a) Is Null Or (Activité.Date_a) Is Not Null) AND ((Activité.lieu_a)="Divers") AND ((Activité.Code_t) Is Null Or (Activité.Code_t) Is Not Null) AND ((detail_activite.detail_da) Is Null Or (detail_activite.detail_da) Is Not Null) AND ((Activité.code_l_prod) Is Null Or (Activité.code_l_prod) Is Not Null) AND ((Listing_producteur.AGRICONF) Is Null Or (Listing_producteur.AGRICONF) Is Not Null) AND ((Listing_producteur.TSE) Is Null Or (Listing_producteur.TSE) Is Not Null)) GROUP BY Activité.Code_a, Activité.Code_p, Activité.Code_t, Activité.Date_a, Activité.tps_H_a, Activité.tps_M_a, Activité.code_prod, Activité.code_l_prod, Activité.commentaire_a, Activité.lieu_a, Code_travail.Intitule, Listing_producteur.CANTON, Listing_producteur.[NOM PROD MEMBRES], Listing_producteur.[ADR PROD VILLE], Personnel.Nom_p, Personnel.Prenom_p, Listing_producteur.TITRE, Listing_producteur.[NOM SOCIETE], TAB_B.[Total de Code_a];
ça fait l'erreur suivante "expression de jointure non suportée"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SQL = "SELECT Activité.Code_a, Activité.Code_p, Activité.Code_t, Activité.Date_a, Activité.tps_H_a, Activité.tps_M_a, Activité.code_prod, Activité.code_l_prod, Activité.commentaire_a, Activité.lieu_a, Code_travail.Intitule, Listing_producteur.CANTON, Listing_producteur.[NOM PROD MEMBRES], Listing_producteur.[ADR PROD VILLE], Personnel.Nom_p, Personnel.Prenom_p, Listing_producteur.TITRE, Listing_producteur.[NOM SOCIETE], TAB_B.[Total de Code_a]" SQL = SQL & "FROM ((Personnel RIGHT JOIN ((Code_travail RIGHT JOIN Activité ON Code_travail.code_T = Activité.Code_t) LEFT JOIN Listing_producteur ON (Activité.code_l_prod = Listing_producteur.num_l_prod) AND (Activité.code_prod = Listing_producteur.[CODE PROD])) ON Personnel.Code_p = Activité.Code_p) LEFT JOIN (SELECT TAB_A.code_l_prod, Count(TAB_A.Code_a) AS [Total de Code_a]" SQL = SQL & "FROM (SELECT Activité.Code_a, Activité.Code_p, Activité.Code_t, Activité.Date_a, Activité.tps_H_a, Activité.tps_M_a, Activité.code_prod, Activité.code_l_prod, Activité.commentaire_a, Activité.lieu_a, Code_travail.Intitule, Listing_producteur.CANTON, Listing_producteur.[NOM PROD MEMBRES], Listing_producteur.[ADR PROD VILLE], Personnel.Nom_p, Personnel.Prenom_p, Listing_producteur.TITRE, Listing_producteur.[NOM SOCIETE]" SQL = SQL & "FROM (Personnel RIGHT JOIN (((Code_travail RIGHT JOIN Activité ON Code_travail.code_T = Activité.Code_t) LEFT JOIN detail_activite ON Activité.Code_a = detail_activite.code_a) LEFT JOIN Listing_producteur ON (Activité.code_l_prod = Listing_producteur.num_l_prod) AND (Activité.code_prod = Listing_producteur.[CODE PROD])) ON Personnel.Code_p = Activité.Code_p)" SQL = SQL & "WHERE ((Activité.Code_p = 3) And (Activité.Date_a Is Null Or Activité.Date_a Is Not Null) And (Activité.lieu_a = 'Divers') And (Activité.Code_t Is Null Or Activité.Code_t Is Not Null) And (detail_activite.detail_da Is Null Or detail_activite.detail_da Is Not Null) And (Activité.code_l_prod Is Null Or Activité.code_l_prod Is Not Null) And (Listing_producteur.AGRICONF Is Null Or Listing_producteur.AGRICONF Is Not Null) And (Listing_producteur.TSE Is Null Or Listing_producteur.TSE Is Not Null))" SQL = SQL & "GROUP BY Activité.Code_a, Activité.Code_p, Activité.Code_t, Activité.Date_a, Activité.tps_H_a, Activité.tps_M_a, Activité.code_prod, Activité.code_l_prod, Activité.commentaire_a, Activité.lieu_a, Code_travail.Intitule, Listing_producteur.CANTON, Listing_producteur.[NOM PROD MEMBRES], Listing_producteur.[ADR PROD VILLE], Personnel.Nom_p, Personnel.Prenom_p, Listing_producteur.TITRE, Listing_producteur.[NOM SOCIETE])AS TAB_A" SQL = SQL & "GROUP BY TAB_A.code_l_prod) AS TAB_B ON Activité.code_l_prod = TAB_B.code_l_prod) LEFT JOIN detail_activite ON Activité.Code_a = detail_activite.code_a" SQL = SQL & "WHERE (((Activité.Code_p) = 3) And ((Activité.Date_a) Is Null Or (Activité.Date_a) Is Not Null) And ((Activité.lieu_a) = 'Divers') And ((Activité.Code_t) Is Null Or (Activité.Code_t) Is Not Null) And ((detail_activite.detail_da) Is Null Or (detail_activite.detail_da) Is Not Null) And ((Activité.code_l_prod) Is Null Or (Activité.code_l_prod) Is Not Null) And ((Listing_producteur.AGRICONF) Is Null Or (Listing_producteur.AGRICONF) Is Not Null) And ((Listing_producteur.TSE) Is Null Or (Listing_producteur.TSE) Is Not Null))" SQL = SQL & "GROUP BY Activité.Code_a, Activité.Code_p, Activité.Code_t, Activité.Date_a, Activité.tps_H_a, Activité.tps_M_a, Activité.code_prod, Activité.code_l_prod, Activité.commentaire_a, Activité.lieu_a, Code_travail.Intitule, Listing_producteur.CANTON, Listing_producteur.[NOM PROD MEMBRES], Listing_producteur.[ADR PROD VILLE], Personnel.Nom_p, Personnel.Prenom_p, Listing_producteur.TITRE, Listing_producteur.[NOM SOCIETE], TAB_B.[Total de Code_a];" Report.RecordSource = SQL
pourquoi la requete dans access fonctionne bien et qu'elle ne fonctionne pas en Vba
J'ai surement fait une erreur mais laquelle?
merci d'avance pour votre aide
Partager