Probléme de table en mode exclusif

Fermé
novice06100 Messages postés 42 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 30 août 2016 - 27 août 2016 à 09:29
 Utilisateur anonyme - 30 août 2016 à 21:19
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.

A voir également:

5 réponses

Utilisateur anonyme
27 août 2016 à 20:26
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+
0
novice06100 Messages postés 42 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 30 août 2016
Modifié par novice06100 le 27/08/2016 à 20:32
D'abord merci pour ton intervention.

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.
0
Utilisateur anonyme > novice06100 Messages postés 42 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 30 août 2016
27 août 2016 à 20:40
Mais tu les ouvres juste de cette façon :
docmd.open..............

Ou tu utilises des variables ou des objets déclarés par :
set

?
0
novice06100 Messages postés 42 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 30 août 2016
27 août 2016 à 20:48
juste en docmd.open
0
Utilisateur anonyme > novice06100 Messages postés 42 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 30 août 2016
Modifié par HDU le 27/08/2016 à 20:54
Et aucune variable du genre :
dim a as integer
dim b$ as string
...


?
0
novice06100 Messages postés 42 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 30 août 2016
Modifié par novice06100 le 27/08/2016 à 20:55
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
0
novice06100 Messages postés 42 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 30 août 2016
Modifié par novice06100 le 27/08/2016 à 20:56
je ne sais même pas ce que c'est ce type de code
0
novice06100 Messages postés 42 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 30 août 2016
27 août 2016 à 20:59
à savoir que je suis vraiment autodidacte sur access. J'utilise en grande partie l'interface de programmation.
0
novice06100 Messages postés 42 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 30 août 2016
Modifié par novice06100 le 27/08/2016 à 21:08
Je pensais que le problème venait du rafraichissement du fichier ldb, qui ne se rafraichirait pas bien si on ferme access avec des formulaires ouverts. Mais je ne sais pas comment le vérifier. Quelque fois le ldb reste présent sur le serveur alors que tous les utilisateurs se sont déconnecté.
0
Utilisateur anonyme
27 août 2016 à 21:25
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' ?
0
novice06100 Messages postés 42 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 30 août 2016
29 août 2016 à 08:20
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?
0
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+
0
Utilisateur anonyme > Utilisateur anonyme
29 août 2016 à 23:37
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+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
novice06100 Messages postés 42 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 30 août 2016
30 août 2016 à 09:14
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.
0
Utilisateur anonyme
30 août 2016 à 21:19
Salut,

tiens nous au courant.

A+
0