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" :
Fonction de lancement Macro BDD ACCESS :
Code : Sélectionner tout - Visualiser dans une fenêtre à part access.OpenCurrentDatabase(chemin_destination + nom_bdd_access, False)
Merci de votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
Partager