Bonjour le forum,
Je rencontre une difficulté sur Excel 2010. Je cherche à modifier le code SQL d'une requête stockée dans Access à partir du code SQl d'une autre requête embarquée, à laquelle je rajoute une clause WHERE.
Bug 3027 (Impossible de mettre à jour. La base de données est en lecture seule) sur la ligne :
-> Query.Sql = sSQL
Info :
sRq_O02_SELECT = Requête que je veux modifier
sRq_O02_SELECT_Origine = Requête source à laquelle je rajoute la clause WHERE que je vais lire dans mon classeur excel dans une cellule nommée.
Ce que j'ai déjà essayé :
* La requête d'origine fait un "SELECT *" sur une autre requête. j'ai donc essayé de créer une table avec la requête source de la requête d'origine. Ainsi ma requête d'origine est devenue un "SELECT *" d'une table physique. Toujours le même bug.
* La clause WHERE est défini par l'utilisateur via un Formulaire (qui se connecte à la DB) qui affiche des données d'Access dans des List. l'utilisateur fait ses choix, clique sur valider et j'enregistre la clause WHERE. J'ai également essayé de modifier la requête sans ajouter de clause WHERE, donc sans appelé le formulaire. J'ai la même erreur. Donc cela ne vient pas de mon formulaire.
* J'ai essayé aussi de refermer la DB entre les deux lignes "Set Query = " mais toujours la même erreur.
Là je ne sais plus quoi faire !! Si quelqu'un a une idée car malgré mes recherches sur internet je n'arrive pas à m'en sortir.
Voici mon code :
Merci.
Cdlt,
David
Je rencontre une difficulté sur Excel 2010. Je cherche à modifier le code SQL d'une requête stockée dans Access à partir du code SQl d'une autre requête embarquée, à laquelle je rajoute une clause WHERE.
Bug 3027 (Impossible de mettre à jour. La base de données est en lecture seule) sur la ligne :
-> Query.Sql = sSQL
Info :
sRq_O02_SELECT = Requête que je veux modifier
sRq_O02_SELECT_Origine = Requête source à laquelle je rajoute la clause WHERE que je vais lire dans mon classeur excel dans une cellule nommée.
Ce que j'ai déjà essayé :
* La requête d'origine fait un "SELECT *" sur une autre requête. j'ai donc essayé de créer une table avec la requête source de la requête d'origine. Ainsi ma requête d'origine est devenue un "SELECT *" d'une table physique. Toujours le même bug.
* La clause WHERE est défini par l'utilisateur via un Formulaire (qui se connecte à la DB) qui affiche des données d'Access dans des List. l'utilisateur fait ses choix, clique sur valider et j'enregistre la clause WHERE. J'ai également essayé de modifier la requête sans ajouter de clause WHERE, donc sans appelé le formulaire. J'ai la même erreur. Donc cela ne vient pas de mon formulaire.
* J'ai essayé aussi de refermer la DB entre les deux lignes "Set Query = " mais toujours la même erreur.
Là je ne sais plus quoi faire !! Si quelqu'un a une idée car malgré mes recherches sur internet je n'arrive pas à m'en sortir.
Voici mon code :
Code:
Sub Exporter_INFOTEL_Physique_SELECT()
Dim db As Database
Dim Query As QueryDef
Dim rst As Recordset
Dim vMessage As Variant
Dim sCheminBaseDorsale As String
Dim sFichierExcel As String
Dim sSQL As String
Dim sSQL_Clause_WHERE As String
Dim sRq_O02 As String
Dim sRq_O02_SELECT As String
Dim sRq_O02_SELECT_Origine As String
Dim sFeuille_O02 As String
Dim sDNCible_O02 As String
' ######### Ouverture formulaire de choix des sites
frmChoix_Lots_Sites.Show
If Sheets("Admin").Range("dnAdmin_sSQL_Choix_Sites") = "" Then
vMessage = MsgBox("Vous n'avez choisi aucun site !", vbCritical, "Opération annulée.")
Exit Sub
End If
' Variables
sCheminBaseDorsale = Sheets("Pilotage").Range("dnCheminBaseDorsale").Value
sSQL_Clause_WHERE = Sheets("Admin").Range("dnAdmin_sSQL_Choix_Sites")
sRq_O02 = "R_Exportation_Infotel_F01_O02_FINAL"
sRq_O02_SELECT = "R_Exportation_Infotel_F01_O02_FINAL_SELECT"
sRq_O02_SELECT_Origine = "R_Exportation_Infotel_F01_O02_FINAL_SELECT_Origine"
Set db = OpenDatabase(sCheminBaseDorsale, False, True)
Set Query = db.QueryDefs(sRq_O02_SELECT_Origine)
sSQL = Query.Sql
sSQL = Replace(sSQL, ";", " ")
sSQL = sSQL & "WHERE (((" & sRq_O02 & ".CODNAT) " & sSQL_Clause_WHERE & "));"
db.Close
Set db = Nothing
Set Query = Nothing
Set db = OpenDatabase(sCheminBaseDorsale, False, True)
Set Query = db.QueryDefs(sRq_O02_SELECT)
Query.Sql = sSQL
End Sub
Merci.
Cdlt,
David