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 :

Afficher message personnalisé


Sujet :

Delphi

  1. #1
    Membre régulier Avatar de chh2008
    Inscrit en
    Mars 2008
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2008
    Messages : 129
    Points : 106
    Points
    106
    Par défaut Afficher message personnalisé
    Bonjour,

    Je souhaite donner un numéro aux messages d'erreurs liée à la base de donnée.
    Message
    Violation of FOREIGN KEY constraint "FK_CLIENT" on table "CLIENT"
    Foreign key references are present for the record.


    Merci pour votre aide

  2. #2
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Il me semble que la plupart du temps tu as un message remonté dans l'exception.

  3. #3
    Membre régulier Avatar de chh2008
    Inscrit en
    Mars 2008
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2008
    Messages : 129
    Points : 106
    Points
    106
    Par défaut
    Je pense aussi, mais comment personnaliser chacun d'entre eux ?

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 196
    Points : 41 425
    Points
    41 425
    Billets dans le blog
    63
    Par défaut
    Quelle SGBD , Quels composants sont utilisés ?

    par exemple : Pour Firebird , avec les ZEOSDBO
    - dans la BDD il est possible de créer des exceptions
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      CREATE EXCEPTION PAIEMENTANEPASSUPPRIMER
    'Ne pas Supprimer : Affecté à une touche';
    couplée a un Trigger
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SET TERM ^ ;
    ALTER TRIGGER PAIEMENT_DELETE ACTIVE
    BEFORE DELETE POSITION 0
    AS 
    BEGIN 
    IF (OLD.TOUCHE>0) THEN EXCEPTION PAIEMENTANEPASSUPPRIMER; 
    END^
    SET TERM ; ^

    Dans le programme on obtient alors un message d'erreur avec l'intitulé de l'exception mais , hélas , avec encore des informations inutiles pour l'utilisateur , du genre :
    SQL error 808
    Ne pas Supprimer : Affecté à une touche
    pour vraiment personnaliser le message , il va falloir passer par un gestionnaire d'exception
    En utilisant certains composants d'accès aux données cela peut se faire facilement , pour d'autres , non
    Avec ZeosDBO on a un event OnDeleteError donc c'est facile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TFormModePaiement.TPaiementDeleteError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    begin
        Main.MainMessage('Modes Paiement: Erreur','Ce "Code" est affecté a une Touche,'+
                         ' il ne peut être détruit');
        Action:=daAbort;
    end;
    prenons maintenant d'autres cas , toujours avec Zeos

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TFormModePaiement.TPaiementPostError(DataSet: TDataSet;
      E: EDatabaseError; var Action: TDataAction);
    begin
    with EZDatabaseError(E) do
      begin
        case ErrorCode of
          -625 : Main.MainMessage('Modes Paiement : Erreur Base de Données','La colonne "Code" doit avoir une valeur');
          -803 : Main.MainMessage('Modes Paiement : Erreur Base de Données','Code déjà existant '+#13+#10+'Il ne peut y avoir deux Codes identiques');
          else Main.MainMessage('Modes Paiement : Erreur Base de Données',E.Message,MM_ERREUR,MM_SEND);
        end;
      end;
    Action:=daAbort;
    end;
    sans Zeos il suffit d'encadrer le post par un try except end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    try
      Post;
    except
     on E:EdatabaseError do 
      begin
         // gerer les erreurs
      end;
    end;
    Mais cela ne sera pas forcément suffisant , par exemple dans le dernier code ZEOS , toutes les exceptions 'personnalisées' auront le même numéro d'erreur gênant . La solution , parser le message d'erreur (e.message) pour n'obtenir que la partie "personnelle" qui se trouve être la deuxième ligne (et les suivantes) , une petite manipulation de String et on y est ouf

    Tout cela pour expliquer , que plus on aura d'indications , plus on répondra pertinemment à la question

  5. #5
    Membre régulier Avatar de chh2008
    Inscrit en
    Mars 2008
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2008
    Messages : 129
    Points : 106
    Points
    106
    Par défaut
    J'ai pensé au try ... except
    J'ai penser à numeroter les messages et faire par la suite un referentiel
    Genre erreur 001 -> "Pas de connexion internet"

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 196
    Points : 41 425
    Points
    41 425
    Billets dans le blog
    63
    Par défaut
    Si déjà on savait de Quelle SGBD et avec quels composants déjà demandé dans mon post

    Ceci dit , le try...except est incontournable

  7. #7
    Membre régulier Avatar de chh2008
    Inscrit en
    Mars 2008
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2008
    Messages : 129
    Points : 106
    Points
    106
    Par défaut
    Fierbird 2.5
    Ibtable

  8. #8
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 196
    Points : 41 425
    Points
    41 425
    Billets dans le blog
    63
    Par défaut
    Ok , bon IBTable n'est pas forcément ma tasse de thé , d'ailleurs on conseille de l'éviter pour Firebird 2.1 et + . Bon , en plus j'aurais du demander quelle version de Delphi pour faire bonne mesure

    Donc pour la partie Firebird , j'ai déjà expliquer comment faire des Exceptions très personnalisées.

    IBtable comme ZTable a un évènement OnPostError / onDeleteError donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure TForm1.IBTable1PostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    begin
    with IBDatabaseError(E) do
      begin
        case IBErrorCode of
          -625 : ShowMessage('la clé doit avoir une valeur');
          -803 : ShowMessage('Clé déjà existante');
          else showmessage('Erreur'+E.Message);
        end;
      end;
    Action:=daAbort;
    end;
    pour les codes d'erreurs IBErrorCode , je pense qu'il faut se référer a
    ce lien pour 2.1
    je n'ai pas trouvé celui de 2.5

    pour plus de détail on peut aussi tester sur GDSCode à la place de IBerrorCode

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

Discussions similaires

  1. [MVC] Afficher un message personnalisé lors d'une erreur http 500
    Par andlio dans le forum Spring Web
    Réponses: 6
    Dernier message: 06/04/2012, 23h41
  2. afficher message erreur personnalisé
    Par chris_013 dans le forum JSF
    Réponses: 5
    Dernier message: 05/02/2009, 14h42
  3. Réponses: 9
    Dernier message: 03/07/2008, 15h43
  4. [formulaire]afficher un message personnalisé
    Par adil_math2006 dans le forum IHM
    Réponses: 11
    Dernier message: 29/05/2006, 11h14
  5. afficher message d'alerte sur clic pendant chargement
    Par petitmic dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/11/2005, 12h14

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