Requête SELECT entre une table et une requête existante
RésoluBiankaBo Messages postés 68 Date d'inscription lundi 16 avril 2018 Statut Membre Dernière intervention 24 septembre 2024 - 24 sept. 2024 à 15:33
- Requête SELECT entre une table et une requête existante
- Table ascii - Guide
- Table des matières word - Guide
- Oliver vend des fleurs en ligne. la base de données de son site web comporte une table nommée fleur. dans le processeur de requête sql ci-dessous, écrivez la requête pour afficher uniquement les graminées dont le prix est strictement supérieur à 10. combien y en a-t-il ? - Forum Python
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ? - Forum Access
- Nos systèmes ont détecté un trafic exceptionnel sur votre réseau informatique. cette page permet de vérifier que c'est bien vous qui envoyez des requêtes, et non un robot ✓ - Forum Virus
3 réponses
24 sept. 2024 à 12:53
bonjour,
A première vue, je dirais que tu retombes sur une limitation que tu as récemment rencontrée:
Tu ne peux pas utiliser en VBA une requête qui utilise des données d'un formulaire.
Je n'ai pas (encore) essayé de comprendre ta logique globale. Je ne sais donc pas si tu es sur la bonne voie.
Supposant que tu es sur la bonne voie, tu peux continuer en remplaçant, dans ta requête B,
INNER JOIN [07-01_GPI_SOLDE_ANN_DEM_RECH]
par
INNER JOIN ( SELECT dbo_GPM_N_FACT.ECO, dbo_GPM_N_FACT.EMPR, dbo_GPM_N_FACT.ANNEE, Sum(dbo_GPM_N_FACT.SOLDE) AS SommeDeSOLDE, dbo_GPM_N_FACT.STATUT_FACT, [EMPR]+0 AS EMPR2 FROM dbo_GPM_N_FACT GROUP BY dbo_GPM_N_FACT.ECO, dbo_GPM_N_FACT.EMPR, dbo_GPM_N_FACT.ANNEE, dbo_GPM_N_FACT.STATUT_FACT, [EMPR]+0 HAVING (((dbo_GPM_N_FACT.ECO)=[Forms]![03-B1_Ajout_Creance_GPI].[Texte33]) AND ((dbo_GPM_N_FACT.ANNEE)=[Forms]![03-B1_Ajout_Creance_GPI].[Texte14]) AND ((Sum(dbo_GPM_N_FACT.SOLDE))>0) AND ((dbo_GPM_N_FACT.STATUT_FACT)<>"X")) ) AS [07-01_GPI_SOLDE_ANN_DEM_RECH]
Ce qui donne, je pense,
SqlD = "SELECT [dbo_GPM_E_ELE_DOSSIER].[FICHE], [07-01_GPI_SOLDE_ANN_DEM_RECH].[EMPR], [dbo_GPM_E_ELE_DOSSIER].[NOM], [dbo_GPM_E_ELE_DOSSIER].[PNOM], [07-01_GPI_SOLDE_ANN_DEM_RECH].[ANNEE], [07-01_GPI_SOLDE_ANN_DEM_RECH].[SommeDeSOLDE]" & _ " FROM [dbo_GPM_E_ELE_DOSSIER] INNER JOIN " & _ " ( SELECT dbo_GPM_N_FACT.ECO, dbo_GPM_N_FACT.EMPR, dbo_GPM_N_FACT.ANNEE, Sum(dbo_GPM_N_FACT.SOLDE) AS SommeDeSOLDE, dbo_GPM_N_FACT.STATUT_FACT, [EMPR]+0 AS EMPR2 " & _ " FROM dbo_GPM_N_FACT " & _ " GROUP BY dbo_GPM_N_FACT.ECO, dbo_GPM_N_FACT.EMPR, dbo_GPM_N_FACT.ANNEE, dbo_GPM_N_FACT.STATUT_FACT, [EMPR]+0 " & _ " HAVING (((dbo_GPM_N_FACT.ECO)=[Forms]![03-B1_Ajout_Creance_GPI].[Texte33]) " & _ " AND ((dbo_GPM_N_FACT.ANNEE)=[Forms]![03-B1_Ajout_Creance_GPI].[Texte14]) " & _ " AND ((Sum(dbo_GPM_N_FACT.SOLDE))>0) AND ((dbo_GPM_N_FACT.STATUT_FACT)<>"X")) ) " & _ " as [07-01_GPI_SOLDE_ANN_DEM_RECH] ON [dbo_GPM_E_ELE_DOSSIER].[FICHE] = [07-01_GPI_SOLDE_ANN_DEM_RECH].[EMPR2]" & _ " WHERE ((([07-01_GPI_SOLDE_ANN_DEM_RECH].[EMPR]) " & strRechRef & ") AND (([dbo_GPM_E_ELE_DOSSIER].[NOM]) " & strRechNom & ") AND (([dbo_GPM_E_ELE_DOSSIER].[PNOM]) " & strRechPNom & "));"
Ensuite, tu dois utiliser la technique que tu connais bien pour "sortir" les deux utilisations du formulaire de la requête SQL, et les évaluer en VBA.
.
J'essaie de comprendre ce que tu veux réaliser, afin de voir si il n'est pas possible de faire tout cela plus simplement.
Modifié le 24 sept. 2024 à 13:12
Je pense que tu peux très facilement faire une jointure entre les deux tables, sans toucher au contenu des tables:
SELECT bnkb_empr.EMPR, bnkb_fiche.FICHE FROM bnkb_empr , bnkb_fiche where [EMPR]+0=FICHE;
Cependant, je pense que cela ne va pas réellement t'aider, comme ton problème, c'est l'utilisation des champs du formulaire.
Peut-être cela va t'il t'aider à simplifier tes requêtes.
24 sept. 2024 à 15:33
Ouiiiiiiiiiiiiii!!!! C'est exactement ce dont j'avais besoin!
Ça fonctionne à la perfection!
Tu es excellent!! Tu as parfaitement cerné ma demande!
Je savais qu'on pouvait faire ça plus simple et je savais également que je m'engageait dans un chemin connu que j'ai de la difficulté à comprendre, alors je suis extrêmement contente de ta réponse.
J'ai donc testé à petite échelle ta condition WHERE proposée ci-dessus et une fois que j'ai constaté que tout fonctionnait comme il le fallait, j'ai ajouté les autres colonnes avec leurs conditions. Ça s'est donc transformé en HAVING, mais c'est exactement la formule qui répond à mon besoin! Voici donc mon code SQL final:
SqlD = "SELECT [dbo_GPM_N_FACT].[EMPR], [dbo_GPM_E_ELE_DOSSIER].[FICHE], [dbo_GPM_E_ELE_DOSSIER].[NOM], [dbo_GPM_E_ELE_DOSSIER].[PNOM], " & _ "[dbo_GPM_N_FACT].[ECO], [dbo_GPM_N_FACT].[ANNEE], Sum([dbo_GPM_N_FACT].[SOLDE]) AS [SommeDeSOLDE], [dbo_GPM_N_FACT].[STATUT_FACT]" & _ " FROM [dbo_GPM_N_FACT], [dbo_GPM_E_ELE_DOSSIER]" & _ " GROUP BY [dbo_GPM_N_FACT].[EMPR], [dbo_GPM_E_ELE_DOSSIER].[FICHE], [EMPR]+0, [dbo_GPM_E_ELE_DOSSIER].[NOM], " & _ "[dbo_GPM_E_ELE_DOSSIER].[PNOM], [dbo_GPM_N_FACT].[ECO], [dbo_GPM_N_FACT].[ANNEE], [dbo_GPM_N_FACT].[STATUT_FACT]" & _ " HAVING ((([dbo_GPM_N_FACT].[EMPR]) " & strRechRef & ") AND (([EMPR]+0)=[FICHE]) AND (([dbo_GPM_E_ELE_DOSSIER].[NOM]) " & strRechNom & ") " & _ "AND (([dbo_GPM_E_ELE_DOSSIER].[PNOM]) " & strRechPNom & " ) AND (([dbo_GPM_N_FACT].[ECO])='" + CStr([Forms]![03-B1_Ajout_Creance_GPI].[Texte33]) + "') AND (([dbo_GPM_N_FACT].[ANNEE])=" + CStr([Forms]![03-B1_Ajout_Creance_GPI].[Texte14]) + ") AND " & _ "((Sum([dbo_GPM_N_FACT].[SOLDE]))>0) AND (([dbo_GPM_N_FACT].[STATUT_FACT])<>'X'));"
Merci énormément pour ta rapidité et ton talent!
Bonne journée!