IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

double transaction


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Profil pro
    Ingenieur developpement
    Inscrit en
    Septembre 2002
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingenieur developpement

    Informations forums :
    Inscription : Septembre 2002
    Messages : 175
    Points : 106
    Points
    106
    Par défaut double transaction
    Bonjour,

    J'utilise les DBExpress.
    j'ai besoin de faire une transaction à l'intérieur d'une autre transaction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
        TD: TTransactionDesc;
        TD2: TTransactionDesc;
     
      ...
     
      DMDatabase.SQLConnectionLocal.StartTransaction(TD);
      try
        Inserer;
     
        DMDatabase.SQLConnectionLocal.Commit(TD);
      except
        DMDatabase.SQLConnectionLocal.Rollback(TD);
        raise;
      end;
    et dans le traitement de Inserer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      ...
      // 
      DMDatabase.SQLConnectionLocal.StartTransaction(TD2);
      try
        ModifierMesInfo;
        Valeur := GetMaValeur;
     
        DMDatabase.SQLConnectionLocal.RollBack(TD2);
      except
        DMDatabase.SQLConnectionLocal.Rollback(TD2);
        raise;
      end;
      ...
    Est-il possible de réaliser 2 transactions imbriquées sans avoir de deadlock ?

  2. #2
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 192
    Points : 90
    Points
    90
    Par défaut
    Vous pouvez imbriquer une transaction dans une autre.
    L'inconveniant de cette technique est que si la 2ième transaction tombe dans un deadlock, la première continuera à attendre.

    Il n'est pas recommander de manipuler les transaction dans le code de l'application cliente car il y a plus de risque de plantage de votre application suite à un dead lock.
    Qu'est ce qui arriverait si la validation d'un processus dépends d'un utililisateur qui est allé se balader ?

  3. #3
    Membre régulier
    Profil pro
    Ingenieur developpement
    Inscrit en
    Septembre 2002
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingenieur developpement

    Informations forums :
    Inscription : Septembre 2002
    Messages : 175
    Points : 106
    Points
    106
    Par défaut
    Je suis avec Firebird. Le problème avec la 2eme transaction, c'est qu'il se met en deadlock au premier update que je fait.

    peut être une piste avec un SAVEPOINT <nom du pt> et ROLLBACK TO <nom du pt>.

    Si qqun a dejà imbriqué des transactions

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Framework] Challenge ! Spring + Hibernate = double transaction ?
    Par benett31 dans le forum Spring
    Réponses: 2
    Dernier message: 22/10/2009, 10h19
  2. Coalesce double transaction oracle
    Par Haknaton dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/05/2009, 17h03
  3. Apropos des Transactions au sein d'un Stored Procedure
    Par Sarbacane dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 16/11/2004, 08h21
  4. String -> long double (_strlold ?)
    Par haypo dans le forum C
    Réponses: 7
    Dernier message: 25/07/2002, 20h22
  5. Réponses: 3
    Dernier message: 12/06/2002, 21h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo