OVH Cloud OVH Cloud

CurrentDB et verrouillage de base

5 réponses
Avatar
Xavier HUE
Bonjour,

Win 200Pro SP4, Access XP SP3.

Voilà plusieurs jours que je tourne en rond, malgré de nombreuses recherches
sur ce forum, chez microsoft et sur le net en général.

Mon interrogation: Comment utiliser (faire référence à) la base de données
en cours en VBA?

En effet, je constate un verrouillage systématique lorsque je:
- Ouvre ma base
- Ouvre un formulaire en modification
- Par la suite, l'exécution de code passant sur CurrenDb.Name ou si je
tape la ligne dans la fenêtre d'exécution de VBA: ? CurrentDb.Name
=> En réponse, j'ai le message "Erreur d'exécution '3734' La base de données
a été placé par l'utilisateur "Admin"..."
Impossible dans ce cas d'enregistrer mes modifs si j'en fais.

Ou bien
- Ouvre ma base
- Tape la ligne dans la fenêtre d'exécution de VBA: ? CurrentDb.Name, ou
exécute Set MaBase = CurrentDb
- Ouvre un formulaire en création
=> En réponse, le message d'erreur "Vous n'avez pas les autorisations
nécessaire..."

Je compacte ma base, et le problème disparait parfois!
J'ai ce problème dans une base en cours de développement.
J'ai beau quitter Access et relancer, compacter ma base, rien n'y fait!

La cerise sur le gateau, ayant passé la matinée sur ça, afin de rédiger ce
message, j'ai fait l'essai dans une base neuve:
- Création d'une base vide
- Mise en place des références:
+ Visual Basic pour application
+ Microsoft Access 10.0 objetct library
+ Microsoft DAO 3.6 objetct library
- Création d'un formulaire
- Ajout du code suivant

Option Compare Database
Option Explicit

Dim gDb As DAO.database

Private Sub Form_Load()
Set gDb = Application.CurrentDb
End Sub

Private Sub Form_Unload(Cancel As Integer)
gDb.Close
Set gDb = Nothing
End Sub

- Enregistre et ferme le formulaire
- Ouvre le formulaire en design, et paf! le message d'erreur 3734.

Ensuite
- Quitte Access
- Relance Access
- Charge ma base test
- Compacte ma base
- Ouvre le formulaire en design
C'est bon!!??!!

Je charge ma base en développement, et plus d'erreur????
Qu'est-ce qui se passe??
Ou est mon erreur??

Merci.

5 réponses

Avatar
Xavier HUE
Et de nouveau l'erreur dans ma base de dév, alors que je n'ai absolument rien
fait!!!
Juste après l'envoi de mon message!!
Y'a un Gremlin quelque part :-(


Bonjour,

Win 200Pro SP4, Access XP SP3.

Voilà plusieurs jours que je tourne en rond, malgré de nombreuses recherches
sur ce forum, chez microsoft et sur le net en général.

Mon interrogation: Comment utiliser (faire référence à) la base de données
en cours en VBA?

En effet, je constate un verrouillage systématique lorsque je:
- Ouvre ma base
- Ouvre un formulaire en modification
- Par la suite, l'exécution de code passant sur CurrenDb.Name ou si je
tape la ligne dans la fenêtre d'exécution de VBA: ? CurrentDb.Name
=> En réponse, j'ai le message "Erreur d'exécution '3734' La base de données
a été placé par l'utilisateur "Admin"..."
Impossible dans ce cas d'enregistrer mes modifs si j'en fais.

Ou bien
- Ouvre ma base
- Tape la ligne dans la fenêtre d'exécution de VBA: ? CurrentDb.Name, ou
exécute Set MaBase = CurrentDb
- Ouvre un formulaire en création
=> En réponse, le message d'erreur "Vous n'avez pas les autorisations
nécessaire..."

Je compacte ma base, et le problème disparait parfois!
J'ai ce problème dans une base en cours de développement.
J'ai beau quitter Access et relancer, compacter ma base, rien n'y fait!

La cerise sur le gateau, ayant passé la matinée sur ça, afin de rédiger ce
message, j'ai fait l'essai dans une base neuve:
- Création d'une base vide
- Mise en place des références:
+ Visual Basic pour application
+ Microsoft Access 10.0 objetct library
+ Microsoft DAO 3.6 objetct library
- Création d'un formulaire
- Ajout du code suivant

Option Compare Database
Option Explicit

Dim gDb As DAO.database

Private Sub Form_Load()
Set gDb = Application.CurrentDb
End Sub

Private Sub Form_Unload(Cancel As Integer)
gDb.Close
Set gDb = Nothing
End Sub

- Enregistre et ferme le formulaire
- Ouvre le formulaire en design, et paf! le message d'erreur 3734.

Ensuite
- Quitte Access
- Relance Access
- Charge ma base test
- Compacte ma base
- Ouvre le formulaire en design
C'est bon!!??!!

Je charge ma base en développement, et plus d'erreur????
Qu'est-ce qui se passe??
Ou est mon erreur??

Merci.


Avatar
Gafish
Xavier HUE wrote:
Bonjour,


Bonjour,

En effet, je constate un verrouillage systématique lorsque je:
- Ouvre ma base
- Ouvre un formulaire en modification
- Par la suite, l'exécution de code passant sur CurrenDb.Name ou si
je tape la ligne dans la fenêtre d'exécution de VBA: ? CurrentDb.Name
=> En réponse, j'ai le message "Erreur d'exécution '3734' La base de
données a été placé par l'utilisateur "Admin"..."
Impossible dans ce cas d'enregistrer mes modifs si j'en fais.


