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 :

Problème des exceptions


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Points : 47
    Points
    47
    Par défaut Problème des exceptions
    bonjour

    j'ai un probleme d'exception et j'arrive de le réglé
    voila mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var
    x:integer;
    begin
    try
    x:=strtoint(edit1.Text);
    except
    on e.Input(edit1.Text)
      do begin
           showmessage('erreur');
          end;
    end;
    il m'affiche une erreur la voila ( identificateur non declaré 'e' )

    je vous remerci d'avance

  2. #2
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 60

    Informations forums :
    Inscription : Août 2007
    Messages : 48
    Points : 43
    Points
    43
    Par défaut
    Si c'est pour éviter l'erreur de conversion Chaine - > entier, il y a les 3 évenement OnKey .... du TEdit qui te permettent de savoir ce qui est entré par l'utilisateur et ce que tu veux en garder car. par car.

    Mieux que cela , il y a TEditMask.

    Quand à l'exception, effectivement on se demande ce qu'est "e" ?

  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Visiblement tu souhaites intercepter l'erreur de conversion à l'aide d'except mais ton code est plutôt mal construit (sans vouloir te vexer )

    Un p'tit exemple de contrôle d'erreur:
    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
     
    var
      x, y, z: Integer;
    begin
      try
        x := StrToInt(Edit1.Text);
        y := StrToInt(Edit2.Text);
     
        z := x div y;
        ShowMessage('x div y = ' + IntToStr(z));
        // ...
      except
        on E: EConvertError do
          ShowMessage('Les valeurs saisies doivent être entières.' + #13#10 +
                      E.Message);
        on E: EDivByZero do
          ShowMessage('La valeur de ''Edit2'' doit être différente de 0');
      end;
    Je te conseille de consulter cette rubrique dans les cours de ce site.

    @+ Claudius.

  4. #4
    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
    pour ton code autant faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var
      x:integer;
    begin
      try
        x:=strtoint(edit1.Text);
      except
        showmessage('erreur');
      end;
    end;
    sinon moi j'aime bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var
      x:integer;
    begin
      if TryStrToInt(Edit1.Text,x)=false then
        ShowMessage('erreur');
    end;

  5. #5
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Points : 47
    Points
    47
    Par défaut
    bonjour
    comment géré les exceptions des constraints
    j'ai utilisé les constraints et je veux afficher tous les exception un par un

    1) le code est unique
    2) le nom est entre ('djerdjar' et 'laaribi')
    3) la date
    voila mon code source

    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
    21
    22
    23
    24
    25
    26
     
    var
     x:tdatetime;
     a:string;
     
    begin
     try
      x:=strtodate(editdate.text);
      a:=editnom.text;
     
      form1.ADOQuery1.Close;
      form1.ADOQuery1.SQL.Clear;
      form1.ADOQuery1.SQL.Add(10,'djerdj','yacine',198i-12-04',.......);
      form1.ADOQuery1.ExecSQL;
     except
      on e:exception do 
       begin
       showmessage('le nom est incorrect');
       break;
      end;
     on e:exception do 
      begin
       showmessage('la date est incorrect');
       break;
      end;
    end;
    dans ce cas le nom et la date sont incorrect,comment afficher ces exceptions un par un

    je vous remerci d'avance

  6. #6
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    21247692 merci d'utiliser les balises code. Ton code sera ainsi plus lisible et gardera son indentation.

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Pour le contrôle de tes valeurs, tu peux le faire en amont avant d'excuter ta requête.

    Pour contrôler la validité d'une date, tu peux utiliser TryStrToDate. (il existe d'autres fonctions de ce type TryStrToInt, TryStrToFloat, etc...). Voir l'aide de Delphi.

    Ensuite pour exécuter ta requête, il faut que tu transmette une instruction SQL valide à ton ADOQuery (via la commande SQL.Add dans l'exemple).
    La chaîne que tu donnes en exemple déclenchera naturellement une erreur.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    var
      ID: Integer;
      Nom: string;
      DateNais: TDateTime;
    begin
     
      ID := 10;   // A compléter
     
      if not TryStrToDate(EditDate.Text, DateNais) then
      begin
        ShowMessage('La date entrée est incorrecte !');
        Exit;
      end;
     
      Nom := EditNom.Text;
      if (Nom < 'djerdjar') or (Nom > 'laaribi') then
      begin
        ShowMessage('Nom incorrect !');
        Exit;
      end;
     
      with Form1.ADOQuery1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add('INSERT INTO MA_TABLE (ID, NOM, DATE_NAIS)');
        SQL.Add('VALUES( :ID, :NOM, :DATE_NAIS)');
        Parameters.ParamByName('ID').Value := ID;
        Parameters.ParamByName('NOM').Value := Nom;
        Parameters.ParamByName('DATE_NAIS').Value := DateNais;
        try
          ExecSQL;
        except
          ShowMessage('Echec lors de l''insertion des données !');
        end;
      end;
    end;

    @+ Claudius

  8. #8
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Points : 47
    Points
    47
    Par défaut
    bonjour

    chaque fois il affiche la meme erreur ('la date entrée est incorrect') meme si la date est correcte
    normalement si le nom est incorrecte il m'affiche ('le nom est ncorrect') et aprés si la date est incorrecte il m'affiche ('la date est incorrecte') ça veu dir un par un

    je vous remreci

  9. #9
    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
    Je ne suis pas sûr que les exceptions de Delphi puissent remonter aussi finement les info. ADO, ni que ADO fournisse ce niveau de précision.
    Donc pour ton cas 2 solutions :
    *Comme déja proposé (et c'est pas du luxe !) faire une validation avant ta requète.
    *Sur une erreur remonter le message de ADO style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        on E:Exception do
        begin
          showMessage(E.Message);
        end;
    Je te conseille d'ailleurs de faire les 2 !!

  10. #10
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Points : 47
    Points
    47
    Par défaut
    bonjour

    je veux afficher chaque erreur à son message qui correspondant c'est a dir
    quand il une exception sur le nom il faut etre afficher un message comme suit
    showmessage('le nom est incorrect')........ect

    je vous remerci

  11. #11
    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
    Je pense que tout le monde a compris ton problème. Comme déja indiqué le plus simple c'est de récupérer le E.Message et de regarder ce que tu peux en faire en fonction des erreurs rencontrées.

  12. #12
    Membre du Club
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Points : 47
    Points
    47
    Par défaut
    bonjour

    comment le faire pouriez vous m'ader SVP

  13. #13
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par 21247692
    comment le faire pouriez vous m'aider
    Que sont les réponses données ici, sinon de l'aide.
    Je suis tenté de dire que c'est à toi désormais de nous aider à t'aider en précisant ce que tu ne comprend pas.
    1. Quel SGBDR utilises-tu ?
    2. Quelle est le contenu de ta requête ?
    3. Quelles contraintes as-tu placé sur les colonnes/tables ?
    Si possible déporte le contrôle des régles de gestion au sein d'une procédure stockée.

    Recherche-tu une explication au fonctionnement des exceptions ou qu'on te propose une solution à ton problème d'implémentation ?

    Cordialement.

Discussions similaires

  1. Problème pour gérer des exceptions
    Par Jiyuu dans le forum GUI
    Réponses: 3
    Dernier message: 29/05/2008, 17h01
  2. Problème de gestion des exceptions
    Par trecks dans le forum C++
    Réponses: 4
    Dernier message: 01/11/2007, 12h47
  3. Réponses: 2
    Dernier message: 07/06/2007, 17h02
  4. Problème de gestion des exceptions
    Par Artasali dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/02/2007, 03h20
  5. Problème - Gestion des exceptions - MFC.
    Par Atomikx dans le forum MFC
    Réponses: 4
    Dernier message: 14/11/2005, 09h38

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