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 :

Intercepter les messages d'erreur du SGBD FireBird


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné

    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2010
    Messages : 297
    Par défaut Intercepter les messages d'erreur du SGBD FireBird
    Bonjours,
    J'ai deux tables liées par la relation 1-n (la clé étrangère est idservice):
    Services(idservice,nomservice)----1,n-----Employés(idemployé,idservice,nom,adresse,qualité).
    A la suppression d'un enregistrement de la table Services, un message d'erreur du SGBD (Firebird) apparait : Violation of FOREIGN KEY, si l'enregistrement en question est lié à la table Employés.

    Comment intercepter ce message d'exception et afficher un message personnalisé ?

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 086
    Par défaut
    try except EDatabaseError
    selon ta couche d'accès, tu pourras avoir une classe d'exception plus précise
    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

  3. #3
    Membre chevronné

    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2010
    Messages : 297
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    try except EDatabaseError
    selon ta couche d'accès, tu pourras avoir une classe d'exception plus précise
    J'utilise TZQuery de Zeos, donc je suppose que je dois utiliser le Try Except dans l'événement OnDeleteError, mais je ne vois pas qu'est ce que je dois écrire entre Try et Except.

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 086
    Par défaut
    Je ne connais pas Zeos, mais OnDeleteError c'est du standard TDataSet !

    Soit tu écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
      ZQuery.Exec();
    except
      on e: EZDatabaseError do
        ...
      on e: EDatabaseError do
        ...
    end;
    soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      // TZQueryHelper sera une classe que TU devras créer !
      ZQuery.OnDeleteError := TZQueryHelper.TaProcedureDeGestionDErreur;
      ZQuery.Delete();
    ...
     
    /*class*/ procedure TZQueryHelper.TaProcedureDeGestionDErreur(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction);
    begin
      ...
      Action := daAbort; ...
    end;
    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

  5. #5
    Membre chevronné

    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2010
    Messages : 297
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Soit tu écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
      ZQuery.Exec();
    except
      on e: EZDatabaseError do
        ...
      on e: EDatabaseError do
        ...
    end;
    Donc j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Try
    ZQuery.ExecSQL;   //ZQuery.Exec(); n'existe pas.
    Except
    on E: EDatabaseError  do   //y a t'il possibilité de faire la différence entre différentes exception du SGBD  ?
    Showmessage('Erreur SGBD :'+E.Message);
    end;
    Mais ça ne marche toujours pas, je n'obtiens que l'exception du SGBD.
    par contre, en écrivant que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Showmessage('Erreur SGBD :'+E.Message);
    dans l'événement OnDeleteError j'obtient mon message suivi par l'exception du SGBD. Et bien sur je ne veut pas que le message du SGBD apparait

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 086
    Par défaut
    Citation Envoyé par adelneo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    except
      on E: EDatabaseError  do   //qu'elle est l'utilité se cette instruction ?
    Cela permet de filtrer sur un type donné d'exception, ainsi seules ces exceptions seront capturées, les autres continueront leur chemin ...

    lit bien ma réponse, tu as loupé

    Voir TDataSet.OnDeleteError et de TDataAction

    .
    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

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

Discussions similaires

  1. Intercepter les messages d'erreurs de requetes
    Par sabdoul dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/04/2013, 12h08
  2. Réponses: 6
    Dernier message: 21/05/2008, 19h16
  3. [Message d'erreur] gérer les message d'erreurs
    Par heid dans le forum Langage
    Réponses: 2
    Dernier message: 12/10/2004, 14h57
  4. recuperer les messages d'erreurs de interbase
    Par devalender dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/06/2004, 11h45
  5. Réponses: 2
    Dernier message: 06/04/2004, 08h39

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