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

 Delphi Discussion :

Probleme de Commit


Sujet :

Delphi

  1. #1
    Membre confirmé Avatar de jodan33
    Homme Profil pro
    DEveloppeur interoperabilité
    Inscrit en
    Mars 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : DEveloppeur interoperabilité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 95
    Par défaut Probleme de Commit
    Bonjour,
    J'ai un souci pour réaliser un Commit après un Update sur une base Firebird ; mon update fonctionne correctement car quand je sors de mon appli et que je reviens je constate que la requette a fait son boulot.j'utilise des TIBquery et Donc des TibTransaction , voici le code:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    var
    Qry:TIBquery;
    no_facture,mt_ttc:string;
    _database:TIBDatabase;
    Transaction1:TIBTransaction;
     
    begin
     
     
     MessageDlg('test2', mtWarning, [mbOK], 0);
     DMTactile.NewQry(Qry);
     
     with qry do
             begin
              if Active then close;
             SQL.Clear;
             SQL.Add('update ENTETES_RESA set CDE_ACTIF= ''N'' '
             + ' where cde_codresa = :codresa and cde_noenreg = :noenreg and cde_nbnuits =:nbnuits ') ;
                  ParamByName('codresa').AsFloat := codresa_;
                  ParamByName('noenreg').Asinteger := noenreg_;
                  Parambyname('nbnuits').AsInteger := nbnuits_ ;
             //ParamByName('cde_actif').AsString:=tactif;
             ExecSQL;
             MessageDlg('Essai commit', mtWarning, [mbOK], 0);
              Transaction1.Commit;
              //Commit;
             Close;
     
     
     end;
             DMTactile.DestroyQRY(Qry)
     
    end;
    j'ai un message m'indiquant une violation d'accés.
    Merci pour votre aide .

    Ah au fait est ce que quelqu'un peut me dire comment ajouter un avatar à mon profil avec une image perso.

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Sans connaitre le système de transaction des composants IB (je n'ai pas eu l'occasion de m'y mettre).

    1- Je ne vois nul part de transaction.begin, quand on veut utiliser les transactions il faut bien la commencer.

    Exemple avec Ado qui doit être similaire en mettant les bonnes procédures
    Code Delphi : 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
     
    AdoConnection1.BeginTrans;
     
    With AdoQuery do
    begin
      // Remplissage de la requete update
     
      Try
        ExecSQL;
        AdoConnection1.CommitTrans;
      Except on E:Exception do
        begin
          AdoConenction.rollbackTrans;
          Showmessage('Erreur :' + E.Message);
        end;
      end;
    end;

    2- Le composant TIBTransaction n'est pas crée alors qu'il a l'air d'être dynamique.

    3- Le messagedlg est placé avant le commit donc tu ne sais pas encore s'il a fonctionné ou non.

    4- est ce bien utile d'utiliser une transaction ici. En général on utilise les transactions quand il y a plusieurs actions qui se font séquentiellement et qui nécessite de ne pas être interrompu.
    Dans ton cas, tu à l'air de ne faire qu'une requête donc , la transaction n'est pas utile

    PS: Pour l'avatar c'est à 100 messages (voir dans les règles du forum pour confirmation), mais attention flood et réponse inutile ne sont pas tolérés.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre confirmé Avatar de jodan33
    Homme Profil pro
    DEveloppeur interoperabilité
    Inscrit en
    Mars 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : DEveloppeur interoperabilité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 95
    Par défaut
    Merci , Rayek , mais ca marche pô , merci malgré tout c sympa....

  4. #4
    Membre confirmé Avatar de djeckelle
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Septembre 2004
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 47
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2004
    Messages : 87
    Par défaut
    Salut,

    j'ai un message m'indiquant une violation d'accés.
    Pourrais tu nous en dire un peu plus sur ton message. En plus, je vois que tu déclares un TIBDatabase et un TIBTransaction que nu n'instancies pas après...Peux tu aussi envoyer ton code après suggestions de Rayek.

    Djeckelle

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Citation Envoyé par jodan33 Voir le message
    Merci , Rayek , mais ca marche pô , merci malgré tout c sympa....
    Veuillez nous excuser mais le systeme boule de crystal 1.0 est en panne actuellement, pour un meilleur service veuillez donner plus de détails

    Soit plus précis, un "çà marche pas", ne va pas nous permettre de t'aider plus.

    Qu'est ce qui ne fonctionne pas ?
    Quelle est le message d'erreur ?
    Quelles sont les modifications que tu as fait dans le code ? (Avec le bout de source qui va bien et des commentaires "//" positionnés juste avant l'erreur).
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  6. #6
    Membre confirmé Avatar de jodan33
    Homme Profil pro
    DEveloppeur interoperabilité
    Inscrit en
    Mars 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : DEveloppeur interoperabilité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 95
    Par défaut
    Salut,
    Bon , voici le code :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    var
    Qry:TIBquery;
    no_facture,mt_ttc:string;
     
    Transaction1:TIBTransaction;
     
    begin
     
    MessageDlg('Req Up date', mtWarning, [mbOK], 0);
    //Transaction1.DefaultDatabase.Open;
     
     DMTactile.NewQry(Qry);
     Transaction1.StartTransaction;
     with qry do
             begin
              if Active then close;
             SQL.Clear;
             SQL.Add('update ENTETES_RESA set CDE_ACTIF= ''N'' '
             + ' where cde_codresa = :codresa and cde_noenreg = :noenreg and cde_nbnuits =:nbnuits ') ;
                  ParamByName('codresa').AsFloat := codresa_;
                  ParamByName('noenreg').Asinteger := noenreg_;
                  Parambyname('nbnuits').AsInteger := nbnuits_ ;
             //ParamByName('cde_actif').AsString:=tactif;
             ExecSQL;
             Transaction1.Commit;
             MessageDlg('Essai commit', mtWarning, [mbOK], 0);
             Close;
             end;
     DMTactile.DestroyQRY(Qry);
     
    end;
    J'ai un message : " Violation d'accés à l'adresse 0592BA2F dans le module tac.dll . Lecture de l'adresse 00000054.
    et je ne passe pas dans la boite de dialogue 'Essai Commit'.
    Merci pour vos remarque qui m'aide à progresser, a+

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Si tu nous as fournis ton code complet alors le problème est que tu n'instancies pas ton objet Transaction1 comme le soulignait djeckelle.

  8. #8
    Membre confirmé Avatar de jodan33
    Homme Profil pro
    DEveloppeur interoperabilité
    Inscrit en
    Mars 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : DEveloppeur interoperabilité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 95
    Par défaut
    Salut , le probleme c'est que je ne sais pas comment on instancie un TIBTransaction.

  9. #9
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Ben comme n'importe quel objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Transaction1 := TIBTransaction.Create( NIL );
    Sachant qu'ici comme tu as un DataModule de disponible visiblement (DMTactile ?) tu pourrais le passer en paramètre du constructeur au lieu de NIL.

    Et qui dit instanciation dit suppression soit ne pas oublier de détruire l'objet à la fin du traitement.

  10. #10
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Vu le code, la transaction est inutile quand il n'y a qu'une seule requête à traiter.
    Ça rajoute plusieurs actions inutiles dans le traitement.

    - Ouverture de la transaction
    - Traitement de la requête update
    - Finalisation de la transaction (Commit ou rollback).

    Par contre, il faut (je pense) aussi connecter le TIbTransaction correctement à la source comme pour un TIdQuery sinon, je doute que cela fonctionne correctement
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  11. #11
    Membre confirmé Avatar de jodan33
    Homme Profil pro
    DEveloppeur interoperabilité
    Inscrit en
    Mars 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : DEveloppeur interoperabilité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 95
    Par défaut
    Merci , Rayek, mais je comprends ce que tu veux dire , mais je ne vois vraiment pas comment faire vu que le source n'accepte pas le mot reservé "Commit" tout seul.
    Peux tu m'envoyer un exemple de code ? merci.

  12. #12
    Membre confirmé Avatar de jodan33
    Homme Profil pro
    DEveloppeur interoperabilité
    Inscrit en
    Mars 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : DEveloppeur interoperabilité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 95
    Par défaut
    Voici une nouvelle modif:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
     
    procedure Libereresa(codresa_: double; noenreg_: integer; nbnuits_ : integer);
     
    var
    Qry:TIBquery;
    no_facture,mt_ttc:string;
    Transaction1:TIBTransaction;
     
    begin
     
    MessageDlg('Req Up date', mtWarning, [mbOK], 0);
    //Transaction1.DefaultDatabase.Open;
     
     DMTactile.NewQry(Qry);
     Transaction1 :=TIBtransaction.Create(NIL);
     Transaction1.StartTransaction;
     with qry do
             begin
              if Active then close;
             SQL.Clear;
             SQL.Add('update ENTETES_RESA set CDE_ACTIF= ''N'' '
             + ' where cde_codresa = :codresa and cde_noenreg = :noenreg and cde_nbnuits =:nbnuits ') ;
                  ParamByName('codresa').AsFloat := codresa_;
                  ParamByName('noenreg').Asinteger := noenreg_;
                  Parambyname('nbnuits').AsInteger := nbnuits_ ;
             //ParamByName('cde_actif').AsString:=tactif;
             ExecSQL;
             Transaction1.Commit;
             MessageDlg('Essai commit', mtWarning, [mbOK], 0);
             Transaction1.Destroy;
             Close;
             end;
     DMTactile.DestroyQRY(Qry);
    Je pense passer DMTactile en paramétre plutôt que NIL , j'ai le message d'erreur suivant:
    Aucune base de données répertoire dans le composant Transaction.
    Cependant , cela me parait Normal.

  13. #13
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Citation Envoyé par jodan33 Voir le message
    Merci , Rayek, mais je comprends ce que tu veux dire , mais je ne vois vraiment pas comment faire vu que le source n'accepte pas le mot reservé "Commit" tout seul.
    Peux tu m'envoyer un exemple de code ? merci.
    Comme je l'ai dit plus haut, je ne connais pas les composants IB donc je ne pourrais pas de fournir un source.

    Chose à faire (dans l'ordre de préférence) :
    - Construire correctement le TIbTransction (Voir les posts au dessus qui te guideront)
    - Débuter la transaction (Avec le StartTransaction)
    - Exécuter la requête
    - Clôturer la requête (commit ou rollback avec le TIdTransaction)

    En gros ca donnera un truc du style
    Code Delphi : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    var
      Qry:TIBquery;
      no_facture,mt_ttc:string;
     
      Transaction1:TIBTransaction;
     
    begin
     
     Transaction1 := TIbTransaction.Create(DMTactile);
     With Transaction1 do
     begin
       // configurer correctement le composant
     end;
     DMTactile.NewQry(Qry); 
     With  Transaction1 do
     try
       StartTransaction;
       with qry do
       begin
         if Active then close;
         SQL.Clear;
         SQL.Add('update ENTETES_RESA set CDE_ACTIF= ''N'' '
               + ' where cde_codresa = :codresa and cde_noenreg = :noenreg and cde_nbnuits =:nbnuits ') ;
         ParamByName('codresa').AsFloat := codresa_;
         ParamByName('noenreg').Asinteger := noenreg_;
         Parambyname('nbnuits').AsInteger := nbnuits_ ;
         Try
           ExecSQL;
           Commit;
           MessageDlg('Essai commit', mtWarning, [mbOK], 0);
         Except on E:Exception do
           begin
             MessageDlg('erreur :' + E.Message, mtWarning, [mbOK], 0);
             RollBack;
           end;
         end;
       end;
      finally
        DMTactile.DestroyQRY(Qry);
        Transaction1.free;
      end;
    end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  14. #14
    Membre confirmé Avatar de jodan33
    Homme Profil pro
    DEveloppeur interoperabilité
    Inscrit en
    Mars 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : DEveloppeur interoperabilité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 95
    Par défaut
    Waou Rayek ça a l'air pas mal du tou ça , et sans connaitre pas les composants IB , bon je vais tester cela ;en essayant de l'accomoder à ma source.
    en tout cas Merci Beaucoup.

  15. #15
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Citation Envoyé par jodan33 Voir le message
    Waou Rayek ça a l'air pas mal du tou ça , et sans connaitre pas les composants IB , bon je vais tester cela ;en essayant de l'accomoder à ma source.
    en tout cas Merci Beaucoup.
    La plupart des composants base de données on la même méthode d'utilisation, c'est juste les noms des procédures/fonctions qui changent.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  16. #16
    Membre confirmé Avatar de jodan33
    Homme Profil pro
    DEveloppeur interoperabilité
    Inscrit en
    Mars 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : DEveloppeur interoperabilité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 95
    Par défaut
    J'ai un souci , je ne sais pas configurer corrcetement mon composant TIB transaction


    j'ai le message suivant:
    Aucune base de données repertoriée dans le composant transaction

  17. #17
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Comme tout composant de base de données tu dois lui fournir la connexion à la base de donnée sans quoi il ne peut pas deviner sur quelle base il doit s'appliquer.

    Bon avec les composants IB on ne raisonne pas en "Connection" mais en "DataBase", pourquoi pas... Le truc est que tu dois avoir (sûrement dans ton DataModule) un composant TIBDataBase ou un truc du genre. Ensuite tu dois appeler la méthode AddDataBase de ton TIBTransaction en passant en paramètre cette base de donnée.

    PS : regarde la méthode NewQry de ton DataModule tu dois faire quasiment quelque chose de similaire (en utilisant la propriété DataBase de ton TIBQuery).

    PS2 : moi non plus je ne connais pas du tout IB mais je fonctionne comme Rayek et surtout je regarde l'aide pour savoir.

  18. #18
    Membre confirmé Avatar de jodan33
    Homme Profil pro
    DEveloppeur interoperabilité
    Inscrit en
    Mars 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : DEveloppeur interoperabilité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 95
    Par défaut
    Ok, merci pour les renseignements; j'utilise l'aide de delphi , en meme temps j'aime bien utiliser le forum de developpez , cela permet d'accélerer la résolution de probléme ou de donner de bonne piste à suivre , encore merci.

Discussions similaires

  1. Probleme de commit
    Par anis.oracle dans le forum Forms
    Réponses: 1
    Dernier message: 03/09/2009, 14h55
  2. cpan: problème de commit avec o conf
    Par iscab dans le forum Modules
    Réponses: 1
    Dernier message: 20/11/2006, 16h11
  3. [debutant]probleme de commit
    Par julien31009 dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 14/11/2006, 12h21
  4. [Oracle8i][PL/SQL]Probleme de commit ou non ?
    Par Drizzt [Drone38] dans le forum Oracle
    Réponses: 11
    Dernier message: 09/08/2006, 11h10

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