|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre du Club
![]() Inscription : février 2004 Messages : 166 ![]() |
slt 1 : D'aprés ce que j'ai compris en lisant les posts, il faut utiliser des transactions différentes pour chaque type d'accés à une base ( INSERT, UPDATE, LECTURE,DELETE). Pour résumer il faut donc au moins 4 composants transactions ( + 1 pour le composant IbDatabase ). 2 : Les transactions sont initiées par les clients avec : Code :
Dans le cas ou on utilise une transaction spécifique pour un évènement ( par ex : INSERT ) on fera pour valider l'insertion un CommitRetaining, et un RoolbackRetaining pour annuler ces insertion. Il faut auparavant vérifier je suppose s'il s'agit bien de la transaction souhaitée ? avec un InTransaction : 4 : Est ce que IB6 affiche un message si un client essaie de modifier un enreg si un autre client est en train de le visualiser ou de le modifier par exemple ? 5 : faut il mieux utiliser un trigger ou une PS pour signaler à un client par exemple que l'enreg qu'il a saisi existe déja ? Car dans une PS si on détecte que l'enreg existe déja, on l'annule par un roolback, alors que dans le trigger le traitement se fera dans l'évenement BEFORE_INSERT par exemple ! Quelle est la meilleure solution ? Merci A+ |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
1 : Non on peut tout faire avec une transaction. De même que l'on peut utiliser une transaction différente par gros traitement (par écran par exemple) et en effet certains preferent utiliser une transaction pour les select et une autre pour les mises à jours (Insert/update/delete)
2 :Oui c'est fait automatiquement lors de l'ouverture d'un IBDataSet ou IBQuery ou ... Par contre pour la fermer il est en effet preférable de le faire mannuellement car comme ca vous maitrisez le moment ou vous valider ou annuler vos modifications. 3 :Non le InTransaction retourne un resultat Boolean. Il indique juste si une transaction est en cours (ouverte). Afin d'éviter de faire un Start alors que la transaction est dejà ouverte ou de faire un commit ou rollback alors que la transaction est déjà fermée. 4 :Si une autre personne visualise sur son écran un enregistrement que vous modifiez et validiez (Commit) la personne ne le verra pas. Pour voir les modification il faut qu'elle rafraichisse son enregistrement (à Condition que la transaction soit en mode readcommited car si elle est en mode snapshot il faut fermer la transaction et la réouvrir). Par contre si elle essaye de modifier l'enregistrement de son écran que vous avez modifié (sans qu'il ne l'ai vue) il aura un message d'erreur lui indiquant qu'une autre personne à déjà modifié son enregistrement. Il faut donc commencer par rafraichir l'enregistrement pour pouvoir le modifier et avoir la dernière version. 5 Les triggers et les PS ne s'utilisent pas de la même façon, a vous de voir ce que vous trouvez le plus pratique. Le trigger sera déclanché (et donc votre controle) pour chaque insert (que vous le fassiez depuis votre application ou depuis IBConsole) alors que la PS (et donc le controle que vous ferez dedans) ne sera déclanché que lorsque vous l'utiliserez. (Donc celà vous laisse la possibilité de faire des insert sans controle). |
|
|
00
|
|
|
#3 | |
|
Membre du Club
![]() Inscription : février 2004 Messages : 166 ![]() |
Merci barbubulle pour ces explications, je commence à entrevoir le bout du tunnel. Vous dites : Citation:
D'autre part : n'est donc pas obligatoire puisqu'il est automatique à l'ouverture d'un IBQUERY ou d'un IBDATASET d'une PS ..., mais fortement conseillé afin d'avoir la main mise sur les traitement ? merci encore a+ |
|
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Citation:
Le composant IBTransaction ne permet d'ouvrir qu'une seule transaction à la fois. Et donc la propriété InTransaction de ce composant indique simplement si la transaction est ouverte ou pas. Citation:
Ce qui est fortement conseillé c'est de faire un commit ou RollBack de manière explicite dans votre programme. |
||
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : février 2004 Messages : 166 ![]() |
merci pour tout Barbibulle, je ferais surement un post pour reprendre un peu tout ca a+ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com