belaid52
Messages postés68Date d'inscriptionjeudi 1 juillet 2004StatutMembreDernière intervention23 juin 2011
-
2 févr. 2009 à 23:35
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
8 févr. 2009 à 14:05
Messieurs bonsoir,
J'ai une table qui contient un matricule. Cette table est utilisee et mise a jour par plusieurs personnes en meme temps. Cette rubrique que j'ai appelee Matricule est cree a chaque ajout d'enregistrement(append) dans la table qui est calcule juste en incrementant le dernier matricule enregistre.
comment empecher que deux utilisateurs simultanes creent deux matricules identiques.
exemple :
dernier enregistrement : 128
deux utiliseurs font un Append en meme temps et auront un meme matricule 129
Comment gerer le fait qu'un utilsateur lance un Append, l'autre utilisateur soit bloquer que le premier n'a pas fait un post.
Merci
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 3 févr. 2009 à 22:03
Le mieux me semble t-il à moins que delphiprog démontre le contraire est de mettre en place un champ auto-incrémental qui sera géré directement par le serveur lui-même et ainsi même si 50 utilisateurs cliquent en même temps,
le programe s'en sortira et attribuera 50 numéros incrémentés.
et dans cette solution, nul besoin de bloquer quoi que soit...
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 5 févr. 2009 à 16:25
Le probleme d'incrementation est resolue. j'ai fait "Reponse acceptee".
oui, mais à l'avenir on repose une autre question sur le forum
la règle est une question par topic sinon c'est le bazard...
bon enfin...
Si j'ai bien compris ta question tu souhaites gérer ce qu'on appelle
"les conflits de partage"
Dans ce domaine, je te conseille dans un premier temps de faire simple :
C'est-à-dire utiliser les transactions :(voir la doc sur starttransaction, commit, rollback etc.)
Il faut choisir un mode dans la propriété TransIsolation du TDatabase si tu tiens à te servir du BDE..
Il faut lire la doc delphi également sur ce sujet car ce n'est pas simple..
tiReadCommitted au début.
Dans ce mode, il n'y aucun blocage, chaque utilisateur peut écrire en même temps dans une même table.
C'est le dernier qui écrit qui a raison et qui stocke le résultat.
C'est le plus courant..
Mais il y d'autres modes plus difficile à mettre en oeuvre..
Tu peux par exemple bloquer la table pendant une transaction..mais inconvénient si ton utilisateur ne fait rien, elle restera bloquée (qu'on peut quand même libérer avec un TimeOut mais pas facile à gérer surtout avec le BDE..et il faut derrière traiter tous les messages aux utilisateurs)
belaid52
Messages postés68Date d'inscriptionjeudi 1 juillet 2004StatutMembreDernière intervention23 juin 20111 3 févr. 2009 à 20:51
Salut les amis,
je reformule ma question :
je veux verrouiller ma table tant qu'un utilisateur a fait un append et des qu'il fait un post, la table se deverrouille.
Merci
belaid52
Messages postés68Date d'inscriptionjeudi 1 juillet 2004StatutMembreDernière intervention23 juin 20111 4 févr. 2009 à 20:15
Bonsoir,
je voudrai utiliser une fonction que j'ai trouve sur l'internet mais je ne sais vraiment la mettre en oeuvre :
function TableIsReallyLocked(MyTable: TTable): Boolean;
begin
Result:=False;
with MyTable do
begin
try
LockTable;
except
Result:=True;
end;
end;
end;
A quel moment on avise les utilsateurs que cette table est verrouillee.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 4 févr. 2009 à 22:23
ça concerne les tables paradox..
Cela permet de gérer directement la concurrence d'accès au niveau table, indépendamment du niveau d'isolement en vigueur.
Alors que le niveau d'isolement d'une transaction fixe généralement les types de verrous définis lors de l'exécution d'une requête, l'instruction LOCK TABLE permet un verrouillage plus explicite des lignes d'une table.
Attention, c'est très délicat à manipuler..
On lui préfère généralement une gestion au niveau des composants d'accès à la base.
Et puis le BDE + paradox aujourd'hui, c'est franchement à éviter.
belaid52
Messages postés68Date d'inscriptionjeudi 1 juillet 2004StatutMembreDernière intervention23 juin 20111 4 févr. 2009 à 22:51
Bonsoir,
je vais vous decrire un peu comment je procede.
j'ai mon application sur pc1. Sur le pc2, je crois un raccourci vers l'applacation sur pc1.
l'utilisateur du pc1 et du pc2 se connectent a l'application.
Je n'ai que append, edit, post.....Mais pour les composants d'acces aux tables....
belaid52
Messages postés68Date d'inscriptionjeudi 1 juillet 2004StatutMembreDernière intervention23 juin 20111 5 févr. 2009 à 13:11
bonjour,
Le probleme d'incrementation est resolue. j'ai fait "Reponse acceptee".
c'est suite a votre reponse concernant Lock Table et en lisant ce que vous avez ecrit:
"On lui préfère généralement une gestion au niveau des composants d'accès à la base"
que je voulais savoir quels sont les composants qui peuvent gerer tous ces problemes.
C'est pour ce la que je vous decris un peu ma facon de faire les choses et si je suis sur la bonne voie.
merci
belaid52
Messages postés68Date d'inscriptionjeudi 1 juillet 2004StatutMembreDernière intervention23 juin 20111 6 févr. 2009 à 16:39
Bonsoir,
Une question concernant l'autoincrementation du champs, elle se passe apres avoir poste les donnnees.
Est il possible de voir le numero genere avoir le post pour modifier certains champs?
Merci
belaid52
Messages postés68Date d'inscriptionjeudi 1 juillet 2004StatutMembreDernière intervention23 juin 20111 6 févr. 2009 à 21:31
Bonsoir,
j'ai fait un essai sur un champs autoincremental et l'incrementation se fait apres le post. Peut etre qu'il faut fixer une propriete ou quelque chose d'autre.
je ne sais pas mais j'obtiens l'incrementation apres le post.
merci