Précédent   Forum des professionnels en informatique > Bases de données > Firebird > Connexion aux bases de données
Connexion aux bases de données Forum d'entraide sur la connectivité Firebird: composants, drivers, transactions, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/09/2005, 10h50   #1
Invité régulier
 
Inscription : octobre 2002
Messages : 21
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 21
Points : 7
Points : 7
Par défaut Transactions CommitRetaining et Commit avec Delphi

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
Jacques Deyrieux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2005, 15h57   #2
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
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.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2005, 16h07   #3
Invité régulier
 
Inscription : octobre 2002
Messages : 21
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 21
Points : 7
Points : 7
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
Jacques Deyrieux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2005, 16h10   #4
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Le rollback annulera tout depuis le dernier Commit retainning (ou commit) mais pas depuis l'ouverture de votre fenêtre.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2005, 16h15   #5
Invité régulier
 
Inscription : octobre 2002
Messages : 21
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 21
Points : 7
Points : 7
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
Jacques Deyrieux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2005, 16h19   #6
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
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)).
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2005, 16h34   #7
Invité régulier
 
Inscription : octobre 2002
Messages : 21
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 21
Points : 7
Points : 7
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:
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)).
c'était cette nuance qu'il me manquait je voyais uncommit retaining comme une façon de placer des données dans une pile puis le commit final venant écrire le contenu de la pile et remettre l'index de la pile à zéro le rollback retaining faisant décrémenter cette pile d'un cran et le rollback mettant l'index à 0 sans enregistrer le contenu.

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
Jacques Deyrieux est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h02.


 
 
 
 
Partenaires

Hébergement Web