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

SQL Firebird Discussion :

insert sur table maitre/detail


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    869
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 869
    Par défaut insert sur table maitre/detail
    Bonjour,

    Soit la table A maitre (l'entete d'une commande par exemple)
    Soir la table B detail (les lignes de la commande)
    La table B est reliée à la table A par une clé etrangère.


    Est ce qu'il vaut mieux faire:

    ------------------------------
    avec 1 transaction: ( Ce que je fais actuellement)
    activation de Transaction1
    insert table A
    insert table B
    Transaction 1 Commit

    ---------------------------------
    ou bien avec 2 transactions
    activation de Transaction1
    insert table A
    Transaction 1 Commit

    activation de Transaction2
    insert table B
    Transaction 2 Commit

    Ce que j'aimerais faire: que si la table 2 echoue au Commit cela m'annule l'insert de la table A, pour pas que je me retrouve avec un entête sans ligne.
    Est ce que c'est possible en jouant sur les transactions


    merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    591
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 591
    Par défaut
    Bonjour,

    Pour les opérations mettant en œuvre une table maître et une table détail, il est préférable de faire les opérations d'insertion dans une seule et même transaction. C'est l'option un qu'il te faut retenir.

    En code Delphi, cela te donne
    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
     
    with Query do
    begin
      if not Transaction.InTransaction then
         Transaction.StartTransaction;
      try
         insert table A;
         insert table B;  
         Commit;
      except
         if Transaction.InTransaction then
           Transaction.RollBack;
         Un Message d'avertissement;
      end; 
    end;
    Il peut exister quelques différences en fonction des composants utilisés ou méthodes (utilisation du cache ou pas).

    En traitant tes insertions dans la même transaction, le Rollback annulera les opérations sur la table détail, mais également celle de la table maître.

    A+

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

Discussions similaires

  1. problème d'insert avec block maitre/detail
    Par soub dans le forum Forms
    Réponses: 5
    Dernier message: 15/04/2010, 11h59
  2. Table maitre detail et ApplyUpdates
    Par sitaleb dans le forum Bases de données
    Réponses: 1
    Dernier message: 25/06/2008, 20h45
  3. recherche dans table maitre detail
    Par pierrot67 dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/03/2006, 13h00
  4. Insertion dans 2 tables (Maitre + detaille )
    Par nil dans le forum Bases de données
    Réponses: 11
    Dernier message: 09/11/2005, 21h30
  5. [debutant] select-insert sur tables de bases differentes
    Par RedMax dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/10/2004, 18h59

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