Requête SQL via ADODB - Erreur syntaxe
Bonjour,
Je dispose d'une base de donnée SQL hébergée sur un serveur, je souhaiterais via Excel récupérer des données dans une feuille de calcul. Après moult lectures sur le sujet (je suis autodidacte en perpétuelle autoformation) j'ai réussi via Microsoft query a connecter la base et même à enregistrer une requête pour mon extraction (j'ai donc un sql tout prêt).
Maintenant je souhaite automatiser tout cela via une macro, j'ai donc fait appel à l'enregistreur pour voir comment il procédait. Lors de la manip j'ai bien mes résultats dans la feuille. Mais lorsque je relance la macro il bug !!!
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| Sub Connexion_Oenodoc()
Dim Client As String, DateDebut As String, DateFin As String
Client = ActiveSheet.Range("B1").Value
DateDebut = ActiveSheet.Range("B2").Value
DateFin = ActiveSheet.Range("B3").Value
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:="ODBC;DSN=Oenodoc;" _
, Destination:=Range("$A$5")).QueryTable
.CommandText = Array( _
"SELECT client_0.CODE_CLIENT, resultat_0.DATE_ANALYSE, echantillon_complet_0.DESIGNATION_ORIGINE, echantillon_complet_0.ORIGINE_LIBRE, dosage_0.DESIGNATION_DOSAGE, resultat_0.RESULTAT_ANALYSE_CORRIGE, " _
, _
"unite_mesure_0.DESIGNATION_UNITE" & "FROM oenodoc.client client_0, oenodoc.dosage dosage_0, oenodoc.echantillon echantillon_0, oenodoc.echantillon_complet echantillon_complet_0, oenodoc.methode_analyse m" _
, _
"ethode_analyse_0, oenodoc.resultat resultat_0, oenodoc.unite_mesure unite_mesure_0" & "WHERE methode_analyse_0.NUM_ANALYSE = resultat_0.NUM_ANALYSE AND methode_analyse_0.NUM_DOSAGE = dosage_0.NUM_DOSAGE " _
, _
"AND echantillon_0.CODE_RECEPTION = echantillon_complet_0.CODE_RECEPTION AND echantillon_0.CODE_RECEPTION = resultat_0.CODE_RECEPTION AND client_0.NUM_CLIENT = echantillon_0.NUM_CLIENT AND client_0.NUM" _
, _
"_CLIENT = echantillon_complet_0.NUM_CLIENT AND unite_mesure_0.NUM_UNITE = methode_analyse_0.NUM_UNITE AND client_0.CODE_CLIENT = '" & Client & "' AND resultat_0.DATE_ANALYSE > '" & DateDebut & "' And resultat_0.DATE_ANALYSE < '" & DateFin & "' ")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Tableau_Suivi_oenodoc"
.Refresh BackgroundQuery:=False
End With
End Sub |
Je suis donc parti sur une base de macro pour rédiger celle-ci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| Sub EnCours_Extract()
'Déclaration variables requête
Dim Client As String, DateDebut As String, DateFin As String
Client = ActiveSheet.Range("B1").Value
DateDebut = ActiveSheet.Range("B2").Value
DateFin = ActiveSheet.Range("B3").Value
'Déclaration de la variable de connexion
Dim cNx As New ADODB.Connection, oRS As New ADODB.Recordset
Dim NomDuDSN As String, NomUtilisateur As String, MotDePasse As String
Dim sSQL As String
Dim ReturnArray
NomDuDSN = "########"
NomUtilisateur = "########"
MotDePasse = "########"
'Définition de la connexion
cNx.ConnectionString = "DSN=" & NomDuDSN & ";UID=" & NomUtilisateur & ";PWD=" & MotDePasse & ";"
cNx.Open
'Requête SQL
sSQLSting = "SELECT client_0.CODE_CLIENT, resultat_0.DATE_ANALYSE, echantillon_complet_0.DESIGNATION_ORIGINE, echantillon_complet_0.ORIGINE_LIBRE, dosage_0.DESIGNATION_DOSAGE, resultat_0.RESULTAT_ANALYSE_CORRIGE, " & _
"unite_mesure_0.DESIGNATION_UNITE" & "FROM oenodoc.client client_0, oenodoc.dosage dosage_0, oenodoc.echantillon echantillon_0, oenodoc.echantillon_complet echantillon_complet_0, " & _
"oenodoc.methode_analyse methode_analyse_0, oenodoc.resultat resultat_0, oenodoc.unite_mesure unite_mesure_0" & "WHERE methode_analyse_0.NUM_ANALYSE = resultat_0.NUM_ANALYSE AND methode_analyse_0.NUM_DOSAGE = dosage_0.NUM_DOSAGE " & _
"AND echantillon_0.CODE_RECEPTION = echantillon_complet_0.CODE_RECEPTION AND echantillon_0.CODE_RECEPTION = resultat_0.CODE_RECEPTION AND client_0.NUM_CLIENT = echantillon_0.NUM_CLIENT AND client_0.NUM " & _
"_CLIENT = echantillon_complet_0.NUM_CLIENT AND unite_mesure_0.NUM_UNITE = methode_analyse_0.NUM_UNITE AND ((client_0.CODE_CLIENT='& Client &') AND (resultat_0.DATE_ANALYSE>'& DateDebut &' And resultat_0.DATE_ANALYSE<'& DateFin &'))"
oRS.Open sSQLSting, cNx
Sheet2.Range("A1").CopyFromRecordset oRS
oRS.Close
cNx.Close
Set oRS = Nothing
Set cNx = Nothing
End Sub |
Le bug se situe lors de l'exécution de la ligne oRS.Open sSQLString, cNx il semblerait que la synthaxe de ma requête soit défaillante.
Message d'erreur affiché : Erreur d'exécution '-2147217900 (80040e14)': You have an error in your syntax;check the manual that corresponds to your MySQL server version for the right syntax to use near '_cCLIENT = echantillon_complet_0.NUM_CLIENT AND unite_mesure_0.NUM_UNITE = method' at line 3
Je patine un peu dans la semoule depuis hier, auriez-vous un avis éclairé pour me faire avancer. Merci d'avance.