Codes SQL multiples imbriqués dans Access en vba

Résolu
BiankaBo Messages postés 71 Date d'inscription   Statut Membre Dernière intervention   -  
BiankaBo Messages postés 71 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour à vous,

J'aurais besoin de votre expertise.

Je tente d'imbriquer des 5 codes SQL ensemble le plus proprement possible.

Ces codes sont valides lorsque j'exécute mes requêtes dans Access par l'assistant et la requête finale "sqlAJ" fonctionne bien à ce niveau.

J'ai toutefois besoin de parcourir ma requête finale "sqlAJ"  en vba pour y trouver les données souhaitées, ce qui me force à devoir les écrire manuellement pour ouvrir un recordset "enrAJRecl". Lorsque j'exécute mon code, j'obtiens l'erreur suivante sur la ligne 41 du code :

Erreur d'exécution '3061' : Trop peu de paramètres. 8 attendus.

J'ai peut-être mal imbriqué mes requêtes dans mes codes. Pouvez-vous m'aider s'il vous plaît?

Voici mes codes :

Dim enrAJRecl As DAO.Recordset 'Recordset du SQL des réclamations à traiter sqlAJ
Dim strSqlENC As String 'Requête du sommaire des enc ajustement
Dim strSqlFAC As String ''Requête du sommaire des fac ajustement
Dim strSqlReclAJ As String 'Requête du sommaire des réclamations à traiter, incomplet
Dim strSqlSGpi As String ' Requête du sommaire GPI global
Dim sqlAJ As String 'Requête SQL comparative finale des réclamations à traiter


'Inscription et imbriquement des codes SQL
strSqlENC = "SELECT [13-AJUSTEMENTS].[LienRecl13], [13-AJUSTEMENTS].[TypeAjust], Sum([13-AJUSTEMENTS].[MontAjust]) AS [SommeDeMontAjust]" & _
"FROM [13-AJUSTEMENTS]" & _
"GROUP BY [13-AJUSTEMENTS].[LienRecl13], [13-AJUSTEMENTS].[TypeAjust]" & _
"HAVING ((([13-AJUSTEMENTS].[TypeAjust])='ENC'))"

strSqlFAC = "SELECT [13-AJUSTEMENTS].[LienRecl13], [13-AJUSTEMENTS].[TypeAjust], Sum([13-AJUSTEMENTS].[MontAjust]) AS [SommeDeMontAjust]" & _
"FROM [13-AJUSTEMENTS]" & _
"GROUP BY [13-AJUSTEMENTS].[LienRecl13], [13-AJUSTEMENTS].[TypeAjust]" & _
"HAVING ((([13-AJUSTEMENTS].[TypeAjust])='FAC'))"

strSqlReclAJ = "SELECT [11-RECLAMATIONS].[NoReclamation], [11-RECLAMATIONS].[NumSérie11], [11-RECLAMATIONS].[MiseAJour], [11-RECLAMATIONS].[SystemeRecl]," & _
" [11-RECLAMATIONS].[MFactInitRecl], [11-RECLAMATIONS].[EncInitRecl], [11-RECLAMATIONS].[SoldeInitRecl], [05-FN1-SF2_RECL_ENC_SOM].[SommeDeMontAjust]," & _
" [05-FN1-SF3_RECL_FAC_SOM].[SommeDeMontAjust], IIf([05-FN1-SF2_RECL_ENC_SOM].[SommeDeMontAjust]<>0 Or [05-FN1-SF2_RECL_ENC_SOM].[SommeDeMontAjust]<>'',[05-FN1-SF2_RECL_ENC_SOM].[SommeDeMontAjust],0) AS [SAEnc]," & _
" IIf([05-FN1-SF3_RECL_FAC_SOM].[SommeDeMontAjust]<>0 Or [05-FN1-SF3_RECL_FAC_SOM].[SommeDeMontAjust]<>'',[05-FN1-SF3_RECL_FAC_SOM].[SommeDeMontAjust],0) AS [SAFac]," & _
" [MFactInitRecl]+[SAFac] AS [FacAct], [EncInitRecl]+[SAEnc] AS [EncAct], [SoldeInitRecl]+[SAFac]-[SAEnc] AS [SldAct]" & _
"FROM ([11-RECLAMATIONS] LEFT JOIN (" & strSqlFAC & ") AS [05-FN1-SF3_RECL_FAC_SOM] ON [11-RECLAMATIONS].[NoReclamation] = [05-FN1-SF3_RECL_FAC_SOM].[LienRecl13])" & _
" LEFT JOIN (" & strSqlENC & ") AS [05-FN1-SF2_RECL_ENC_SOM] ON [11-RECLAMATIONS].[NoReclamation] = [05-FN1-SF2_RECL_ENC_SOM].[LienRecl13]" & _
"WHERE ((([11-RECLAMATIONS].[MiseAJour])=True) AND (([11-RECLAMATIONS].[SystemeRecl])='GPI'))"

