cs_juliusaxis
Messages postés2Date d'inscriptionsamedi 2 avril 2005StatutMembreDernière intervention14 décembre 2008
-
9 déc. 2008 à 22:42
cs_juliusaxis
Messages postés2Date d'inscriptionsamedi 2 avril 2005StatutMembreDernière intervention14 décembre 2008
-
14 déc. 2008 à 00:57
Salut...
Je bosse actuellement qui devait fonctionner pour une seule machine, pour un seul utilisateur, se servant d'une base access...
Le client (ils sont géniaux ces gars là) me demande à présent de le mettre sur un petit réseau interne, avec la possibilité pour plusieurs utilisateurs de bosser en même temps.
N'étant pas un programmeur à la base, je suis parti dans le code comme un sac et maintenant, j'ai bien entendu un GROS bug lors des enregistrements simultanées...
A moindre effort, quelqu'un a t'il un morceau de code pouvant me permettre de récupérer l'état d'utilisation de la base avant une requête? ou une mamaille permettant de différer l'enregistrement de quelques secondes?
Est t'il possible de savoir de quelle manière la base est utilisé (en lecture, insert, delete...)
Globalement, ma logique est de repérer si la base est occupé par un enregistrement, ne pas envoyer de message d'erreur, mais mettre en place un léger délais et recommencer (voir état, modif si besoin des données pour éviter doublon..., et enregistrement), elle est bon ma logique???
Le programme étant fini à 95%, merci de m'aider vite!!! Grazias mucho!
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 9 déc. 2008 à 23:24
Salut
Regarde si ton objet de connexion a une propriété "State" ou "Status"
Sinon, pense aussi à travailler avec les Transactions si le poste à besoin d'exécuter plusieurs requètes, par exemple mettre à jour plusieurs tables à partir des champs de saisie :
Sur ton objet connexion, avant de commencer ta 1ère requète : .BeginTrans
Fais toutes tes requètes à la suite
Quand tu arrives à la fin :
- Si tu valides --> .CommitTrans
- Si tu veux annuler à cause d'une erreur, par exemple --> .RollbackTrans
Ces trois mots clé sont des propriétés de ton objet de connexion
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
falstuff
Messages postés40Date d'inscriptionjeudi 23 septembre 2004StatutMembreDernière intervention26 avril 20122 12 déc. 2008 à 02:12
Salut,
Tout dépends comment tu as gérer tes champs dans les fenetres access. Si tes objets sont directement lié à des champs de tes tables ou si tu utilises des objets indépendants. Dans le 1er cas, je ne crois pas que tu es bcp de solutions. Car access met à jour les champs instantannément si ceci sont directement lié.
Dans le second cas, il suffit de gérer l'erreur.
Perso, pour éviter ces soucis je gére moi meme l'acces à un enregistrement. Si un utilisateur à un enregistrement d'ouvert, tous les autres utilisateurs ouvrant cet enregistrement seront en lecture seule. Pour cela je stock dans les table l'idUtilisateur qui a ouvert le premier l'enregistrement et à la fermeture de ce dernier je libere mon champ dans la table.
cs_juliusaxis
Messages postés2Date d'inscriptionsamedi 2 avril 2005StatutMembreDernière intervention14 décembre 2008 14 déc. 2008 à 00:57
Ok. Merci les gars...
La solution est surement dans le mix des 2 réponses.
Comme tu dis Fallstuff, je comptais gérer l'erreur, mes champs ne sont pas liés aux tables. il faut partout passer par des boutons d'enregistrement, sinon, pas de changement.
Comme tu dis Jack, je va cogiter sur les .biduleTrans... Juste savoir... cette méthode renvoi une valeur, modifie un statut?
Eventuellement, si tu as 2 ligne de code, pour être bon dans la grammaire, se serait royal!!!
En attendant, merci à vous 2... je vais bosser de mon côtés.