Transaction a plusieurs requetes

Résolu
cs_deubal Messages postés 198 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 août 2009 - 22 nov. 2005 à 12:05
cs_deubal Messages postés 198 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 août 2009 - 23 nov. 2005 à 09:17
bonjour,
suite a un message posté la semaine derniere concernant les transactions dans mon appli, une autre questions me vient.
je resitue mon projet:
j'au une appli lié a 3 tables d'une bdd informix. on peut consulter, ajouter, modifier, supprimer les enregistrements. toutes mes requetes insert et update son sur un meme bouton. je teste si c'est une creation ou une modification des données et les requetes sont adaptés alors.
Je veux mettre des transactions pour encadrer mes requetes. je fais un truc du style :
madatabase.starttransaction;
query.sql.clear;
query.sql.add('update...')
try
query.execsql
madatabase.commit
except
madatabase.rollback
end;

pour faire un update ou insert plusieurs tables sont concernés j'ai donc 3 requetes update pour une modifications et autant de requetes pour une creation.
Est-ce que je peut mettre toutes les requetes dans la meme transaction ou dois je creer une transaction pour chacune des requetes ??
en vous remerciant
Bonne journee

5 réponses

vincentstryckmans Messages postés 228 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 octobre 2006
23 nov. 2005 à 07:54
Gasp, erreur de ma part .

Dans mon précédent message je devais écrire :

Tu as plus qu'intérêt à faire le travail dans une seule transaction

au lieu de

Tu as plus qu'intérêt à faire le travail dans une seul requête


Donc, on recommence tout et d'abord répondre aux deux question de ton derneir message :



si je fais une seule transaction, si y a une erreur tout sera annulé : oui

C'est le principe de base des serveurs sql.



si je fais une transaction par requete, si ya une erreur, seule la requet concernée sera annulée : oui

cel rejoint ta première question, avec le
risque d'avoir des problèmes d'intégrité référentielle entre tes
tables.



Bref, si tu souhaites faire un insert de données qui s'effectue
sur plusieurs tables, tu peux écrire une requête 'insert' par table le
tout englobé dans une seule transaction, englobé dans un try except.




Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.

Vincent Stryckmans.
3
vincentstryckmans Messages postés 228 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 25 octobre 2006
22 nov. 2005 à 12:57
Bonjour,



Tu as plus qu'intérêt à faire le travail dans une seul requête, ainsi
tu es sûr que tout est enregistré ou bien rien n'est enregistré.

Ce qui est grandement préférable au niveau des diverses intégrités référentielles de bases de données.

Et comme disait ma grand-mère : il y a toujours du soleil derrière les nuages.

Vincent Stryckmans.
0
cs_deubal Messages postés 198 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 août 2009
22 nov. 2005 à 14:01
j'ai bien essayé de tout mettre dasn une seule requte, le probleme c'est que certaines de mes requetes depedent de resultats a des if. donc je fais differentes requetes...
si je reste a faire plusieurs requetes (par necessité) est ce que je peux les regrouper dans une meme transaction ou je fais une transaction par requete?
merci par avance
0
cs_deubal Messages postés 198 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 août 2009
22 nov. 2005 à 14:04
je me demandais :
si je fais une seule transaction, si y a une erreur tout sera annulé
si je fais une transaction par requete, si ya une erreur, seule la requet concernée sera annulée
Peux-tu valider ce que je dis ??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_deubal Messages postés 198 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 août 2009
23 nov. 2005 à 09:17
en effet, j'ai donc opté pour plusieurs requetes le tout dans une seule transaction. Et ca marche impec'.
Je te remercie d'avoir pris le temps de me repondre. Bonne journée
0
Rejoignez-nous