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 :

Récupérer code erreur avec Firebird et Zeoslib


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    591
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 591
    Par défaut Récupérer code erreur avec Firebird et Zeoslib
    Bonjour,

    Je réalise une application en utilisant Firebird version 2.1 et Zeoslib version 6.6.6. Tout ceci avec delphi 7

    Lorsqu'une erreur se produit dans la base, elle retourne un code d'erreur que je n'arrive pas récupérer. Je n'ai pas trouvé l'unité de Zeoslib à inclure dans les uses pour obtenir les codes d'erreurs de Firebird.

    Par contre, je récupère bien le message. Cependant, je voudrais faire un traitement particulier pour certaines erreurs. Exemple -530 erreur liée au Foreign Key.

    Actuellement, j'utilise ce code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        dm.ZConnect.StartTransaction;
        try
          ExecSQL;
          dm.ZConnect.Commit;
        except
          on E: Exception do
          begin
            lTest := False;
            MsgDlg(E.Message, mtError, ['mbOk'], ed3.ClientOrigin.Y + ed3.Height, pnl1);
            if dm.ZConnect.InTransaction then
              dm.ZConnect.Rollback;
          end;
        end;
    MsgDlg est une boîte qui personnalise l'affichage des messages.

    Je dois certainement remplacer "on E: Exception do" par une autre instruction, mais quoi ?

    Si quelqu'un peut me donner la réponse pour récupérer le code d'erreur, "E.CodeError", il me rendrait service.

    Merci à tous de vos réponses, lesquelles me permettront de résoudre cette petite difficulté. Le code d'erreur apparaissant dans "E.Message", je peux faire un bidouillage, mais cela ne correspond à ma façon de faire. De plus, je suis sûr qu'il y a une solution propre, mais l'aide de Zeoslib est un peu short ou alors c'est mes propres compétences qui sont trop faibles.

    Merci à tous

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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    Par défaut
    As-tu essayé ZAbstractRODataset ?
    Cf. http://test.bravecobra.com/zeoslib/f...as-source.html
    Merci mais j'ai pas creusé !

  3. #3
    Membre très actif Avatar de TryExceptEnd
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 501
    Par défaut
    Comme indiqué plus haut, c'est dans l'unité "ZAbstractRODataset" que se trouve la gestion des exceptions de base de données.
    donc tu fait un truc dans ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
    excecution_requete
    except
     on E:EZDatabaseError do
     begin
      if (E as EZDatabaseError).ErrorCode = [code erreur] then faire_quelque_chose;
     end;
    end

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    591
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 591
    Par défaut
    Bonjour,

    Je vous remercie pour vos réponses. J'avais déjà essayé avec ZAbstractRODataset, mais sans résultat.

    J'ai repris le code de TryExceptEnd, mais là également l'exception n'est pas déclenché.

    Le problème provient d'un autre point, je vais faire des recherches pour déterminer la cause de ce dysfonctionnement.

    Si quelqu'un a une idée merci d'avance.

    Je vous remercie tous les deux pour vos réponses car elles confirment l'unité à employer. Il me reste à trouver pourquoi l'exception n'est pas prise en compte.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    591
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 591
    Par défaut
    Bonjour,

    Après des recherches mieux orientées à partir des informations obtenues, j'ai trouvé.

    En fait, il s'agit d'une erreur SQL et non de la base de données. Il faut donc utiliser la classe d'exception "EZSQLException" qui se trouve dans l'unité ZDbcintfs.

    Le code devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        try
          ExecSQL;
          dm.ZConnect.Commit;
        except
          on E: EZSQLException do
          begin
            lTest := False;
            MsgDlg(InttoStr((E as EZSQLException).ErrorCode){E.Message}, mtError, ['mbOk'], ed3.ClientOrigin.Y + ed3.Height, pnl1);
            if dm.ZConnect.InTransaction then
              dm.ZConnect.Rollback;
          end;
        end;
    Là, je récupère bien mon code d'erreur -530.

    Je vais maintenant modifier mon exception pour faire une présentation conforme à mes souhaits.

    Merci de vos remarques, lesquelles m'ont permis de résoudre cette difficulté.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/04/2012, 14h34
  2. makefile récupérer code erreur
    Par boris_couturier dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 24/05/2011, 17h47
  3. Copytree, récupérer code erreur
    Par storm85 dans le forum Général Python
    Réponses: 9
    Dernier message: 01/06/2010, 10h29
  4. Récupérer code erreur dans une log
    Par clluciole dans le forum Développement
    Réponses: 1
    Dernier message: 03/08/2009, 15h20
  5. récupérer code html avec API mozilla (ou gecko)
    Par samitriani dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 12/12/2008, 15h45

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