TSDBQuery.SavePoint
| TSDBQuery = class (TObject) | Interface de TSDBQuery | Exemples de TSDBQuery |
Pose un SAVEPOINT dans une transaction
Syntaxe
function SavePoint(): String
Remarques
La fonction permet de poser un SAVEPOINT dans le cadre d'une transaction de TSDBQuery.
La fonction génère automatiquement un nom pour le savepoint et le renvoie.
On peut voir un SavePoint comme un Commit partiel, ce qui permet de faire des mécanismes avancés de gestion d'erreur :
- quand on doit à la fois faire des écritures dans 2 bases de données, on fait un SavePoint dans chacune des 2 bases pour s'assurer que le Commit sera possible, puis on fait le Commit dans les 2 bases (sinon, on fait un RollBack dans les 2 bases).
- quand on doit faire une écriture dans une base et écrire un fichier, on fait un SavePoint dans la base. S'il échoue, on ne crée pas le fichier. S'il passe, on crée le fichier. Si l'écriture du fichier échoue alors, on RollBack sinon on Commit.
NB : La fonction provoque un Runtime error si elle est appelée en dehors d'une transaction.
Exemples
uses SDB;
var db:=TSDBQuery.CreateFromDataSource('MaBDD');
db.StartTransaction;
try
// ...
// ... Actions
// ...
db.SavePoint;
// Si on est arrivé jusqu'ici, on crée le fichier
SaveStringToTextFile('C:\Temp\MonFichier.txt', 'Données du fichier');
db.Commit;
except
// En cas de problème, avant ou après le SavePoint,
// on arrive ici et on annule les écritures de la transaction
db.RollBack;
raise;
end;
var db:=TSDBQuery.CreateFromDataSource('MaBDD');
db.StartTransaction;
try
// ...
// ... Actions
// ...
db.SavePoint;
// Si on est arrivé jusqu'ici, on crée le fichier
SaveStringToTextFile('C:\Temp\MonFichier.txt', 'Données du fichier');
db.Commit;
except
// En cas de problème, avant ou après le SavePoint,
// on arrive ici et on annule les écritures de la transaction
db.RollBack;
raise;
end;