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

 Firebird Discussion :

petite aide sur les transactions et triggers SVP


Sujet :

Firebird

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 251
    Points : 118
    Points
    118
    Par défaut petite aide sur les transactions et triggers SVP


    slt

    1 :
    D'aprés ce que j'ai compris en lisant les posts, il faut utiliser des transactions différentes pour chaque type d'accés à une base ( INSERT, UPDATE, LECTURE,DELETE). Pour résumer il faut donc au moins 4 composants transactions ( + 1 pour le composant IbDatabase ).

    2 :
    Les transactions sont initiées par les clients avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MaTransaction.Start;
    MaTransaction.Commit;
    MaTransaction.RoolBack;
    3 :
    Dans le cas ou on utilise une transaction spécifique pour un évènement ( par ex : INSERT ) on fera pour valider l'insertion un CommitRetaining, et un RoolbackRetaining pour annuler ces insertion. Il faut auparavant vérifier je suppose s'il s'agit bien de la transaction souhaitée ? avec un InTransaction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if matransaction.InTransaction
    4 :
    Est ce que IB6 affiche un message si un client essaie de modifier un enreg si un autre client est en train de le visualiser ou de le modifier par exemple ?

    5 : faut il mieux utiliser un trigger ou une PS pour signaler à un client par exemple que l'enreg qu'il a saisi existe déja ?
    Car dans une PS si on détecte que l'enreg existe déja, on l'annule par un roolback, alors que dans le trigger le traitement se fera dans l'évenement BEFORE_INSERT par exemple ! Quelle est la meilleure solution ?

    Merci
    A+

    windows 10 / DEBIAN 7.9 / Etc...

  2. #2
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut Re: petite aide sur les transactions et triggers SVP
    1 : Non on peut tout faire avec une transaction. De même que l'on peut utiliser une transaction différente par gros traitement (par écran par exemple) et en effet certains preferent utiliser une transaction pour les select et une autre pour les mises à jours (Insert/update/delete)

    2 :Oui c'est fait automatiquement lors de l'ouverture d'un IBDataSet ou IBQuery ou ...
    Par contre pour la fermer il est en effet preférable de le faire mannuellement car comme ca vous maitrisez le moment ou vous valider ou annuler vos modifications.

    3 :Non le InTransaction retourne un resultat Boolean. Il indique juste si une transaction est en cours (ouverte). Afin d'éviter de faire un Start alors que la transaction est dejà ouverte ou de faire un commit ou rollback alors que la transaction est déjà fermée.

    4 :Si une autre personne visualise sur son écran un enregistrement que vous modifiez et validiez (Commit) la personne ne le verra pas. Pour voir les modification il faut qu'elle rafraichisse son enregistrement (à Condition que la transaction soit en mode readcommited car si elle est en mode snapshot il faut fermer la transaction et la réouvrir).
    Par contre si elle essaye de modifier l'enregistrement de son écran que vous avez modifié (sans qu'il ne l'ai vue) il aura un message d'erreur lui indiquant qu'une autre personne à déjà modifié son enregistrement. Il faut donc commencer par rafraichir l'enregistrement pour pouvoir le modifier et avoir la dernière version.

    5 ans les PS et les triggers vous ne pouvez pas faire de rollback ou commit. Au mieux vous pouvez annuler le traitement en levant une exception.

    Les triggers et les PS ne s'utilisent pas de la même façon, a vous de voir ce que vous trouvez le plus pratique.

    Le trigger sera déclanché (et donc votre controle) pour chaque insert (que vous le fassiez depuis votre application ou depuis IBConsole)
    alors que la PS (et donc le controle que vous ferez dedans) ne sera déclanché que lorsque vous l'utiliserez. (Donc celà vous laisse la possibilité de faire des insert sans controle).

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 251
    Points : 118
    Points
    118
    Par défaut

    Merci barbubulle pour ces explications, je commence à entrevoir le bout du tunnel.
    Vous dites :
    Non le InTransaction retourne un resultat Boolean. Il indique juste si une transaction est en cours (ouverte). Afin d'éviter de faire un Start alors que la transaction est dejà ouverte ou de faire un commit ou rollback alors que la transaction est déjà fermée.
    en fait on vérifie que le client A n'a pas déja lancé une transaction ( et seulement ce client là ) ? Le client A ne s'occupe pas de savoir si un client B a lancé une transaction nest ce pas ?
    D'autre part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MaTrans.StartTransaction
    n'est donc pas obligatoire puisqu'il est automatique à l'ouverture d'un IBQUERY ou d'un IBDATASET d'une PS ..., mais fortement conseillé afin d'avoir la main mise sur les traitement ?

    merci encore a+

    windows 10 / DEBIAN 7.9 / Etc...

  4. #4
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Citation Envoyé par CharleLéo
    en fait on vérifie que le client A n'a pas déja lancé une transaction ( et seulement ce client là ) ? Le client A ne s'occupe pas de savoir si un client B a lancé une transaction nest ce pas ?
    Vous n'avez pas connaissance des autres transactions.
    Le composant IBTransaction ne permet d'ouvrir qu'une seule transaction à la fois. Et donc la propriété InTransaction de ce composant indique simplement si la transaction est ouverte ou pas.


    Citation Envoyé par CharleLéo
    D'autre part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MaTrans.StartTransaction
    n'est donc pas obligatoire puisqu'il est automatique à l'ouverture d'un IBQUERY ou d'un IBDATASET d'une PS ..., mais fortement conseillé afin d'avoir la main mise sur les traitement ?
    Non puisque une simple IBDataSet.Open; va automatiquement faire le StartTransaction si le InTransaction est à False. On ne peut rien faire sans qu'une transaction ne soit ouverte sous Interbase.
    Ce qui est fortement conseillé c'est de faire un commit ou RollBack de manière explicite dans votre programme.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2004
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 251
    Points : 118
    Points
    118
    Par défaut


    merci pour tout Barbibulle, je ferais surement un post pour reprendre un peu tout ca

    a+


    windows 10 / DEBIAN 7.9 / Etc...

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

Discussions similaires

  1. Petite question sur les transactions
    Par Invité dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/06/2012, 12h09
  2. SVP ! Aide sur les modules SAP CS et SD
    Par kmhermann1 dans le forum SAP
    Réponses: 2
    Dernier message: 01/08/2007, 15h11
  3. Informations sur les transactions, commit et rollback AIDE ?
    Par QAYS dans le forum Connexion aux bases de données
    Réponses: 7
    Dernier message: 23/09/2006, 13h44
  4. Petite aide sur les triggers ?
    Par krimson dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/04/2004, 16h28

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