Requete et transaction

Résolu
cs_deubal Messages postés 198 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 août 2009 - 16 nov. 2005 à 16:20
cs_deubal Messages postés 198 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 août 2009 - 17 nov. 2005 à 14:06
bonjour,
voila j'ai mon appli qui utilise des liaisons vers une base de données Informix. tout fonctionne parafitement : consultation, ajout, modification, suppression des enregistrements concernés. Au boulot, on me demande de mettre des transactions dans les requetes sql update, insert, delete.

extrait de mon code :
query_deletefrn.SQL.Clear;
query_deletefrn.SQL.Add('DELETE FROM matable WHERE cle =' + quotedstr(cle.text));
query_deletefrn.ExecSQL;
query_deletefrn.Close;

Où est-ce que je dois mettre la dite transaction : dans le code delphi ou dans la requete et qu'est ce que je dois mettre ??
En vous remerciant par avance
Bonne fin de journée

4 réponses

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



Comme le dit withehippo, cela dépend du serveur.

Pour Interbase, tu dois lier un compo TIBTransaction à ton compo TIBDataset.



La transaction et le query doivent bine sûr être liés à la même db et la transaction doit être démarrer avant d'ouvrir le query.

Tu peux le faire dans l'event BeforeOpen du dataset.

Dans l'event Afterclose, tu peux arrêter la transaction avec un commit ou un rollback.

Dasn l'event afterpost, tu puex par exemple exécuter un
commitretainning qui te garde la transaction ouverte mais applique les
changements à la db.



Attention, toujours vérifer que la transaction est fermé (not
my_transac.intransaction) avant de la démarrer (.starttransaction) et
toujours vérifier qu'elle est démarrée avant de faire un commit ou un
rollback. Au sinon c'est le plantage assuré.

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

Vincent Stryckmans.
3
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
16 nov. 2005 à 17:39
Une transaction permet d'effectuer un ensemble de modifications d'une base; c'est à dire qu'avec une transaction on effectue toutes les modifications d'un coup ou aucunes (La base est toujours dans un état cohérent).

On distingue deux principaux mots clés pour gérer les transactions :



<LI>COMMIT : Validation de la transaction en cours.
<LI>ROLLBACK :Annulation de la transaction en cours. (Utile par exemple si sortie d'une procedure en try..except)</LI>
N.B. En cours de transaction, seul celui qui effectue les modifications, les voit. Elles seront uniquement visibles par tous au moment du COMMIT.

Après pour l'utilisation cela dépend de comment tu "attaques" les bases de données (Interbase, ADO ? ).

Cordialement.


<HR>
Il existe 10 catégories de personne. Ceux qui connaissent le binaire et les autres...
0
cs_deubal Messages postés 198 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 août 2009
17 nov. 2005 à 09:12
si j'ai bien compris ce que tu as expliqué, ca pourrait donner :

query_deletefrn.SQL.Clear;
query_deletefrn.SQL.Add('DELETE FROM matable WHERE cle =' + quotedstr(cle.text));
try
query_deletefrn.ExecSQL;
mondatabase.commit;
except
mondatabase.rollback;
end;
query_deletefrn.Close;

mais faut que je mette quelque part qu'il faut commencer la transaction, ou bien le pc se le gere tout seul ?
merci d'avance
bonne journee
0
cs_deubal Messages postés 198 Date d'inscription mercredi 26 novembre 2003 Statut Membre Dernière intervention 26 août 2009
17 nov. 2005 à 14:06
je te remercie pour ces exxplications, après quelques tests et pas mal de patience, ca fonctione a merveille!!
Encore merci
Bonne aprem'
0
Rejoignez-nous