besoin d'explication sur accés concurent ... [ Client serveur ] - SQL/NoSQL - Programmation
Marsh Posté le 02-05-2002 à 08:57:42
tu dois utiliser des locks sur les objets pour que tes transactions fonctionnent correctement.
Genre du 2PC (2 phase commit) ou un système de verrour
commit = valider les changements dans la BD
rollback = annuller ces changements (= revenir à la situation telle qu'elle était au départ).
Pour ton code il est complètement foireux. Suppose que tu as 3 postes qui attaque la BD en meme temps. Tu as donc 3 fois la meme instance de ta méthode qui s'execute.
Place restante = 1
Poste 1 = Place restant -> update
pendant l'update (donc avant -1)
Poste 2 & 3 place restante = 1 -> update chacun de leur cotté et place disponible -1
donc tu te retrouves avec placeDisponible = -2
C'est un cas d'école la réservation de billets d'avion. Tu ferais bien de relire ton cours ... (parce que le roolback ne sert absolument pas a ce que tu veux lui faire faire)
Marsh Posté le 02-05-2002 à 12:00:41
Je suis désolé j'ai pas de cours la dessus , mais stp indique moi de la doc ...
please help
Marsh Posté le 02-05-2002 à 12:45:57
australe a écrit a écrit : Je suis désolé j'ai pas de cours la dessus |
Marsh Posté le 02-05-2002 à 12:52:09
c'est écrit en quoi ton logiciel ...
Marsh Posté le 02-05-2002 à 22:03:36
J'ai effectivement pas de cours , car c'est a nous de se mettre dans le bain . Il parait que c'est seulement en etant confronté au probleme que l'on comprendra réellement le cours
Marsh Posté le 03-05-2002 à 00:18:42
Je ne m'y connais pas trop en SQL mais cela est possible je ferais une liste d'attente (un peu comme un serveur d'impression c'est chacun sont tour )
Marsh Posté le 03-05-2002 à 09:23:53
ta question est intéressanete mais deplhi je connais pas du tout. Ca m'étonne qd meme qu'on vous donne pas de cours. C'est vraiment pas sympas. Et puis dire que ca va s'apprendre comme ca c'est le meilleur moyen d'éduquer des programmeurs avec un paquets de rustines dans la main ...
Marsh Posté le 03-05-2002 à 09:31:29
oui , mais si 4 personne se connecte ne meme temps , et que le premier fume une clope , les autres il peuvent se gratter en attendant qu'il termine sa reservation ...
Marsh Posté le 03-05-2002 à 10:05:03
australe a écrit a écrit : oui , mais si 4 personne se connecte ne meme temps , et que le premier fume une clope , les autres il peuvent se gratter en attendant qu'il termine sa reservation ... |
j'ai bien compris ton problème ... si c'est à moi que tu t'adresses évidemment.
Marsh Posté le 04-05-2002 à 11:47:38
je peux évidemment te filer un cours que j'ai eu à l'unnif en PDF. Je ne sais pas si ca te servira ... Si ca t'intéresse msg me
Marsh Posté le 04-05-2002 à 12:37:57
australe a écrit a écrit : oui , mais si 4 personne se connecte ne meme temps , et que le premier fume une clope , les autres il peuvent se gratter en attendant qu'il termine sa reservation ... |
il faut mettre interdiction de fumer en utilisant ton prog !!!lol
non plus serieusement tu envoi les données petit a petit ? ou en une seule fois a la fin ?
Marsh Posté le 01-05-2002 à 22:35:52
J'au un logiciel a faire pour des reservations de billet d'avion ... jusque la rien de dificil ....
Mais quand je prend le meme executable et que j'attaque ma base Oracle avec 3 postes pour 1 seule et unique place restante ... le sablier SQL généré par oracle apparait et 2 postes se bloquent ...
J'aimerai que l'on m'explique le role du Rollback ?
------------------------------------- du commit ?
Comment faire pour eviter cette situation ? Il convient que plusieur postes doivent pouvoir se servir de la base de donnée et non pas une seule machine seulement ...
Please confrére en detresse ...
Enfin il me semble que si je pouvais faire une reqete SQL testant le nombre de place avec une condition sa pourait m'aider...
du genre If plus de place then
Message d'erreur
Rollback
else
Update ...
placedisponible :=lacedisponible-1;
merci d'avance