Requête SELECT entre une table et une requête existante
RésoluBiankaBo Messages postés 68 Date d'inscription Statut Membre Dernière intervention - 24 sept. 2024 à 15:33
- 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 ?
- Impossible de supprimer une page word - Guide
- Table ascii - Guide
- Table de matière word - Guide
- Google moteur de recherche page d'accueil - Guide
- Creation de site web - Guide
3 réponses
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 [07-01_GPI_SOLDE_ANN_DEM_RECH]
par
INNER ( 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 " & _ " ( 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.
Je pense que tu peux très facilement faire une ture 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.
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!