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 :

Comment relire une donnee avant un commit ?


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Par défaut Comment relire une donnee avant un commit ?
    Bonjour,

    Est-il possible de relire une donnée avant un commit ?
    Je m'expliquer :

    Le contenu de la colonne Compteur de la table TABCPT = 100

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    StartTransaction
    SELECT Compteur FROM Tabcpt Where CodeCpt = 'NFF'
    Update TABCPT Set Compteur = 50 Where CodeCpt = 'NFF'
    Select Compteur From TABCPT Where CodeCpt = 'NFF'
    Commit
    Le 2e SELECT donne 100 et non 150.
    Ce qui est normal puisque à ce stade, il n'y a pas eu encore de commit.

    N'y-a-t-il pas moyen d'obtenir 150 à ce stade ?
    peut-être avec les niveaux d'isolement ?

    Cordialement :-)

  2. #2
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    150 ? plutôt 50, non ?

    Mais à quoi cela sert-il ?

  3. #3
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    Dans la même transaction, tu devrais voir le changement, avant le commit, mais pas dans les autres transactions
    ton test à quelque chose de pas bien fait

    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
    16
    17
    18
    19
    20
    SQL> SET TRANSACTION WAIT SNAPSHOT NO AUTO UNDO LOCK TIMEOUT 10;
    SQL> select * from country where country='France';
     
    COUNTRY         CURRENCY   
    =============== ========== 
    France          FFranc     
     
    SQL> update country set currency='Euro' where country='France';
    SQL> select * from country where country='France';
     
    COUNTRY         CURRENCY   
    =============== ========== 
    France          Euro       
     
    SQL> rollback;
    SQL> select * from country where country='France';
     
    COUNTRY         CURRENCY   
    =============== ========== 
    France          FFranc
    ceci dit, tu peux utiliser RETURNING aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> UPDATE country SET currency='Euro' WHERE country='France' RETURNING currency;
     
    CURRENCY   
    ========== 
    Euro       
     
    SQL> UPDATE country SET currency='Euro' WHERE country='France' RETURNING currency, country;
     
    CURRENCY   COUNTRY         
    ========== =============== 
    Euro       France

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Par défaut
    Bonjour,

    Merci Infiniment pour votre aide
    Je vais revoir, en effet, mon code : j'ai du mal à
    comprendre ces niveaux d'isolement

    Merci encore

    Cordialement :-)

  5. #5
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    Citation Envoyé par asenaici Voir le message
    Bonjour,

    Merci Infiniment pour votre aide
    Je vais revoir, en effet, mon code : j'ai du mal à
    comprendre ces niveaux d'isolement
    c'est plus ton code qui n'est pas bon et ne doit pas utiliser la même transaction
    ce n'est pas là un problème de niveaux d'isolement

    j'aurais pu faire la même chose avec READ COMMITTED

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Par défaut
    Bonjour et merci.

    Vous avez raison (comme toujours...) dans mon code, il y avait une table
    qui utilisait une autre transaction...d'où le problème.
    Après correction, je relis, en effet, les données que je viens de modifier
    sans problème tant que je reste dans la même transaction.

    Vous aviez parfaitement raison :-)

    J'avais également oublié de mentionner que mon pseudo code était tiré de code delphi.

    Dans tous les cas, un grand merci pour votre aide.

    NB: Sur le site IBPhoenix il y a un DVD en vente.
    Parle-t-on des transactions ?
    Y-a-t-il des exemples plus complets d'utilisation de transactions en delphi avec concurrence ?
    (exemple : un enrgt est bloqué pour maj pendant qu'un autre poste attend
    la libération de cet enrgt. pour maj également)
    Quelle est la différence entre le DVD Developper et Corporate ?

    Merci d'avance

    Cordialement :-)

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/11/2011, 14h06
  2. Transaction, relire une donnée avant le commit
    Par philair100 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 10/01/2011, 14h43
  3. Comment trier une collection avant de l'afficher ?
    Par piloupy dans le forum Struts 1
    Réponses: 10
    Dernier message: 04/05/2007, 08h51
  4. Comment fermer une Tform avant meme qu'elle s'affiche??
    Par Jayceblaster dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 17/05/2006, 11h34

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