Ouvrir une BDD ACCESS en Lecture-Ecriture en Python
Bonjour a tous,
J'ai réalisé ce script en Python qui permets de lancer une macro de mise a jour des données sous Access.
Mon script lance la macro contenu dans la BDD Access.
Le problème c'est que la BDD Access est ouverte par défaut en lecture seule, j'obtiens une erreur lors de la MAJ :
"Erreur d'exécution 3027, Mise a jour impossible, la base de données ou l'objet est en lecture seule."
Au début, je pensais que cela provenais des droits d'accès au répertoire, mais je copie la BDD ACCESS sur mon local pour la MAJ, ca ne peut provenir d'un problème de droits pour moi ...
Je dirais que le souci proviens de cette ligne au moment de l'ouverture de la base de données, cette ligne ouvre la BDD Access en mode "lecture seule" et il faudrait pouvoir l'ouvrir en "lecture-écriture" :
Code:
access.OpenCurrentDatabase(chemin_destination + nom_bdd_access, False)
Fonction de lancement Macro BDD ACCESS :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| # Fonction de lancement de Macro Access depuis une BDD Access
def lancer_macro_bdd_access(chemin_bdd_access, nom_bdd_access, nom_macro_access, chemin_destination):
print(f'Ouverture {nom_bdd_access} pour l execution de la macro {nom_macro_access}.')
access = comDispatch("Access.Application")
access.application.visible = False
if chemin_destination:
shutil.copyfile(chemin_bdd_access + nom_bdd_access, chemin_destination + nom_bdd_access)
access.UserControl = True
os.chmod(chemin_destination + nom_bdd_access, S_IWRITE)
access.OpenCurrentDatabase(chemin_destination + nom_bdd_access, False)
access.DoCmd.RunMacro(nom_macro_access)
access.DoCmd.CloseDatabase()
access.Application.Quit()
shutil.copyfile(chemin_destination + nom_bdd_access, chemin_bdd_access + nom_bdd_access)
else:
access.UserControl = True
#os.chmod(chemin_bdd_access + nom_bdd_access, S_IRWXO)
access.OpenCurrentDatabase(chemin_bdd_access + nom_bdd_access, False)
access.DoCmd.RunMacro(nom_macro_access)
access.DoCmd.CloseDatabase()
access.Application.Quit()
print(f'La macro {nom_macro_access} de la BDD Access {nom_bdd_access} a été lancé correctement.')
time.sleep(10) |
Merci de votre aide.