strSqlSGpi = "SELECT 'GPI-' & [ECO] & '-' & [ANNEE] & '-' & [EMPR] AS [NumSer], Sum([dbo_GPM_N_FACT].[MNT_A_PAYER]) AS [FacReel]," & _
" Sum([MNT_A_PAYER]-[SOLDE]) AS [EncReel], Sum([dbo_GPM_N_FACT].[SOLDE]) AS [SldReel]" & _
"FROM [dbo_GPM_N_FACT]" & _
"GROUP BY 'GPI-' & [ECO] & '-' & [ANNEE] & '-' & [EMPR]"

sqlAJ = "SELECT [Copie de 05-FN3_MAJ_MASS_GPI].[NumSer], [Copie de 05-FN3_MAJ_MASS_RECL].[FacAct], [Copie de 05-FN3_MAJ_MASS_GPI].[FacReel]," & _
" [FacReel]-[FacAct] AS [VFac], [Copie de 05-FN3_MAJ_MASS_RECL].[EncAct], [Copie de 05-FN3_MAJ_MASS_GPI].[EncReel], [EncReel]-[EncAct] AS [VEnc]," & _
" [Copie de 05-FN3_MAJ_MASS_RECL].[SldAct], [Copie de 05-FN3_MAJ_MASS_GPI].[SldReel], [SldReel]-[SldAct] AS [VSld], [Copie de 05-FN3_MAJ_MASS_RECL].[NoReclamation]" & _
"FROM (" & strSqlSGpi & ") AS [Copie de 05-FN3_MAJ_MASS_RECL], (" & strSqlReclAJ & ") AS [Copie de 05-FN3_MAJ_MASS_GPI]" & _
"WHERE ((([Copie de 05-FN3_MAJ_MASS_GPI].[NumSer])=[NumSérie11]) AND (([FacReel]-[FacAct])<>0)) OR ((([Copie de 05-FN3_MAJ_MASS_GPI].[NumSer])=[NumSérie11])" & _
" AND (([EncReel]-[EncAct])<>0)) OR ((([Copie de 05-FN3_MAJ_MASS_GPI].[NumSer])=[NumSérie11]) AND (([SldReel]-[SldAct])<>0));"

Set enrAJRecl = baseAJ.OpenRecordset(sqlAJ) 'Ouvrir la requête des réclamations à traiter pour les parcourir

Merci énormément!! :) 

A voir également:

3 réponses

Utilisateur anonyme
 

Bonjour,
quand tu concatène "Toto"& "Titi" tu écris "TotoTiti" il faut un espace!
 

'Inscription et imbriquement des codes SQL
strSqlENC = "SELECT [13-AJUSTEMENTS].[LienRecl13], [13-AJUSTEMENTS].[TypeAjust], Sum([13-AJUSTEMENTS].[MontAjust]) AS [SommeDeMontAjust]" & _
" FROM [13-AJUSTEMENTS]" & _
" Where ((([13-AJUSTEMENTS].[TypeAjust])='ENC'))"  & _
" GROUP BY [13-AJUSTEMENTS].[LienRecl13], [13-AJUSTEMENTS].[TypeAjust]"

on utilise le having pour tout ce qui concerne le Group By sum,Max,Min,Moy
dans ton cas tu gagneras en efficacité en utilisant un where. notes que j'ai ajouté un espace en début de ligne pour éviter une concaténation contigu.   

