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 :

Utilisation Correcte de l'exception TRY


Sujet :

Delphi

  1. #1
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut Utilisation Correcte de l'exception TRY
    Salut.
    En suivant la discussion sur le test sur une date, j'ai utilisé les deux méthodes de test la première par l'utilisation de TryStrToDate et en gérant classiquement l'exeption Try telles que proposé par ShaileTroll et SergioMaster.

    J'arrive à utilser TryStrToDate, mais lorsque j'utilise la méthode classique, je déclence une classe d'exception EconvertError, je n'arrive pas à déterminer mon erreur.

    Voilà le code que j'utilise où se situe mon erreur s'il vous plait?

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    var ADate : TDateTime;
    begin
       if not TryStrToDate(Edit1.Text, ADate) then
       begin
         Showmessage('date invalide');
       end else
       begin
         Showmessage('date valide');
       end;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    var ADate : TDateTime;
    begin
     Try
       ADate:=StrToDate(Edit1.Text);
     except
    //   Showmessage('date invalide');
     end;
    end;
     
    end.
    Merci

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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 901
    Points : 6 026
    Points
    6 026
    Par défaut
    C'est quand tu exécutes ton prog depuis l'IDE ?
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par qi130
    C'est quand tu exécutes ton prog depuis l'IDE ?
    Effectivement le programme se compile correctement.
    Le test avec le boutton:'Button1' se fait correctement.

    C'est lorsque je clicke sur le boutton :'Button2' que je déclenche la classe d'exception EconvertError et cela lorsque je saisis une date incorrecte bien sur.
    Merci

  4. #4
    Membre chevronné

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Il n'y a pas d'erreur, c'est justement le comportement normal, si la chaîne passée à StrToDate n'est pas correcte comme date, une exception est générée, à la différence TryStrToDate qui est plus gentil est renvoi seulement False quand la date est invalide.

    D'ailleurs je penses que ShaiLeTroll avait dit que StrToDate appelait TryStrToDate.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  5. #5
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par Guymelef
    Il n'y a pas d'erreur, c'est justement le comportement normal, si la chaîne passée à StrToDate n'est pas correcte comme date, une exception est générée, à la différence TryStrToDate qui est plus gentil est renvoi seulement False quand la date est invalide
    Je suis perdu.

    L'intérêt de Try est justement de ne pas générer de sortie de l'application.

    Moi je pensais que Try-Except attirée l'attention sur la non validité de la date, et n'exécutait pas le second bloc dixit help Delphi. ce qui permettait par exemple d'annuler la saisie (réinitialisation de Edit1.Text), mais on reste dans l'Application.


    Mais si bien qu'utilisant Try-Except l'application est arrêtée, autant ne rien utiliser.

  6. #6
    Membre expérimenté
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Points : 1 392
    Points
    1 392
    Par défaut
    Compiles ton code, puis lances l'executable de ton programme sans passer par Delphi.

    Je pense que l'erreur ne se produira pas.

  7. #7
    Teo
    Teo est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Août 2002
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 110
    Points : 111
    Points
    111
    Par défaut
    Slt

    Dans l'editeur désactiver l'option "arreter si exception"

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    +1 @Teo

    Dans l'editeur désactiver l'option "arreter si exception"
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 901
    Points : 6 026
    Points
    6 026
    Par défaut
    Un peu expéditif, mais ça marche !

    Je crois me souvenir qu'on peut aussi choisir les classes d'exception à ignorer...(?)
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  10. #10
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par Frank
    "Compiles ton code, puis lances l'executable de ton programme sans passer par Delphi.
    ça marche Merci. ça me rassure dans mes capacités à poursuivre avec Delphi (Je vous rappelle je suis autodidacte).

    Merci aussi à SergioMaster,Téo et qi130.

    Comment désactiver l'option "arreter si exception" ? Je suis allé à Outils/Option de l'Editeur et je n'ai pas pu trouver cette option.

    Merci

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 192
    Points
    192
    Par défaut
    Ce n'est pas dans outil/option de l'éditeur mais dans outil/option du debuggeur (le menu du dessous)
    Tu peux le faire, tu veux le faire tu vas le faire Bref, soyons positif

  12. #12
    Membre chevronné

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    En fait pour bien comprendre ce qu'il se passe, effectivement positionné un bloc try...except va permettre de capturer une exception si elle se déclenche et l'empêcher de remonter (sauf si vous faites un raise dans le bloc du except).

    Cependant si vous exécutez votre application en mode débuggage, si une exception se déclenche l'EDI prend la main et arrête l'exécution vous ramenant au point où c'est déclenché l'exception mais avant que le bloc except ne soit exécuté. Donc si vous faites F9 à ce moment là pour sauter cette exécution vous pouvez vous rendre compte qu'il n'y a pas de boîte de dialogue avertissant d'une exception.
    Et en mode exécution sans débuggage, c'est complètement transparent, l'exception est bien attrapée et l'utilisateur ne voit rien.

    Pour changer le comportement de l'EDI vis à vis des exceptions il faut effectivement soit désactiver la fonctionnalité soit rajouter la classe d'exception parmi celles à ignorer par le debugger.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  13. #13
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    Citation dd garion :
    Ce n'est pas dans outil/option de l'éditeur mais dans outil/option du debuggeur (le menu du dessous)

    Je n'arrive pas à trouver dans outil/option du debuggeur l'option "arrêter si exception". Peux-tu me le préciser STP.

  14. #14
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    case à cocher "Arrêter sur exceptions Delphi" dans l'onglet "Exception du Langage"

    sinon, tu fais F1, onglet "Rechercher", tu mets dans le champ "1 Entrer les mots que vous voulez rechercher" le texte "Arrêter sur exceptions Delphi", tu as ce moment, une seule et unique rubrique "Page Exceptions du langage", et tu lis la page ...

    Je décoche cette option 90% du temps, surtout qu'il est vrai que l'on s'arrête souvent sur les problèmes de conversion de date, et puis selon sa façon de programmer, soit en utilisant des erreurs via retour de fonction, soit en utilisant l'exception comme gestionnaire d'erreur, et bien, on se retrouve à avoir des messages en permance, j'active cette option, pour ma part quand j'ai une difficulté à débugger un programme (le EAccessViolation ou le EConvertError font parti de mes exclusions habituels ...)

    D'ailleurs, il est bien qu'il y ait de plus en plus les Versions des fonction en TryStrToXXX ... c'est souvent utile ... mais du coup lorsque l'on revient sur un Delphi antérieur (lol j'ai du code qui peut tourner sur D3, et puis je suis à 80% sur D7 et 20% sur D6 au bureau), c'est fonction "Try..." manque
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  15. #15
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    case à cocher "Arrêter sur exceptions Delphi" dans l'onglet "C"

    sinon, tu fais F1, onglet "Rechercher", tu mets dans le champ "1 Entrer les mots que vous voulez rechercher" le texte "Arrêter sur exceptions Delphi", tu as ce moment, une seule et unique rubrique "Page Exceptions du langage", et tu lis la page ...
    Pas de chance. Ni l'une ni l'autre ne marchent.

    Je travaile avec Delphi 7 sous Windows XP.

    La première méthode : Outils/Option débogueur/Arrêter sur exceptions Delphi, je n'ai pas de case à cocher "Arrêter sur exceptions Delphi" .

    Avec la deuxième méthode F1/Rechercher, " le texte "Arrêter sur exceptions Delphi", donne "aucune rubrique trouvée".

  16. #16
    Membre chevronné

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Avec Delphi 7 cette option se trouve normalement dans Outils->Options du débogueur puis dans l'onglet "Exceptions du langage" ici se trouve les classes d'exceptions ignorées ainsi que la case à cocher "Arrêter sur exceptions Delphi".
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  17. #17
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par Aka Guymelef Voir le message
    Avec Delphi 7 cette option se trouve normalement dans Outils->Options du débogueur puis dans l'onglet "Exceptions du langage" ici se trouve les classes d'exceptions ignorées ainsi que la case à cocher "Arrêter sur exceptions Delphi".
    Comme je le disais précédemment les cases à cocher dans Outils->Options du débogueur->Exceptions du langage ne comporte pas "Arrêter sur exceptions Delphi".

    Les seules cases existantes sont :
    "Exceptions EAbort de la VCL"
    "Exceptions EIDconnClosedGraceFully Indi"
    "Exceptions DAO Microsoft"
    "Exceptions Internes VisiBroker"
    "Exceptions Système CORBA"
    "Exceptions Utilisateur CORBA"

  18. #18
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Baisse les yeux, en dessous la TCheckListBox ... et oh, tu verras la case, ...

    Ah, j'ai D7 Pro, et ce que je t'ai dit pour l'aide fonctionne parfaitement, enlève tes moufles ...
    Images attachées Images attachées  
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 192
    Points
    192
    Par défaut
    Pour info, cette case à cocher existe déjà sous Delphi 6 (et probablement les version précédentes).

    Damene, tu devrais essayer de te trouver un bon livre ou un tutorial sur Delphi, je pense que cela t'aidera sincèrement à comprendre cette IDE.
    Tu peux le faire, tu veux le faire tu vas le faire Bref, soyons positif

  20. #20
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Baisse les yeux, en dessous la TCheckListBox ... et oh, tu verras la case, ...

    Ah, j'ai D7 Pro, et ce que je t'ai dit pour l'aide fonctionne parfaitement, enlève tes moufles ...
    Exact

    Ils ont des yeux et ils ne voient pas
    disait Jésus


    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. comment utiliser correctement les sessions?
    Par cladsam dans le forum Langage
    Réponses: 5
    Dernier message: 06/02/2006, 11h56
  2. Réponses: 5
    Dernier message: 30/01/2006, 14h18
  3. [C#] Comment utiliser correctement Stream.Read ?
    Par ArChAnGe76 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 20/12/2005, 20h48
  4. Comment utiliser correctement le debugger de DevCPP
    Par Le Furet dans le forum Dev-C++
    Réponses: 2
    Dernier message: 29/09/2005, 09h56
  5. Exception & Try..catch
    Par PurL dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2002, 15h35

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