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

C++Builder Discussion :

Gestion des exceptions


Sujet :

C++Builder

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut Gestion des exceptions
    Bonjour, quelqu'un peut -ilm'expliquer clairement à quoi dert une exception? Je ne vois pas pourquoi un simple if ne ferait pas l'affaire.
    J'ai déja regarder de la doc dessus mais je ne vois pas la différence

    Merci.

  2. #2
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Les exceptions sont utilisées pour capturer une eventuelle erreur lors de l'execution de ton programme, comme cela, si tu as récupéré une exception, tu peut afficher ton propre message d'erreur au lieu de message d'erreur windows auquel on ne comprand pas toujours tout, ou tu peut aussi lors d'une erreur executer un code spécial pour contrecarer l'erreur, etc...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut re
    ici, je dois mettre une exception?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void __fastcall TForm2::RetirerClick(TObject *Sender)
    {
      if(StringGrid1->RowCount==2)
            ShowMessage("Attention, vous ne pouvez pas supprimer cette ligne");
      else
      {
        StringGrid1->RowCount--;
        StringGrid1->Height=(StringGrid1->Height-25);
      }
     
    }

  4. #4
    Membre éprouvé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Par défaut
    cherche dans les blocs de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    try
    {
     
    }
    catch(...)
    {
     
    }
    tu peux ainsi avoir par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    try
    {
       if(condition)
       {
           //faire
       }
    }
    catch()
    {
        //faire si erreur
    }
    ainsi, dans ce code, ton si va s'executer mais je gerera pas une eventuelle erreur D'EXECUTION, ce sera donc le bloc catch qui va intercepter l'ereur (au lieu de laisser faire windows) et faire ce que tu veux en cas d'erreur.

    est-je etais clair???

  5. #5
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Citation Envoyé par doudouallemand
    est-je etais clair???
    Quelques fautes de frappe qui viennent un peu obscurcir ton raisonnement mais sinon ca va.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut re
    non j'ai pas treès bien compris. tu peux réexpliquer?Merci. Dans le catch je met quoi? Sachatnque je ne sais pas si il y a une erreur quel genre d'errreur elle sera.

  7. #7
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Citation Envoyé par sandball22
    ici, je dois mettre une exception?


    void __fastcall TForm2::RetirerClick(TObject *Sender)
    {
    if(StringGrid1->RowCount==2)
    ShowMessage("Attention, vous ne pouvez pas supprimer cette ligne");
    else
    {
    StringGrid1->RowCount--;
    StringGrid1->Height=(StringGrid1->Height-25);
    }

    }
    Ici, si j'ai bien compris, tu veut que l'on ne puisse pas retirer de ligne si il n'y en a que deux, c'est donc une condition et non pas une exception, puisque c'est toi qui veut faire la condition, enfin si j'ai bien compris ce que tu voulais, si tu veut mettre une capture d'exception à cette endroit, tu peut mais personnellement je n'en voit pas l'intérêt.

  8. #8
    Membre éprouvé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Par défaut
    dans le catch, tu mets du code qui va faire quelque chose dans le cas d'une erreur (par exemple, un message a l'utilisateur).

    pour savoir d'ou vient l'erreur, il me semble que tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    try
    {
      //...
    }
    catch(Exception e)
    {
        //e contient l'erreur et tu peux faire e.c_str()
    }
    tu confirme pottiez???

  9. #9
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Citation Envoyé par doudouallemand
    dans le catch, tu mets du code qui va faire quelque chose dans le cas d'une erreur (par exemple, un message a l'utilisateur).

    pour savoir d'ou vient l'erreur, il me semble que tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    try
    {
      //...
    }
    catch(Exception e)
    {
        //e contient l'erreur et tu peux faire e.c_str()
    }
    tu confirme pottiez???
    C'est exacte à un petit détail pres mais qui a son importance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try
    {
      //...
    }
    catch(Exception &e)
    {
        //e contient l'erreur et tu peux faire e.c_str()
    }

  10. #10
    Membre éprouvé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Par défaut
    merci beaucoup pour cette correction, il m'avait echappe en effet...

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut re
    oui je suis d'accord il s'agit d'une condition. Quand alors je dois utiliser une exception? Avez-vous un exemple qui m'aidrait à comprendre? car je suis perdu. Merci

  12. #12
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Citation Envoyé par sandball22
    oui je suis d'accord il s'agit d'une condition. Quand alors je dois utiliser une exception? Avez-vous un exemple qui m'aidrait à comprendre? car je suis perdu. Merci
    Il faut utiliser une exception lorsqu'il y a un risque d'erreur, par exemple lorsque ton application contient un client socket et que tu veut connecter celui-ci à un serveur, tu ne sait pas si le serveur est lancé, mais tu cherche quand même à te connecté, si le serveur n'est pas lancé, cela te provoquera une erreur, que tu peut capter grace aux exceptions, pour effectué la suite en sachant par exemple que tu n'est pas connecté.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut re
    Ok? Je compren mieux. Donc dans mon exemple, si je mets une exception :

    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
    try
    {
      //...
       if(StringGrid1->RowCount==2)
               ShowMessage("Attention, vous ne pouvez pas supprimer cette ligne");
      else
      {
        StringGrid1->RowCount--;
        StringGrid1->Height=(StringGrid1->Height-25);
      }
    }
    catch(Exception &e)
    {
        //e contient l'erreur et tu peux faire e.c_str()
      ShowMessage("Erreur");
    }

    Cela marche?
    Sinon j'ai une autre question, quand le message d'erreur s'affiche, l'en tete de la fenêtre porte le nom de mon projet or je voudrais mettre "Erreur" ou "attention". comment dois-je faire?

  14. #14
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Pour cela il suffit de mettre ce code juste avant ton ShowMessage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1->Caption = "Ce que tu veut écrire" ;

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut re
    Oui mais ce n'est pas form1. je ne sais pas comment il s'appelle le form pour showmessage.

  16. #16
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Citation Envoyé par sandball22
    Oui mais ce n'est pas form1. je ne sais pas comment il s'appelle le form pour showmessage.
    Pour le ShowMessage je ne sais pas, peut etre en récupérant le Handle de cette fenetre.

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 342
    Par défaut re
    J'ai contourné mon problème en prenant


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int res = MessageBox(0,"Attention, vous ne pouvez pas supprimer cette ligne.\n", "Attention", MB_OK);

    Et cela fonctionne. Merci pour votre aide.

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

Discussions similaires

  1. [ADOConnect] gestion des exception en tout temps
    Par portu dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/04/2005, 19h01
  2. [ORACLE 9i] Gestion des exceptions
    Par sygale dans le forum SQL
    Réponses: 6
    Dernier message: 19/08/2004, 15h06
  3. Gestion des exception (EOleException)
    Par shurized dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/06/2004, 17h25
  4. [XMLRAD] gestion des exceptions
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 28/01/2003, 17h48
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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