mekhanik
Messages postés33Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention20 mai 2007
-
16 févr. 2006 à 10:26
mekhanik
Messages postés33Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention20 mai 2007
-
28 févr. 2006 à 11:35
Ayant développé un logiciel multi-utilisateur se connectant à une base access, je me pose la question de la concurence d'accès. Est-ce à moi de la gérer ou access le fait-il tout seul ? Y a t-il des paramètres à changer pour configurer access ?
Merci
N.B. : Est- ce qu'une transaction concerne la concurence d'accès ou est-ce juste un moyen de garantir le succès ou non d'une suite de mise à jour afin de garantir l'intégrité des données
TrafMaxime
Messages postés288Date d'inscriptionmercredi 4 mai 2005StatutMembreDernière intervention26 janvier 20121 16 févr. 2006 à 10:59
Une transaction permet de vérifier l'intégrité des données, aboutissant seulement si toutes les modifications fonctionnent..
En ce qui concerne la connexion (précise en quoi tu programmes), il y a plusieurs propriétés qui la concerne dans ton connection string.. par exemple préciser un mode exclusif ne permettra pas à un autre utilisateur d'ouvrir, soit toute la table (database locking mode 0 ->je crois..), ou même ligne (->1)...intéressant pour faire des modifs en cascade.
Pour avoir fait des tests en vb.net version 2002, je trouve que le mode exclusive ne fonctionne pas bien.., j'ai donc créé moi-même cette option en plaçant un booléen lorsqu'un utilisateur est en passe de faire un update.
Tout se joue à l'emplacement de ce test de valeur du booléen.
La plupart des commandes dans mon programme sont déconnectée, et au moment des boutons d'updates, l'utilisateur monopolise la connexion pendant un cours instant avant de remmettre au plus vite le booléen à 0..
mekhanik
Messages postés33Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention20 mai 2007 16 févr. 2006 à 14:22
Merci pour ta réponse.
Je programme en vb6. A propos de ton booléen comment gères - tu son accès en exclusion mutuel ? comment fais-tu pour être sur que deux processus ne le lise pas en même temps à vrai ? Si tu peux m'éclairer car ta solution m'intéresse.
TrafMaxime
Messages postés288Date d'inscriptionmercredi 4 mai 2005StatutMembreDernière intervention26 janvier 20121 16 févr. 2006 à 23:31
En fait, au booléen 'vrai, tu associe une ligne ds ta base de donnée
avec un numéro de clé primaire(ou ID) lu au moment de placer le booléen
(et tu ne déclare pas ta connexion au mode exclusif au passage, les
deux utilisateurs ont passé la barr 'booléen, et ressorte avec le jeton
qui leur permet tous les deux de lire (&write) les données.)
Ainsi ils essaieront tous deux d'écrire au meme n° ID et la tentative
(placé dans un try..catch (.net) ou 'on error... go to' en vb6 )
De là ils sont tout d'eux placé à nouveau au tirage du jeton.. et cette histoire ne peut pas durer bien longtemps...
Enfin bonne chance pour les tests.. tu ne sais jamais vraiment si t'as cliqué au bon moment...
Donne des nouvelles, ton choix m'intéresses aussi.. (parce que sur ce
point le dossier est épais et on en fait des bouquins entier, nb : 'la
progammation concurrente..)
mekhanik
Messages postés33Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention20 mai 2007 28 févr. 2006 à 11:35
Salut, en fait après quelque test je me suis rendu compte que quand je mettais mes requetes dans une transaction begin commit, il n'y avait plus de problème de concurrence. Donc je n'ai pas cherché plus loin. J'ai effectué mes tests en lançant 4 fois le même programme sur le même poste. Lorsqu'il n'y a pas de transaction, une ou deux requetes passent mais j'ai systématiquement une erreur de risque de doublon pour les autres alors qu'avec une transaction aucune erreur et table bien mis à jour