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

Bases de données Delphi Discussion :

Faire remonter une exception Firebird


Sujet :

Bases de données Delphi

  1. #1
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut Faire remonter une exception Firebird
    Bonjour !
    donc c'est sur la suggestion de Serge que je reprends ce sujet que j'ai déposé sur le forum Firebird puisqu'il s'agit plus particulièrement de Delphi/FireBird.

    Alors pour le développement j'utilise toujours Delphi 2010, pour la base de données Firebird 2.5 et pour les composants d'accès j'utilise IBDAC version 4.1.6

    En effet, j'ai essayé d'intercepter les exceptions par ce bloc de 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
    try
          try
            fmMain.IBCQuery_MAJ.Execute;
            fmLOG.cxMemo_LOG.Lines.Add(Format(
              'SR %s -- donnée insérée avec succés', [NOM_OUVRAGE]));
          except
            on E: EIBCError do
            begin
              fmLOG.cxMemo_LOG.Lines.Add(Format(
                'Ouvrages à l''arrêt -- > SR %s  <Erreur  %s>', [NOM_OUVRAGE, E.Message]));
              Inc(fmMain.Ligne_Erreur);
              fmMain.TB_LIGNE_ERROR[fmMain.Ligne_Erreur] := Format(
                'Ouvrages à l''arrêt -- > SR %s  <Erreur  %s>', [NOM_OUVRAGE, E.Message]);
              inc(Ligne);
              Continue;
            end;
          end;
    mais malgré ça j'ai eu cette erreur :
    Ouvrages à l'arrêt -- > SR CARMILA <Erreur
    Operation violates CHECK constraint on view or table TB_SR_ARRET
    At trigger 'CHECK_401'>
    Bien que sachant très bien l'interpréter mais pour un autre utilisateur elle veut rien dire donc le module EIBCError n'est pas en mesure d'intercepter cette erreur, existe-il un module Firebird plus complet pour intercepter tout les messages d'erreurs remontés par la base de données Firebird ?

    Merci par avance.

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 683
    Billets dans le blog
    65
    Par défaut
    Re,

    Nous y voilà avec les détails, chouette !

    Hélas, je ne connais pas suffisamment IBDac pour répondre précisément, mais si l'erreur de contrainte n'est pas interceptée c'est peut être simplement parce que cette erreur ne fait pas partie de EIBCError.
    A priori EIBCerror est dérivé de EDatabaseError là s'arrête (pour l'instant mon exepertise IBdac)

    perso je ferais mon exception sur E:Exception pour être sûr de tout attraper et ensuite je testerai le type d'exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (E is EIBCError) then begin ...... end 
    else showmessage(E.message)
    pour voir si dans ce cas là, l'exception est bien capturée

    Je ne comprends pas non plus pourquoi il y a un Continue mais je pense que c'est parce qu'il y a un traitement plus complexe.

  3. #3
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    perso je ferais mon exception sur E:Exception pour être sûr de tout attraper et ensuite je testerai le type d'exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (E is EIBCError) then begin ...... end 
    else showmessage(E.message)
    pour voir si dans ce cas là, l'exception est bien capturée
    Tu veux dire à l'intérieur de mon try Except End ?!! j'ajoute un if ? si c'est ça OK je vais tester

    Citation Envoyé par SergioMaster Voir le message
    Je ne comprends pas non plus pourquoi il y a un Continue mais je pense que c'est parce qu'il y a un traitement plus complexe.
    Tout à fait ... c'est à l'intérieur d'une boucle

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 683
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    Tu veux dire à l'intérieur de mon try Except End ?!! j'ajoute un if ? si c'est ça OK je vais tester
    je crois que j'ai peut être pas été assez clair
    je voyais quelque chose comme :
    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
     try
            fmMain.IBCQuery_MAJ.Execute;
            fmLOG.cxMemo_LOG.Lines.Add(Format(
              'SR %s -- donnée insérée avec succés', [NOM_OUVRAGE]));
          except
            on E: Exception  do
            begin
              if if (E is EIBCError) then begin
              fmLOG.cxMemo_LOG.Lines.Add(Format(
                'Ouvrages à l''arrêt -- > SR %s  <Erreur  %s>', [NOM_OUVRAGE, E.Message]));
              Inc(fmMain.Ligne_Erreur);
              fmMain.TB_LIGNE_ERROR[fmMain.Ligne_Erreur] := Format(
                'Ouvrages à l''arrêt -- > SR %s  <Erreur  %s>', [NOM_OUVRAGE, E.Message]);
              inc(Ligne);
             end 
              else  ........ // a voir
     
              Continue;
            end;
          end;

    Continue .... Tout à fait ... c'est à l'intérieur d'une boucle
    je doute qu'il soit utile mais bon ...

  5. #5
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    Là je vois mieux ... c'est parti pour le test

    Citation Envoyé par SergioMaster Voir le message
    je doute qu'il soit utile mais bon ...
    sur ça je vous rassure mon ami il est très utile dans mon cas

Discussions similaires

  1. Réponses: 8
    Dernier message: 28/02/2017, 12h10
  2. Remonter une exception (SOAP)
    Par yazman dans le forum Services Web
    Réponses: 4
    Dernier message: 04/12/2007, 16h22
  3. Remonter une exception de la méthode Run() ?
    Par Jonef dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 30/01/2007, 22h06
  4. remonter une exception
    Par robocop2776 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/01/2007, 11h44
  5. Réponses: 2
    Dernier message: 28/08/2003, 00h00

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