Probléme de table en mode exclusif
novice06100
Messages postés
42
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour;
Voici mon problème. J'ai une base de données dans mon service qui tourne depuis maintenant 5 ans. J'ai une base dorsale sur un serveur et des bases frontales sur chaque poste utilisateur.
Depuis 5 ans tous fonctionnaient bien. Nous n'étions 7 utilisateurs et aucun bug. Il y a quelques semaines j'ai intégré d'autres utilisateurs et là j'ai un souci qui est apparu. Nous sommes maintenant 15 utilisateurs et de façon aléatoire, sur certains formulaires, j'ai un message d'erreur " la table est ouverte en mode exclusif par un autre utilisateur ou est utilisée par la programmation". Ce qui est le plus surprenant c'est que les autres utilisateurs continuent à pouvoir travailler sur la base. Et au bout de quelques minutes, après fermeture et réouverture de la base ça refonctionne. Le bug n'est pas systématiquement sur le même formulaire ou sur la même table. Je me suis dit qu'il y avait peut-être des problèmes de version access. J'ai tout migré sur le 2007, on utilise 2010 sur tous les postes. J'ai essayé de programmer des fermetures automatiques surtimer pour libérer les connexions. Mais c'était encore pire. le défaut apparaissait plus souvent et sur plus de poste. Toutes les bases sont bien en mode partagé. Si vous avez des idées. Parce que je suis dans l'impasse. Dans ce que j'ai lu, access pourrait gérer jusqu'à 255 utilisateurs, on en est loin.
Merci par avance.
Voici mon problème. J'ai une base de données dans mon service qui tourne depuis maintenant 5 ans. J'ai une base dorsale sur un serveur et des bases frontales sur chaque poste utilisateur.
Depuis 5 ans tous fonctionnaient bien. Nous n'étions 7 utilisateurs et aucun bug. Il y a quelques semaines j'ai intégré d'autres utilisateurs et là j'ai un souci qui est apparu. Nous sommes maintenant 15 utilisateurs et de façon aléatoire, sur certains formulaires, j'ai un message d'erreur " la table est ouverte en mode exclusif par un autre utilisateur ou est utilisée par la programmation". Ce qui est le plus surprenant c'est que les autres utilisateurs continuent à pouvoir travailler sur la base. Et au bout de quelques minutes, après fermeture et réouverture de la base ça refonctionne. Le bug n'est pas systématiquement sur le même formulaire ou sur la même table. Je me suis dit qu'il y avait peut-être des problèmes de version access. J'ai tout migré sur le 2007, on utilise 2010 sur tous les postes. J'ai essayé de programmer des fermetures automatiques surtimer pour libérer les connexions. Mais c'était encore pire. le défaut apparaissait plus souvent et sur plus de poste. Toutes les bases sont bien en mode partagé. Si vous avez des idées. Parce que je suis dans l'impasse. Dans ce que j'ai lu, access pourrait gérer jusqu'à 255 utilisateurs, on en est loin.
Merci par avance.
A voir également:
- Ebp la base de données est verrouillée et ouverte en mode exclusif
- Mode avion - Guide
- Mode sécurisé samsung - Guide
- God mode - Guide
- Base de registre - Guide
- Mode d'emploi - Guide
5 réponses
Bonjour,
manipules tu des objets dans ta base via vba ?
Si oui, tu penses bien à les libérer après chaque traitement par set tonobjet=nothing ?
A+
manipules tu des objets dans ta base via vba ?
Si oui, tu penses bien à les libérer après chaque traitement par set tonobjet=nothing ?
A+
et j'utilise des commandes de ce type pour afficher certain champs ou ouvrir certain formulaire en fonction d'une requête:
If DCount("*", "intervenant Requête") <> 0 And DCount("*", "versionbase") <> 0 Then
DoCmd.OpenForm "FormulaireMO", acNormal
ElseIf DCount("*", "intervenant Requête Tech") <> 0 And DCount("*", "versionbase") <> 0 Then
DoCmd.OpenForm "page principale", acNormal
DoCmd.OpenForm "alerte commande et devis en cours", acNormal
Else
DoCmd.OpenForm "erreur sur ouverture", acNormal
End If
If DCount("*", "datevalidite") > 0 And DCount("*", "b***") > 0 Then
DoCmd.OpenForm "datevaliditecompte", acNormal
End If
If DCount("*", "intervenant Requête") <> 0 And DCount("*", "versionbase") <> 0 Then
DoCmd.OpenForm "FormulaireMO", acNormal
ElseIf DCount("*", "intervenant Requête Tech") <> 0 And DCount("*", "versionbase") <> 0 Then
DoCmd.OpenForm "page principale", acNormal
DoCmd.OpenForm "alerte commande et devis en cours", acNormal
Else
DoCmd.OpenForm "erreur sur ouverture", acNormal
End If
If DCount("*", "datevalidite") > 0 And DCount("*", "b***") > 0 Then
DoCmd.OpenForm "datevaliditecompte", acNormal
End If
Re,
tu ne sais pas ce qu'est ce code ? Ce n'est pas toi qui l'a fait ?
Si le .ldb ne s'efface pas, c'est qu'un utilisateur a mal fermé la base. Tu peux ouvrir ce ldb avec le bloc note, cela te permettra de savoir le poste et l'utilisateur.
Aussi, ça me fait mal aux yeux (très mal), je vois des noms de requêtes et de formulaires avec des " " (espaces). C'est franchement source de bugs.
Par contre, tu as rajouté des utilisateurs. Tous avec la même base que les 1ers ? Peux tu vérifier, dans chaque formulaire, sur chaque poste, dans les propriétés, que 'vérouillage' est bien sur 'aucun' ?
tu ne sais pas ce qu'est ce code ? Ce n'est pas toi qui l'a fait ?
Si le .ldb ne s'efface pas, c'est qu'un utilisateur a mal fermé la base. Tu peux ouvrir ce ldb avec le bloc note, cela te permettra de savoir le poste et l'utilisateur.
Aussi, ça me fait mal aux yeux (très mal), je vois des noms de requêtes et de formulaires avec des " " (espaces). C'est franchement source de bugs.
Par contre, tu as rajouté des utilisateurs. Tous avec la même base que les 1ers ? Peux tu vérifier, dans chaque formulaire, sur chaque poste, dans les propriétés, que 'vérouillage' est bien sur 'aucun' ?
Salut,
Oui, c'est moi qui l'ai fait, mais j'ai essentiellement travaillé via l'interface Access. Donc très peu de VBA. ça fait que quelques mois que j’insère des commandes VBA dans la base. Mais du coup je ne respecte pas forcement toutes les règles. Mais je peux déclarer les variables si ça peut régler mon problème.
Et ouai je sais. J'ai commencé il y a 6 ans, vraiment novice. Je ne connaissais pas toutes les règles de programmation et aujourd'hui la base est tellement grande, prés de 500 objets, que je n'ai pas le temps de tout reprendre. Mais c'est sur que pour la prochaine je ferais plus attention.
J'ai compris tes histoires de variable. Sur les codes que j'ai programmé, je ne les ai pas déclarés. Mes tous les codes générés par Access, ils déclarent bien toutes les variables.
En ce qui concerne le ldb dans notes j'ai des symboles cryptés, j'ai regardé un peu sur les forums et semblerait que les versions d'access 2007 et 2010 cryptes le ldb. Donc pas très utilisable. Il y a des programmes qui permettent de les décrypter. Mais je doute que mon administrateur réseau veuille me les installer.
Du coup que dois je faire pour libérer les objets?
set tonobjet=nothing doit être mis dans tous les objets?
Oui, c'est moi qui l'ai fait, mais j'ai essentiellement travaillé via l'interface Access. Donc très peu de VBA. ça fait que quelques mois que j’insère des commandes VBA dans la base. Mais du coup je ne respecte pas forcement toutes les règles. Mais je peux déclarer les variables si ça peut régler mon problème.
Et ouai je sais. J'ai commencé il y a 6 ans, vraiment novice. Je ne connaissais pas toutes les règles de programmation et aujourd'hui la base est tellement grande, prés de 500 objets, que je n'ai pas le temps de tout reprendre. Mais c'est sur que pour la prochaine je ferais plus attention.
J'ai compris tes histoires de variable. Sur les codes que j'ai programmé, je ne les ai pas déclarés. Mes tous les codes générés par Access, ils déclarent bien toutes les variables.
En ce qui concerne le ldb dans notes j'ai des symboles cryptés, j'ai regardé un peu sur les forums et semblerait que les versions d'access 2007 et 2010 cryptes le ldb. Donc pas très utilisable. Il y a des programmes qui permettent de les décrypter. Mais je doute que mon administrateur réseau veuille me les installer.
Du coup que dois je faire pour libérer les objets?
set tonobjet=nothing doit être mis dans tous les objets?
Re,
pour le .ldb, je ne savais pas, utilisant toujours 2003...
L'admin réseau, en lui expliquant, pourra au moins regarder sur le serveur où se trouve la base dorsale quel utilisateur l'a créé...
Le set = nothing "doit" être mis à chaque fois que tu libères un objet ou une variable que tu auras défini auparavant par un set machinchose=truc. A la fin, set machinchose=nothing.
Mais si tout fonctionnait bien, avant l'ajout des utilisateurs (il n'y a eu que cela comme "évolution" ?), il faut en premier investiguer de ce côté. Il s'agit d'utilisateurs ou de machines ou les 2 ?
A+
pour le .ldb, je ne savais pas, utilisant toujours 2003...
L'admin réseau, en lui expliquant, pourra au moins regarder sur le serveur où se trouve la base dorsale quel utilisateur l'a créé...
Le set = nothing "doit" être mis à chaque fois que tu libères un objet ou une variable que tu auras défini auparavant par un set machinchose=truc. A la fin, set machinchose=nothing.
Mais si tout fonctionnait bien, avant l'ajout des utilisateurs (il n'y a eu que cela comme "évolution" ?), il faut en premier investiguer de ce côté. Il s'agit d'utilisateurs ou de machines ou les 2 ?
A+
J'avais rencontré il y a des années, des soucis de fermeture (verrouillage de fichiers), mais cela ne concernait pas directement Access, mais les fermetures des sessions TSE.
Mais ça vaut le coup de tester. Regardes de ce côté : https://www.generation-nt.com/uph-clean-nettoyage-profil-utilisateur-nettoyer-telecharger-telechargement-25440.html
Si l'admin fait la gueule, dis lui que cela ne mange pas de pain, et pourra lui éviter des soucis dans le futur (j'avais galéré à trouver cette astuce).
A+
Mais ça vaut le coup de tester. Regardes de ce côté : https://www.generation-nt.com/uph-clean-nettoyage-profil-utilisateur-nettoyer-telecharger-telechargement-25440.html
Si l'admin fait la gueule, dis lui que cela ne mange pas de pain, et pourra lui éviter des soucis dans le futur (j'avais galéré à trouver cette astuce).
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai remis le nez dans tous les codes VBA et ai trouvé deux requêtes que je ne refermait pas. J'ai donc utilisé un :
do Cmd .Close ac Query, "Ta Requete"
Après un docmd Openquery
J'ai également fait du tri. J'avais pas mal de macro via l'interface qui n'étaient pas forcément optimisés, je les ai programmé en VBA en déclarant les variables comme tu me l'as suggéré. Déjà ces exécutions sont plus rapides et je vais voir si le problème de mode exclusif se reproduit.
Mais je pense que ces requêtes en docmd Openquery sans les fermer dernière, ça ne devait pas être très bon. Ce qui expliquerait que les autres utilisateurs puissent continuer à travailler dans certains cas.
do Cmd .Close ac Query, "Ta Requete"
Après un docmd Openquery
J'ai également fait du tri. J'avais pas mal de macro via l'interface qui n'étaient pas forcément optimisés, je les ai programmé en VBA en déclarant les variables comme tu me l'as suggéré. Déjà ces exécutions sont plus rapides et je vais voir si le problème de mode exclusif se reproduit.
Mais je pense que ces requêtes en docmd Openquery sans les fermer dernière, ça ne devait pas être très bon. Ce qui expliquerait que les autres utilisateurs puissent continuer à travailler dans certains cas.
je ne suis pas programmeur,donc oui je fait un certain nombre d'action en VBA ouverture de formulaire fermeture et quelques requêtes. mais non je ne les libères pas.
docmd.open..............
Ou tu utilises des variables ou des objets déclarés par :
set
?
?