Bonjour,
J'aimerai avoir un avis éclairé sur le fonctionnement des transactions sous Firebird
j'ai créé des objets Delphi pour utiliser l'API FB qui fonctionnent suivant le principe suivant
jusque là tout va bien, je peux même faire ceci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 client = nouveau client FB transaction = client.StartTransaction query = transaction.PrepareSQL query.Execute transaction.commit
mais que se passe-t-il si je veux commiter mes updates DANS la boucle ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 client = nouveau client FB transaction = client.StartTransaction query = transaction.PrepareSQL('SELECT ...') update = transaction.PrepareSQL('UPDATE ...') while Query.Fetch update.Params[0] = query.Fields[0] update.Execute end transaction.commit
cela perturbe-t-il le SELECT ? faut-il ouvrir une nouvelle transaction pour l'UPDATE ?!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 client = nouveau client FB transaction = client.StartTransaction query = transaction.PrepareSQL('SELECT ...') update = transaction.PrepareSQL('UPDATE ...') while Query.Fetch update.Params[0] = query.Fields[0] update.Execute transaction.commitRetaining end
NB: la transaction possède les attributs isc_tpb_read_committed + isc_tpb_no_rec_version
transaction.commit
l'objet est ici de traiter une série d'enregistrement en attente de traitement et de mettre à jour un champ Etat, exemple SELECT ... WHERE Etat = 0, UPDATE ... Etat = 1
Partager