Probléme de concurrance d'accés a une BDD réseau

toubal_99 Messages postés 45 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 29 juillet 2008 - 30 nov. 2006 à 20:26
toubal_99 Messages postés 45 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 29 juillet 2008 - 30 nov. 2006 à 21:30
salut
je vais essayer de bien expliquer mon probleme :
je developpe une application de gestion de contrats de maintenance en utilisant delphi,ADO,Mysql.
par exemple un contrat regroup plusieurs equipement les equipement peuvent etre des pc imprimentes ou autres il sonts stoqués dans une meme table
pour chaque equipement ya plusieurs atributs : model,n°serie,localisation ext...
quand un contrat est enregistrer on doit remplire toutes les informations pour chaque equipement inséré , au cours de la periode de validitée d'un contrat il se peut qu'un equipement change de localisation donc on doit la changer, ou bien il se peut qu'un equipement soir remplacé par un autre donc on doit editer le contrat j'ais suivie l'approche suivante :

01-editer le contrat : recuperer la lise des equipements avec une requette TADOQuery
02-transferer la lise des equipement dans un ListeView (Du TADOQuery vers le ListeView)avec une boucle
03-l'utilisateure apporte les modifications nesaisaire pour les equipements consérnés dans le ListeVieuw a travers des masques de saisies specifiques.(la durée de cette etape est relativement longue)
04-a la fin l'utilisateure apuis sur le bouton enregister pour enregister les modifications dans la BDD (je transfert le contenue du ListeView vers la BDD avec une boucle en utilisant les procedures de delphi de ce genre:

Equipement.Insert;
Equipement.fieldbyName('N_equ').AsInteger:=StrToInt(a);
.......
Equipement.fieldbyName('N_loc').AsInteger:=StrToInt(g);
Equipement.Post;
)

le probleme c'est comment gerer la concurance d'accés a la BDD par exemple si entre l'ettape 01 et 04 un autre utilisateure fait une autre modification du contrat sur un autre PC ses modifications ne serons pas prisent en compte .
je ne sait pas si on peut utiliser les transactions dans mon cas si oui comment ?
j'ai aussi entendue parler du Lock Table si ca convien comment ?

Merci .

3 réponses

cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
30 nov. 2006 à 20:50
Le plus simple est lorsque tu edites le contrat, tu édites son enregistrement dans la table des contracts, comme ça, plus personne ne peut editer tant que tu es dessus ...

Je crois que ça devrait etre comme ça sous ADO:
try
  tablecontrat.edit;


  ....
except
  ShowMessage("ce contrat est en edition sur un autre poste!");
end;


Tu fais le tablecontrat.post (ou tablecontrat.Cancel) quand tu enregistres le contract à la fin !!!
A+


 
0
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
30 nov. 2006 à 20:56
Ha oui, une derniere chose, la table doit etre en mode "Pessimistic" ce qui veut dire qu' un seul utilisateur peut editer le même enregistrement. Mais je ne sais pas comment on fait sous ADO, je n' ai pas Delphi sous la main en ce moment ...

Pour info, il existe le mode "Optimistic", plusieurs personnes (techniquement on parle de "Cursor") peuvent editer le même registre mais seul le 1er à enregistrer (faire le "post") sera validé!!!
A+
0
toubal_99 Messages postés 45 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 29 juillet 2008
30 nov. 2006 à 21:30
j'ai pas utiliser la methode.EDIT , pour chaque enregistrement modifiée je le suprime de la table et je le rajoute ensuite sous sa forme modifiée
mais meme si j'avais utiliser le edit ca aurais doner la meme chose parceque les informations contenue dans le ListeVieuw sont de touite façon pas ajours puisque entre le momont u j'ai fait la lecture (etape 01) et le momont ou je commance a modifier les enregistrement (etape 04) le contenue de la tables des equipement a changer et n'est pas le meme que ce que j'avais u avec la requette a l'ettape 01
0
Rejoignez-nous