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 :

Gestion d'exceptions ne fonctionne pas


Sujet :

Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 130
    Points : 46
    Points
    46
    Par défaut Gestion d'exceptions ne fonctionne pas
    J'aimerais intercepter proprement une exception, et pour cela, j'ai 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
    .Cellule := Mafeuille.getCellByPosition(1,113);
              erreur:=False;
              try
                StrToTime(chaine);
                except
              on EConvertError do
                erreur:=True;
              end;
              if erreur=False then
              begin
              Cellule.SetString(TimeToStr(Time()+StrToTime(chaine)));
              Cellule := Mafeuille.getCellByPosition(1,114);
              Cellule.SetString(u);
              affiche_6(119);
              resultat:=1;
    Mon but est d'éventuellement intercepter l'erreur que peut renvoyer StrToTime(chaine)... Mon problème est que la boîte du dialogue avec l'erreur apparaît à l'exécution même avec le try...except... end;
    Le but est que le programme fonctionne sans que l'utilisateur s'aperçoive qu'il y a eu une erreur.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    J'ai développé ce code pour vérifier la première partie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      Erreur: Boolean;
    begin
      try
        StrToTime('15/12:18');
      except
        on EConvertError do
          Erreur:=True;
      end;
      if Erreur then ;
    end;
    Cette partie de programme fonctionne parfaitement. L'erreur doit donc se situer dans la deuxième partie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if erreur=False then
    begin
    Cellule.SetString(TimeToStr(Time()+StrToTime(chaine)));
    Cellule := Mafeuille.getCellByPosition(1,114);
    Cellule.SetString(u);
    affiche_6(119);
    resultat:=1;
    Là, je peux pas tester sans connaître le composant utilisé. Mais avec le débogage, il doit être facile de trouver la ligne en cause.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cellule.SetString(TimeToStr(Time()+StrToTime(chaine)));
    D'ailleurs, le code ci-dessus me paraît bizarre, car tu inclus des données chaîne "TimeToStr" avec des données valeurs "StrToTime". J'ai fait aucun test, mais il y a lieu de vérifier.

    Bon courage

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 130
    Points : 46
    Points
    46
    Par défaut
    Merci pour la réponse.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    à mon avis, sauf cas particulier, l'idée des blocs try except est plutôt de gérer comme ceci, si ton extrait de code est bien fidèle à ton problème :
    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
    .Cellule := Mafeuille.getCellByPosition(1,113);
              try
                aTime:=StrToTime(chaine);
                Cellule.SetString(aTime); 
                resultat:=1;
              except
                on EConvertError do
                begin
                  // ici le traitement par défaut en cas d'erreur
                  Cellule.SetString(TimeToStr( Time() );
                  resultat:=0; // si tu as besoin de différencier par la suite ; sinon1
                end;
              end;
              Cellule := Mafeuille.getCellByPosition(1,114);
              Cellule.SetString(u);
              affiche_6(119);
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 423
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 423
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonjour à toutes et à tous,

    @ Tourlourou, dans ce cas, ce code ne gère pas l'exception car si l'image demandée "Fichier.bmp" n'existe pas, le code ne continue pas alors qu'il le devrait,

    Question faut t'il aussi implanter une gestion d'exception :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     if not fileexists('C:\Data\Fichier.bmp') then begin
     image8.Picture.Bitmap.LoadFromResourceName(hinstance, 'logo');
     image4.Picture.Bitmap.LoadFromResourceName(hinstance, 'logo');
     end
     else begin
     image8.Picture.loadfromfile('C:\Data\Fichier.bmp');
     image4.Picture.loadfromfile('C:\Data\Fichier.bmp');
     end;
    @+,

    Cincap

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    en fait, pour le problème posé, la solution pourrait être :
    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
    .Cellule := Mafeuille.getCellByPosition(1,113);
              try
                aTime:=StrToTime(chaine);
                resultat:=1;
              except
                on EConvertError do
                begin
                  aTime:=Time();
                  resultat:=0; // si tu as besoin de différencier par la suite ; sinon 1
                end;
              end;
              Cellule.SetString( TimeToStr( aTime) ); 
              Cellule := Mafeuille.getCellByPosition(1,114);
              Cellule.SetString(u);
              affiche_6(119);
    @cincap : quelle est l'erreur, si le code s'arrête ? ton code semble pourtant bien gérer la présence du bmp... le hinstance est-il juste ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 423
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 423
    Points : 1 326
    Points
    1 326
    Par défaut
    @ Tourlourou, en effet, le reste du code devrait fonctionner mais en fait sous Seven 64bits certains dossiers sont protégés et forcément généré une exception.

    Le code proposé est un exemple sauf que le chemin proposé est accessible !

    Sinon tout est ok.

    @+,

    Cincap

  8. #8
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 299
    Points
    11 299
    Billets dans le blog
    6
    Par défaut
    Hi Hi, voici des soucis qui m'échappent : je ne suis pas à la pointe de la technologie avec Delphi 5 Pro sous Windows 98 Première Edition...

    Cela dit, autant utiliser des fonctions API qui renvoient les dossiers APPDATA ou autres, et ne pas se disperser pour les fichiers...
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

Discussions similaires

  1. Mon exception ne fonctionne pas
    Par pierrot10 dans le forum Langage
    Réponses: 1
    Dernier message: 30/01/2014, 20h42
  2. Pourquoi mon TRY..EXCEPT ne fonctionne pas ?
    Par clavier12AZQSWX dans le forum Général Python
    Réponses: 5
    Dernier message: 30/01/2014, 18h28
  3. Gestion de INSERT ne fonctionne pas
    Par raphchar dans le forum ASP.NET
    Réponses: 10
    Dernier message: 03/03/2012, 19h44
  4. gestion d'erreur qui ne fonctionne pas
    Par will Igetit dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/03/2009, 10h09

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