Requete et transaction [Résolu]

cs_deubal 198 Messages postés mercredi 26 novembre 2003Date d'inscription 26 août 2009 Dernière intervention - 16 nov. 2005 à 16:20 - Dernière réponse : cs_deubal 198 Messages postés mercredi 26 novembre 2003Date d'inscription 26 août 2009 Dernière intervention
- 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
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
vincentstryckmans 230 Messages postés lundi 5 avril 2004Date d'inscription 25 octobre 2006 Dernière intervention - 17 nov. 2005 à 12:41
3
Merci
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.

Merci vincentstryckmans 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 126 internautes ce mois-ci

Commenter la réponse de vincentstryckmans
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 16 nov. 2005 à 17:39
0
Merci
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...
Commenter la réponse de WhiteHippo
cs_deubal 198 Messages postés mercredi 26 novembre 2003Date d'inscription 26 août 2009 Dernière intervention - 17 nov. 2005 à 09:12
0
Merci
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
Commenter la réponse de cs_deubal
cs_deubal 198 Messages postés mercredi 26 novembre 2003Date d'inscription 26 août 2009 Dernière intervention - 17 nov. 2005 à 14:06
0
Merci
je te remercie pour ces exxplications, après quelques tests et pas mal de patience, ca fonctione a merveille!!
Encore merci
Bonne aprem'
Commenter la réponse de cs_deubal

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.