Tu as une fiche technique à ce sujet :
http://support.microsoft.com/default.aspx?scid=KB;EN-US;274211
Essaie sinon d'utiliser plutôt CurrentDb dans ton code qui ne t'oblige pas à
faire des déclarations et des set.

Arnaud
--
Charte du forum : http://www.mpfa.info/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Xavier HUE
Bonjour Arnaud,

1) J'ai déjà consulté cet article. Il ne répond pas à mon problème. Je ne
fais pas d'ouvertures multiples. Comme expliqué dans mon msg, le simple fait
d'appeler la méthode CurrentDB plante l'exécution, ou verrouille la base, qui
ne contient qu'un formulaire et les quelques lignes de code.

2) J'ai lu quelque part chez microsoft qu'il était préférable de passer par
Set bdg = CurrentDb, par exemple pour ensuite faire un set Tbl =
bdg.Tabledefs... D'ailleurs au début je ne faisais pas de Set. Et avec ou
sans le problème est toujours.

Merci quand même pour ta réponse.
Je reste en attente d'autres pistes, si quelqu'un a une idée.

Xav.



Xavier HUE wrote:
Bonjour,


Bonjour,

En effet, je constate un verrouillage systématique lorsque je:
- Ouvre ma base
- Ouvre un formulaire en modification
- Par la suite, l'exécution de code passant sur CurrenDb.Name ou si
je tape la ligne dans la fenêtre d'exécution de VBA: ? CurrentDb.Name
=> En réponse, j'ai le message "Erreur d'exécution '3734' La base de
données a été placé par l'utilisateur "Admin"..."
Impossible dans ce cas d'enregistrer mes modifs si j'en fais.


Tu as une fiche technique à ce sujet :
http://support.microsoft.com/default.aspx?scid=KB;EN-US;274211
Essaie sinon d'utiliser plutôt CurrentDb dans ton code qui ne t'oblige pas à
faire des déclarations et des set.

Arnaud
--
Charte du forum : http://www.mpfa.info/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr






Avatar
Gafish
Xavier HUE wrote:
Bonjour Arnaud,

1) J'ai déjà consulté cet article. Il ne répond pas à mon problème.
Je ne fais pas d'ouvertures multiples. Comme expliqué dans mon msg,
le simple fait d'appeler la méthode CurrentDB plante l'exécution, ou
verrouille la base, qui ne contient qu'un formulaire et les quelques
lignes de code.

2) J'ai lu quelque part chez microsoft qu'il était préférable de
passer par Set bdg = CurrentDb, par exemple pour ensuite faire un set
Tbl = bdg.Tabledefs... D'ailleurs au début je ne faisais pas de Set.
Et avec ou sans le problème est toujours.

Merci quand même pour ta réponse.
Je reste en attente d'autres pistes, si quelqu'un a une idée.


Ta base est peut être corrompue alors.
Ca expliquerait que ça le fasse de facon aléatoire, qu'un compactage résolve
le souci pour un moment et que ca revienne.
Crée toi une nouvelle base et importes-y tous tes objets. Si le problème
finit par réapparaître, c'est qu'il y a quelque chose qui corrompt ta base.
Fermes tu bien tous tes objets par un set nothing ?
Sinon une liste (en anglais) de causes de corruption :
http://minilien.com/?rR70815eOY

Arnaud
--
Charte du forum : http://www.mpfa.info/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Xavier HUE
Merci pour ton lien.
Beaucoup de chose à lire et vérifier...

Ta base est peut être corrompue alors.
Peut être...




Fermes tu bien tous tes objets par un set nothing ?
Oui, je m'y astreins.



J'ai déjà eu des problème à ne pas le faire, style impossible de fermer
Access.

Ceci étant, je ne m'explique pas pourquoi j'ai eu le problème dans une base
neuve, avec un malheureux formulaire et quelques lignes de code (cf mon msg
initial).
Pour l'instant ma base de dév "tient le coup"...
Mais ma main au feu que demain matin, ca remet ça.
Je suis seul à développer sur cette base, notre réseau 100mbits est fiable,
ainsi que le serveur. J'ai d'autres applis qui fonctionne quotidiennement
sans prob.

A+
Xav.



Xavier HUE wrote:
Bonjour Arnaud,

1) J'ai déjà consulté cet article. Il ne répond pas à mon problème.
Je ne fais pas d'ouvertures multiples. Comme expliqué dans mon msg,
le simple fait d'appeler la méthode CurrentDB plante l'exécution, ou
verrouille la base, qui ne contient qu'un formulaire et les quelques
lignes de code.

2) J'ai lu quelque part chez microsoft qu'il était préférable de
passer par Set bdg = CurrentDb, par exemple pour ensuite faire un set
Tbl = bdg.Tabledefs... D'ailleurs au début je ne faisais pas de Set.
Et avec ou sans le problème est toujours.

Merci quand même pour ta réponse.
Je reste en attente d'autres pistes, si quelqu'un a une idée.


Ta base est peut être corrompue alors.
Ca expliquerait que ça le fasse de facon aléatoire, qu'un compactage résolve
le souci pour un moment et que ca revienne.
Crée toi une nouvelle base et importes-y tous tes objets. Si le problème
finit par réapparaître, c'est qu'il y a quelque chose qui corrompt ta base.
Fermes tu bien tous tes objets par un set nothing ?
Sinon une liste (en anglais) de causes de corruption :
http://minilien.com/?rR70815eOY

Arnaud
--
Charte du forum : http://www.mpfa.info/
Recherche dans les archives :
http://groups.google.fr/group/microsoft.public.fr.access?hl=fr