|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : octobre 2002 Messages : 21 ![]() |
Bonjour,
je suis entrain d'écrire un programme qui utilise firebird et les composants interbase de delphi 6. Une transaction doit se terminer par un Commit ou un CommitRetaining pour valider les données. Le Commit ferme tous les Dataset ouverts (c'est normal). Pour contourner ce détail, je fais des CommiRetaining qui évite la fermeture des DataSets puis à la fin d'une suite de traitements, un Commit. J'ai lu qu'Interbase mémorisait chaque transaction. Et pour les transactions CommitRetaining en gardait un enregistrement. Ma question est : Est-ce qu'après le Commit final ma base de données garde les références au précédentes transaction ? merci |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Bonjour,
Vous vous posez trop de questions et du coup vous vous inquiétez pour rien. Le mécanisme de version d'enregistrement est assez complexe. Et ce dont vous parlez n'est pas liè au commit et commit retaining. Il y a une version d'enregistrement dans le cas ou vous avez ouvert une transaction snapshot et que votre enregistrement est mis à jour par une autre transaction (par un commit ou commit_retaining). Cette version va servir pour la transaction snapshot (pour quelle puisse lire l'enregistrement telle qu'il était avant sa mise à jour). On voit bien là que le commit ou commit retaining n'influe pas sur le fait qu'il y a deux versions de l enregistrement. Il ne faut pas s'inquiéter outre mesure, la gestion de ce versionning ne vous fera pas grossir votre base de mannière inconsidéré (je pense qu au départ c'est surtout ca votre inquiétude). Ce qu'il faut retenir d'une mannière générale, c'est que plus une transaction est longue plus elle sera lourde à maintenir et à gérer. |
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : octobre 2002 Messages : 21 ![]() |
merci pour votre réponse
J'ai choisi de gérer une transaction par fenêtre de dialogue afin de gérer un volume d'influence restreint sur la base. Un bouton refresh permet de commiter au cas où j'ai besoin d'infos rescentes. Sinon tant que la fenêtre reste ouverte, toute validation correspond à un commit retaining. ça me permet d'écrire plus tard une fonction rollback afin d'annuler toutes les modifs sur la base depuis que la fenêtre est ouverte ou le dernier refresh. a+ Jacques |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Le rollback annulera tout depuis le dernier Commit retainning (ou commit) mais pas depuis l'ouverture de votre fenêtre.
|
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : octobre 2002 Messages : 21 ![]() |
Je fais donc une erreur de logique ?
si ma transaction est créée et démarrée à l'ouverture de la fenêtre, un rollback sur cette transaction a-t-elle donc des répercutions sur les autres transactions (mise à part les infos qui la concerne) ? Jacques |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Le rollback annule toutes les opérations que vous avez faites non pas depuis l'ouverture de la transaction mais depuis le dernier commit_retainning. (s'il n'y a pas eut de commit_retainning dans votre transaction, c'est en effet toute la transaction depuis sa création qui est annulée)
Le commit_retainning valide les modification de la même mannière qu'un commit. La seule différence entre les deux c'est que le commit_retainning maintient la transaction ouverte (comme son nom l'indique)). |
|
|
00
|
|
|
#7 | |
|
Invité régulier
![]() Inscription : octobre 2002 Messages : 21 ![]() |
Merci pour ces précisions car malgrè de nombreuses recherches, j'ai eu du mal à appliquer correctement la notion de transaction. (l'habitude du BDE
Citation:
Ainsi les données devenaient accessibles ou non aux autres. Mais il est vrai que dans le context "snapshot" et read commited (j'emploie ce dernier pour l'occasion) font varier le comportement du moteur de la base d'une manière importante et même surprenante. Jacques |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com