select (CHAMP,)
From (Table,)
Where
Group by
Having
0
BiankaBo Messages postés 71 Date d'inscription   Statut Membre Dernière intervention  
 

Bonjour,

J'ai essayé de mettre des espaces, mais le résultat est le même.

Je crois que ça se situe plutôt au niveau des requêtes imbriquées.

Il y a quelque chose que je n'écris pas correctement, mais je ne sais pas quoi.. et ce, 8 fois.. Mes références aux autres requêtes ne sont peut-être pas bonnes..

0
BiankaBo Messages postés 71 Date d'inscription   Statut Membre Dernière intervention  
 

Oh oh! J'ai trouvé!!

Erreur d'inattention.

J'ai échangé involontairement deux codes SQL.. "strSqlSGpi " VS "strSqlReclAJ"..

Voici la portion qui n'était pas correcte:

sqlAJ = "SELECT [Copie de 05-FN3_MAJ_MASS_GPI].[NumSer], [Copie de 05-FN3_MAJ_MASS_RECL].[FacAct], [Copie de 05-FN3_MAJ_MASS_GPI].[FacReel]," & _
" [FacReel]-[FacAct] AS [VFac], [Copie de 05-FN3_MAJ_MASS_RECL].[EncAct], [Copie de 05-FN3_MAJ_MASS_GPI].[EncReel], [EncReel]-[EncAct] AS [VEnc]," & _
" [Copie de 05-FN3_MAJ_MASS_RECL].[SldAct], [Copie de 05-FN3_MAJ_MASS_GPI].[SldReel], [SldReel]-[SldAct] AS [VSld], [Copie de 05-FN3_MAJ_MASS_RECL].[NoReclamation]" & _
"FROM (" & strSqlSGpi & ") AS [Copie de 05-FN3_MAJ_MASS_RECL], (" & strSqlReclAJ & ") AS [Copie de 05-FN3_MAJ_MASS_GPI]" & _
"WHERE ((([Copie de 05-FN3_MAJ_MASS_GPI].[NumSer])=[NumSérie11]) AND (([FacReel]-[FacAct])<>0)) OR ((([Copie de 05-FN3_MAJ_MASS_GPI].[NumSer])=[NumSérie11])" & _
" AND (([EncReel]-[EncAct])<>0)) OR ((([Copie de 05-FN3_MAJ_MASS_GPI].[NumSer])=[NumSérie11]) AND (([SldReel]-[SldAct])<>0));"

Voici la portion corrigée qui fonctionne:

sqlAJ = "SELECT [Copie de 05-FN3_MAJ_MASS_GPI].[NumSer], [Copie de 05-FN3_MAJ_MASS_RECL].[FacAct], [Copie de 05-FN3_MAJ_MASS_GPI].[FacReel]," & _
" [FacReel]-[FacAct] AS [VFac], [Copie de 05-FN3_MAJ_MASS_RECL].[EncAct], [Copie de 05-FN3_MAJ_MASS_GPI].[EncReel], [EncReel]-[EncAct] AS [VEnc]," & _
" [Copie de 05-FN3_MAJ_MASS_RECL].[SldAct], [Copie de 05-FN3_MAJ_MASS_GPI].[SldReel], [SldReel]-[SldAct] AS [VSld], [Copie de 05-FN3_MAJ_MASS_RECL].[NoReclamation]" & _
"FROM (" & strSqlReclAJ  & ") AS [Copie de 05-FN3_MAJ_MASS_RECL], (" & strSqlSGpi & ") AS [Copie de 05-FN3_MAJ_MASS_GPI]" & _
"WHERE ((([Copie de 05-FN3_MAJ_MASS_GPI].[NumSer])=[NumSérie11]) AND (([FacReel]-[FacAct])<>0)) OR ((([Copie de 05-FN3_MAJ_MASS_GPI].[NumSer])=[NumSérie11])" & _
" AND (([EncReel]-[EncAct])<>0)) OR ((([Copie de 05-FN3_MAJ_MASS_GPI].[NumSer])=[NumSérie11]) AND (([SldReel]-[SldAct])<>0));"

Merci pour votre aide!! :) 

0