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
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...
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)
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
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.
ç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.
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....
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
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
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