Access 2003
Situation
Comme il est de pratique courante, j’ai une application qui utilise deux
bases .MDB, une de devant (front end) qui contient les traitements et une
autre (back end) qui contient les données spécifiques de l’utilisateur. Pour
la clarté de ce texte, je nommerai mes bases Frontend.mdb et Backend.mdb.
J’essai de compacter la base Backend.mdb par programmation à partir de ma
base Frontend.mdb.
Problème
Lors de l’exécution de la commande «DBEngine.CompactDatabase olddb, newdb»,
olddb: chemin et nom de Backend.mdb
newdb: nouveau nom pour la base compactée
j’obtiens le message d’erreur suivant :
«Vous avez essayé d’ouvrir une base de données déjà ouverte en mode exclusif
par l’utilisateur ‘Admin’ sur la machine ‘MICHEL-TECRA-A4’. Recommencez
lorsque la base de données sera disponible.»
Dans mes investigations, afin de tenter de connaître les bases ouvertes
juste avant la commande de compaction je demande l’énumération de la
collection Databases:
Dim wrkJet As Workspace
Dim dbsLoop As Database
Set wrkJet = Workspaces(0)
For Each dbsLoop In wrkJet.Databases
With dbsLoop
Debug.Print "Base ouverte -> " & .Name
End With
Next dbsLoop
Ce jeu d’instructions m’indique qu’une seule base est ouverte, ma base des
traitements (front end), ce qui semble conforme à mes attentes. Pourtant, le
fichier Backend.ldb est toujours présent, causant ainsi le message d’erreur.
Le jeu d’instructions répond bien puisque si je l’insère dans le code à un
endroit où je sais que Backend.mdb est ouverte, elle apparait bien dans la
collection. Donc, si avant l'appel de la compaction, Backend.mdb était
ouverte, ce jeu d'instructions me l'indiquerait.
À la suite d’un affichage précédent et de recherches dans ce groupe, j’ai
essayé bien d’autres choses, sans succès :
. fermer la requête sur laquelle est basé mon formulaire ouvert au moment où
la commande de compaction est exécutée;
. détacher de ma base de traitements (front end) toutes les tables liées à
la base des données (back end) avant la compaction;
. la commande «kill backend.ldb» produit l’erreur anticipée: «Accès refusé»
Tous ces travaux sont rendus nécessaires malgré le fait que le paramètre
«Outils/Général/Compacter lors de la fermeture» de Backend.mdb est bien coché
mais ne produit pas ses effets.
J’aimerais bien comprendre où dans Access, se situe le contrôle du fichier
.LDB. Je m’attendrais que si la collection Databases ne contient pas une
base en particulier (Backend.mdb), le fichier .ldb correspondant
(Backend.ldb) soit aussi détruit.
J’ai vraiment besoin de résoudre ce problème qui me hante périodiquement
depuis plusieurs mois. J’apprécierais vos conseils dans ma démarche en vue
d’identifier la cause de ce problème.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
David PONDA
Bjr Mike, en fait ce que tu oublie est que ta base FrontEnd ouvre la base Backend par liaison dynamique, etant donne que tu peux y acceder dans tes requetes et tes formulaires, donc en fait il est uvert en mode exclusif grace a FrontEnd... moi je te proposerais pour parrer ce dilemme d'utiliser le systeme d'autocompactage d'access dans le Menu Outils/Options... ou alors executer une macros autoexec a l'ouverture de chacune des bases... @+
"Michel Boivin" a écrit dans le message de news:
Access 2003 Situation Comme il est de pratique courante, j'ai une application qui utilise deux bases .MDB, une de devant (front end) qui contient les traitements et une autre (back end) qui contient les données spécifiques de l'utilisateur. Pour la clarté de ce texte, je nommerai mes bases Frontend.mdb et Backend.mdb.
J'essai de compacter la base Backend.mdb par programmation à partir de ma base Frontend.mdb.
Problème Lors de l'exécution de la commande «DBEngine.CompactDatabase olddb, newdb», olddb: chemin et nom de Backend.mdb newdb: nouveau nom pour la base compactée j'obtiens le message d'erreur suivant : «Vous avez essayé d'ouvrir une base de données déjà ouverte en mode exclusif par l'utilisateur 'Admin' sur la machine 'MICHEL-TECRA-A4'. Recommencez lorsque la base de données sera disponible.»
Dans mes investigations, afin de tenter de connaître les bases ouvertes juste avant la commande de compaction je demande l'énumération de la collection Databases:
Dim wrkJet As Workspace Dim dbsLoop As Database Set wrkJet = Workspaces(0) For Each dbsLoop In wrkJet.Databases With dbsLoop Debug.Print "Base ouverte -> " & .Name End With Next dbsLoop
Ce jeu d'instructions m'indique qu'une seule base est ouverte, ma base des traitements (front end), ce qui semble conforme à mes attentes. Pourtant, le fichier Backend.ldb est toujours présent, causant ainsi le message d'erreur. Le jeu d'instructions répond bien puisque si je l'insère dans le code à un endroit où je sais que Backend.mdb est ouverte, elle apparait bien dans la collection. Donc, si avant l'appel de la compaction, Backend.mdb était ouverte, ce jeu d'instructions me l'indiquerait.
À la suite d'un affichage précédent et de recherches dans ce groupe, j'ai essayé bien d'autres choses, sans succès : . fermer la requête sur laquelle est basé mon formulaire ouvert au moment où la commande de compaction est exécutée; . détacher de ma base de traitements (front end) toutes les tables liées à la base des données (back end) avant la compaction; . la commande «kill backend.ldb» produit l'erreur anticipée: «Accès refusé»
Tous ces travaux sont rendus nécessaires malgré le fait que le paramètre «Outils/Général/Compacter lors de la fermeture» de Backend.mdb est bien coché mais ne produit pas ses effets.
J'aimerais bien comprendre où dans Access, se situe le contrôle du fichier .LDB. Je m'attendrais que si la collection Databases ne contient pas une base en particulier (Backend.mdb), le fichier .ldb correspondant (Backend.ldb) soit aussi détruit.
J'ai vraiment besoin de résoudre ce problème qui me hante périodiquement depuis plusieurs mois. J'apprécierais vos conseils dans ma démarche en vue d'identifier la cause de ce problème.
Bjr Mike,
en fait ce que tu oublie est que ta base FrontEnd ouvre la base Backend par
liaison dynamique, etant donne que tu peux y acceder dans tes requetes et
tes formulaires, donc en fait il est uvert en mode exclusif grace a
FrontEnd... moi je te proposerais pour parrer ce dilemme d'utiliser le
systeme d'autocompactage d'access dans le Menu Outils/Options... ou alors
executer une macros autoexec a l'ouverture de chacune des bases...
@+
"Michel Boivin" <MichelBoivin@discussions.microsoft.com> a écrit dans le
message de news: 5D4AAD71-005D-4853-85C8-EA285A8123C5@microsoft.com...
Access 2003
Situation
Comme il est de pratique courante, j'ai une application qui utilise deux
bases .MDB, une de devant (front end) qui contient les traitements et une
autre (back end) qui contient les données spécifiques de l'utilisateur.
Pour
la clarté de ce texte, je nommerai mes bases Frontend.mdb et Backend.mdb.
J'essai de compacter la base Backend.mdb par programmation à partir de ma
base Frontend.mdb.
Problème
Lors de l'exécution de la commande «DBEngine.CompactDatabase olddb,
newdb»,
olddb: chemin et nom de Backend.mdb
newdb: nouveau nom pour la base compactée
j'obtiens le message d'erreur suivant :
«Vous avez essayé d'ouvrir une base de données déjà ouverte en mode
exclusif
par l'utilisateur 'Admin' sur la machine 'MICHEL-TECRA-A4'. Recommencez
lorsque la base de données sera disponible.»
Dans mes investigations, afin de tenter de connaître les bases ouvertes
juste avant la commande de compaction je demande l'énumération de la
collection Databases:
Dim wrkJet As Workspace
Dim dbsLoop As Database
Set wrkJet = Workspaces(0)
For Each dbsLoop In wrkJet.Databases
With dbsLoop
Debug.Print "Base ouverte -> " & .Name
End With
Next dbsLoop
Ce jeu d'instructions m'indique qu'une seule base est ouverte, ma base des
traitements (front end), ce qui semble conforme à mes attentes. Pourtant,
le
fichier Backend.ldb est toujours présent, causant ainsi le message d'erreur.
Le jeu d'instructions répond bien puisque si je l'insère dans le code à un
endroit où je sais que Backend.mdb est ouverte, elle apparait bien dans la
collection. Donc, si avant l'appel de la compaction, Backend.mdb était
ouverte, ce jeu d'instructions me l'indiquerait.
À la suite d'un affichage précédent et de recherches dans ce groupe, j'ai
essayé bien d'autres choses, sans succès :
. fermer la requête sur laquelle est basé mon formulaire ouvert au moment
où
la commande de compaction est exécutée;
. détacher de ma base de traitements (front end) toutes les tables liées à
la base des données (back end) avant la compaction;
. la commande «kill backend.ldb» produit l'erreur anticipée: «Accès
refusé»
Tous ces travaux sont rendus nécessaires malgré le fait que le paramètre
«Outils/Général/Compacter lors de la fermeture» de Backend.mdb est bien
coché
mais ne produit pas ses effets.
J'aimerais bien comprendre où dans Access, se situe le contrôle du fichier
.LDB. Je m'attendrais que si la collection Databases ne contient pas une
base en particulier (Backend.mdb), le fichier .ldb correspondant
(Backend.ldb) soit aussi détruit.
J'ai vraiment besoin de résoudre ce problème qui me hante périodiquement
depuis plusieurs mois. J'apprécierais vos conseils dans ma démarche en
vue
d'identifier la cause de ce problème.
Bjr Mike, en fait ce que tu oublie est que ta base FrontEnd ouvre la base Backend par liaison dynamique, etant donne que tu peux y acceder dans tes requetes et tes formulaires, donc en fait il est uvert en mode exclusif grace a FrontEnd... moi je te proposerais pour parrer ce dilemme d'utiliser le systeme d'autocompactage d'access dans le Menu Outils/Options... ou alors executer une macros autoexec a l'ouverture de chacune des bases... @+
"Michel Boivin" a écrit dans le message de news:
Access 2003 Situation Comme il est de pratique courante, j'ai une application qui utilise deux bases .MDB, une de devant (front end) qui contient les traitements et une autre (back end) qui contient les données spécifiques de l'utilisateur. Pour la clarté de ce texte, je nommerai mes bases Frontend.mdb et Backend.mdb.
J'essai de compacter la base Backend.mdb par programmation à partir de ma base Frontend.mdb.
Problème Lors de l'exécution de la commande «DBEngine.CompactDatabase olddb, newdb», olddb: chemin et nom de Backend.mdb newdb: nouveau nom pour la base compactée j'obtiens le message d'erreur suivant : «Vous avez essayé d'ouvrir une base de données déjà ouverte en mode exclusif par l'utilisateur 'Admin' sur la machine 'MICHEL-TECRA-A4'. Recommencez lorsque la base de données sera disponible.»
Dans mes investigations, afin de tenter de connaître les bases ouvertes juste avant la commande de compaction je demande l'énumération de la collection Databases:
Dim wrkJet As Workspace Dim dbsLoop As Database Set wrkJet = Workspaces(0) For Each dbsLoop In wrkJet.Databases With dbsLoop Debug.Print "Base ouverte -> " & .Name End With Next dbsLoop
Ce jeu d'instructions m'indique qu'une seule base est ouverte, ma base des traitements (front end), ce qui semble conforme à mes attentes. Pourtant, le fichier Backend.ldb est toujours présent, causant ainsi le message d'erreur. Le jeu d'instructions répond bien puisque si je l'insère dans le code à un endroit où je sais que Backend.mdb est ouverte, elle apparait bien dans la collection. Donc, si avant l'appel de la compaction, Backend.mdb était ouverte, ce jeu d'instructions me l'indiquerait.
À la suite d'un affichage précédent et de recherches dans ce groupe, j'ai essayé bien d'autres choses, sans succès : . fermer la requête sur laquelle est basé mon formulaire ouvert au moment où la commande de compaction est exécutée; . détacher de ma base de traitements (front end) toutes les tables liées à la base des données (back end) avant la compaction; . la commande «kill backend.ldb» produit l'erreur anticipée: «Accès refusé»
Tous ces travaux sont rendus nécessaires malgré le fait que le paramètre «Outils/Général/Compacter lors de la fermeture» de Backend.mdb est bien coché mais ne produit pas ses effets.
J'aimerais bien comprendre où dans Access, se situe le contrôle du fichier .LDB. Je m'attendrais que si la collection Databases ne contient pas une base en particulier (Backend.mdb), le fichier .ldb correspondant (Backend.ldb) soit aussi détruit.
J'ai vraiment besoin de résoudre ce problème qui me hante périodiquement depuis plusieurs mois. J'apprécierais vos conseils dans ma démarche en vue d'identifier la cause de ce problème.
Michel Boivin
Merci David, je vais regarder ça et continuer mes essais. Si je réussis, je vais sûrement afficher ma solution ici. D'ici là, je continue à chercher.
Bjr Mike, en fait ce que tu oublie est que ta base FrontEnd ouvre la base Backend par liaison dynamique, etant donne que tu peux y acceder dans tes requetes et tes formulaires, donc en fait il est uvert en mode exclusif grace a FrontEnd... moi je te proposerais pour parrer ce dilemme d'utiliser le systeme d'autocompactage d'access dans le Menu Outils/Options... ou alors executer une macros autoexec a l'ouverture de chacune des bases... @+
"Michel Boivin" a écrit dans le message de news:
Access 2003 Situation Comme il est de pratique courante, j'ai une application qui utilise deux bases .MDB, une de devant (front end) qui contient les traitements et une autre (back end) qui contient les données spécifiques de l'utilisateur. Pour la clarté de ce texte, je nommerai mes bases Frontend.mdb et Backend.mdb.
J'essai de compacter la base Backend.mdb par programmation à partir de ma base Frontend.mdb.
Problème Lors de l'exécution de la commande «DBEngine.CompactDatabase olddb, newdb», olddb: chemin et nom de Backend.mdb newdb: nouveau nom pour la base compactée j'obtiens le message d'erreur suivant : «Vous avez essayé d'ouvrir une base de données déjà ouverte en mode exclusif par l'utilisateur 'Admin' sur la machine 'MICHEL-TECRA-A4'. Recommencez lorsque la base de données sera disponible.»
Dans mes investigations, afin de tenter de connaître les bases ouvertes juste avant la commande de compaction je demande l'énumération de la collection Databases:
Dim wrkJet As Workspace Dim dbsLoop As Database Set wrkJet = Workspaces(0) For Each dbsLoop In wrkJet.Databases With dbsLoop Debug.Print "Base ouverte -> " & .Name End With Next dbsLoop
Ce jeu d'instructions m'indique qu'une seule base est ouverte, ma base des traitements (front end), ce qui semble conforme à mes attentes. Pourtant, le fichier Backend.ldb est toujours présent, causant ainsi le message d'erreur. Le jeu d'instructions répond bien puisque si je l'insère dans le code à un endroit où je sais que Backend.mdb est ouverte, elle apparait bien dans la collection. Donc, si avant l'appel de la compaction, Backend.mdb était ouverte, ce jeu d'instructions me l'indiquerait.
À la suite d'un affichage précédent et de recherches dans ce groupe, j'ai essayé bien d'autres choses, sans succès : . fermer la requête sur laquelle est basé mon formulaire ouvert au moment où la commande de compaction est exécutée; . détacher de ma base de traitements (front end) toutes les tables liées à la base des données (back end) avant la compaction; . la commande «kill backend.ldb» produit l'erreur anticipée: «Accès refusé»
Tous ces travaux sont rendus nécessaires malgré le fait que le paramètre «Outils/Général/Compacter lors de la fermeture» de Backend.mdb est bien coché mais ne produit pas ses effets.
J'aimerais bien comprendre où dans Access, se situe le contrôle du fichier .LDB. Je m'attendrais que si la collection Databases ne contient pas une base en particulier (Backend.mdb), le fichier .ldb correspondant (Backend.ldb) soit aussi détruit.
J'ai vraiment besoin de résoudre ce problème qui me hante périodiquement depuis plusieurs mois. J'apprécierais vos conseils dans ma démarche en vue d'identifier la cause de ce problème.
Merci David, je vais regarder ça et continuer mes essais. Si je réussis, je
vais sûrement afficher ma solution ici. D'ici là, je continue à chercher.
Bjr Mike,
en fait ce que tu oublie est que ta base FrontEnd ouvre la base Backend par
liaison dynamique, etant donne que tu peux y acceder dans tes requetes et
tes formulaires, donc en fait il est uvert en mode exclusif grace a
FrontEnd... moi je te proposerais pour parrer ce dilemme d'utiliser le
systeme d'autocompactage d'access dans le Menu Outils/Options... ou alors
executer une macros autoexec a l'ouverture de chacune des bases...
@+
"Michel Boivin" <MichelBoivin@discussions.microsoft.com> a écrit dans le
message de news: 5D4AAD71-005D-4853-85C8-EA285A8123C5@microsoft.com...
Access 2003
Situation
Comme il est de pratique courante, j'ai une application qui utilise deux
bases .MDB, une de devant (front end) qui contient les traitements et une
autre (back end) qui contient les données spécifiques de l'utilisateur.
Pour
la clarté de ce texte, je nommerai mes bases Frontend.mdb et Backend.mdb.
J'essai de compacter la base Backend.mdb par programmation à partir de ma
base Frontend.mdb.
Problème
Lors de l'exécution de la commande «DBEngine.CompactDatabase olddb,
newdb»,
olddb: chemin et nom de Backend.mdb
newdb: nouveau nom pour la base compactée
j'obtiens le message d'erreur suivant :
«Vous avez essayé d'ouvrir une base de données déjà ouverte en mode
exclusif
par l'utilisateur 'Admin' sur la machine 'MICHEL-TECRA-A4'. Recommencez
lorsque la base de données sera disponible.»
Dans mes investigations, afin de tenter de connaître les bases ouvertes
juste avant la commande de compaction je demande l'énumération de la
collection Databases:
Dim wrkJet As Workspace
Dim dbsLoop As Database
Set wrkJet = Workspaces(0)
For Each dbsLoop In wrkJet.Databases
With dbsLoop
Debug.Print "Base ouverte -> " & .Name
End With
Next dbsLoop
Ce jeu d'instructions m'indique qu'une seule base est ouverte, ma base des
traitements (front end), ce qui semble conforme à mes attentes. Pourtant,
le
fichier Backend.ldb est toujours présent, causant ainsi le message d'erreur.
Le jeu d'instructions répond bien puisque si je l'insère dans le code à un
endroit où je sais que Backend.mdb est ouverte, elle apparait bien dans la
collection. Donc, si avant l'appel de la compaction, Backend.mdb était
ouverte, ce jeu d'instructions me l'indiquerait.
À la suite d'un affichage précédent et de recherches dans ce groupe, j'ai
essayé bien d'autres choses, sans succès :
. fermer la requête sur laquelle est basé mon formulaire ouvert au moment
où
la commande de compaction est exécutée;
. détacher de ma base de traitements (front end) toutes les tables liées à
la base des données (back end) avant la compaction;
. la commande «kill backend.ldb» produit l'erreur anticipée: «Accès
refusé»
Tous ces travaux sont rendus nécessaires malgré le fait que le paramètre
«Outils/Général/Compacter lors de la fermeture» de Backend.mdb est bien
coché
mais ne produit pas ses effets.
J'aimerais bien comprendre où dans Access, se situe le contrôle du fichier
.LDB. Je m'attendrais que si la collection Databases ne contient pas une
base en particulier (Backend.mdb), le fichier .ldb correspondant
(Backend.ldb) soit aussi détruit.
J'ai vraiment besoin de résoudre ce problème qui me hante périodiquement
depuis plusieurs mois. J'apprécierais vos conseils dans ma démarche en
vue
d'identifier la cause de ce problème.
Merci David, je vais regarder ça et continuer mes essais. Si je réussis, je vais sûrement afficher ma solution ici. D'ici là, je continue à chercher.
Bjr Mike, en fait ce que tu oublie est que ta base FrontEnd ouvre la base Backend par liaison dynamique, etant donne que tu peux y acceder dans tes requetes et tes formulaires, donc en fait il est uvert en mode exclusif grace a FrontEnd... moi je te proposerais pour parrer ce dilemme d'utiliser le systeme d'autocompactage d'access dans le Menu Outils/Options... ou alors executer une macros autoexec a l'ouverture de chacune des bases... @+
"Michel Boivin" a écrit dans le message de news:
Access 2003 Situation Comme il est de pratique courante, j'ai une application qui utilise deux bases .MDB, une de devant (front end) qui contient les traitements et une autre (back end) qui contient les données spécifiques de l'utilisateur. Pour la clarté de ce texte, je nommerai mes bases Frontend.mdb et Backend.mdb.
J'essai de compacter la base Backend.mdb par programmation à partir de ma base Frontend.mdb.
Problème Lors de l'exécution de la commande «DBEngine.CompactDatabase olddb, newdb», olddb: chemin et nom de Backend.mdb newdb: nouveau nom pour la base compactée j'obtiens le message d'erreur suivant : «Vous avez essayé d'ouvrir une base de données déjà ouverte en mode exclusif par l'utilisateur 'Admin' sur la machine 'MICHEL-TECRA-A4'. Recommencez lorsque la base de données sera disponible.»
Dans mes investigations, afin de tenter de connaître les bases ouvertes juste avant la commande de compaction je demande l'énumération de la collection Databases:
Dim wrkJet As Workspace Dim dbsLoop As Database Set wrkJet = Workspaces(0) For Each dbsLoop In wrkJet.Databases With dbsLoop Debug.Print "Base ouverte -> " & .Name End With Next dbsLoop
Ce jeu d'instructions m'indique qu'une seule base est ouverte, ma base des traitements (front end), ce qui semble conforme à mes attentes. Pourtant, le fichier Backend.ldb est toujours présent, causant ainsi le message d'erreur. Le jeu d'instructions répond bien puisque si je l'insère dans le code à un endroit où je sais que Backend.mdb est ouverte, elle apparait bien dans la collection. Donc, si avant l'appel de la compaction, Backend.mdb était ouverte, ce jeu d'instructions me l'indiquerait.
À la suite d'un affichage précédent et de recherches dans ce groupe, j'ai essayé bien d'autres choses, sans succès : . fermer la requête sur laquelle est basé mon formulaire ouvert au moment où la commande de compaction est exécutée; . détacher de ma base de traitements (front end) toutes les tables liées à la base des données (back end) avant la compaction; . la commande «kill backend.ldb» produit l'erreur anticipée: «Accès refusé»
Tous ces travaux sont rendus nécessaires malgré le fait que le paramètre «Outils/Général/Compacter lors de la fermeture» de Backend.mdb est bien coché mais ne produit pas ses effets.
J'aimerais bien comprendre où dans Access, se situe le contrôle du fichier .LDB. Je m'attendrais que si la collection Databases ne contient pas une base en particulier (Backend.mdb), le fichier .ldb correspondant (Backend.ldb) soit aussi détruit.
J'ai vraiment besoin de résoudre ce problème qui me hante périodiquement depuis plusieurs mois. J'apprécierais vos conseils dans ma démarche en vue d'identifier la cause de ce problème.