Enregistrement simultanée sur ACCESS

Résolu
cs_juliusaxis Messages postés 2 Date d'inscription samedi 2 avril 2005 Statut Membre Dernière intervention 14 décembre 2008 - 9 déc. 2008 à 22:42
cs_juliusaxis Messages postés 2 Date d'inscription samedi 2 avril 2005 Statut Membre Dernière intervention 14 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!

Julius 0+>

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
3
falstuff Messages postés 40 Date d'inscription jeudi 23 septembre 2004 Statut Membre Dernière intervention 26 avril 2012 2
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.

Salutation
3
cs_juliusaxis Messages postés 2 Date d'inscription samedi 2 avril 2005 Statut Membre Dernière intervention 14 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.

A+

Julius 0+>
0
Rejoignez-nous