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 :

Gestion des exceptions


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2002
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 643
    Par défaut Gestion des exceptions
    Bonjours
    j'ai un petit problème à gérer des exceptions dans mon petit programme.
    je doit saisir des données dans une table.
    les exception que je veut gérer sont les erreurs de saisie (champs vide "non saisie") et les erreur de la base de donnée (classe EDBEngineError).

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 658
    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 658
    Billets dans le blog
    65
    Par défaut
    slt,
    Citation Envoyé par k_boy Voir le message
    les exceptions que je veux gérer sont les erreurs de saisie (champs vide "non saisie")
    à gérer soit dans l'évenement onValidate du champ, soit dans le BeforePost de la table

    Citation Envoyé par k_boy Voir le message
    les erreurs de la base de données (classe EDBEngineError).
    un petit exemple (sans prétention)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try
     table1.post
    except
      on e:Exception do     // toutes exceptions
        begin
          MessageDlg ('Erreur'+#10#13+E.message,mterror,[mb0k],0);
          Table1.Abort; // ou Cancel cela dépend de ce que tu veux faire
        end;
    end;

  3. #3
    Membre très actif Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Par défaut violation de clé
    slt
    j'ai le méme pobléme que "k_boy ".
    moi je veut faire une saisi ,et si il y'a violation de clé je met un message
    (vous devez changer de numéro "par exaple")
    un ami ma envoyé un bloc d'intruction avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    'try........'
       ..
       ..
       ..
    except
    mais je l'ai perdu
    merci si vous pouvez m'aidé

  4. #4
    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
    Citation Envoyé par k_boy Voir le message
    Bonjours
    j'ai un petit problème à gérer des exceptions dans mon petit programme.
    je doit saisir des données dans une table.
    les exception que je veut gérer sont les erreurs de saisie (champs vide "non saisie") et les erreur de la base de donnée (classe EDBEngineError).
    Les champs persistants (TField) des tables on plusieurs propriétés qui permetent de le controler finement.
    La première est "Required" de type "Boolean"
    Indique si une saisie est obligatoire ou non dans un champ.
    La deuxième "DefaultExpression" est explicite :
    Spécifie une expression SQL affectée au champ quand l'utilisateur ne fournit pas de valeur.
    La troisième est "CustomConstraint" qui permet d'imposer une contrainte aux données insérées.
    Affectez CustomConstraint pour limiter les valeurs pouvant être saisies par l'utilisateur dans un champ. CustomConstraint doit être une expression de recherche SQL correcte comme :
    x >0 and x <100
    N'importe quel nom qui n'est pas un mot réservé SQL peut être utilisé pour désigner la valeur du champ, il suffit qu'il soit utilisé de manière homogène dans toute l'expression de contrainte.
    La quatrième est liée a la précédente puisque "ConstraintErrorMessage"
    Contient un message d'erreur personnalisé qui est affiché quand l'utilisateur tente de définir une valeur ne respectant pas les contraintes de données du champ.
    Pour les erreurs de base de données, le mieux est d'utiliser l'evenement "OnPostError" de chaque table pour donner une réponse adéquate aux erreurs de celle-ci, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TablePostError(DataSet:TDataSet; E:EDatabaseError; var Action: TDataAction);
    begin
     if (E is EDBEngineError) then
     begin
      case (E as EDBEngineError).Errors[0].ErrorCode of
       9729 : //code d'erreur : Violation de Clé //
       .../...
      end;
      Abort;
     end;
    end;
    Les codes d'erreurs BDE, tu peux les retrouver ICI.

  5. #5
    Membre très actif Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Par défaut affecté la veleur 3 a toute le champ 'num' de ma table 'table1'
    salut
    vous avez l'air de bien vous y connaitre on Base de donné
    moi j'ai un problém tout simple et je pence que vous pouré m'aidé
    je veux affecté la veleur 3 a toute le champ 'num' de ma table 'table1'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.Button1Click(Sender: TObject);
    var k:integer;
    begin
    for k:=0 to 1000 do
    table1.Append;
    table1[k].num:=3;
    table1.post;
    table1.Next;
    end;
    j'ai le code d'erreur suivant

    type incompatibles:'string' et 'integer'
    alor que le champ num est un champs alphanumérique

    et esque vous pouvé m'aixpliqué a quoi cela sére
    .append;
    .post;
    .open;
    .colse;
    j'avou que je vois pas bcp la différance et l'aide delphi n'ai pas trés explicite
    merci bcp

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    Salut,

    ... et avec table1[k].num:='3'; ... c'est à dire table1[k].num:=intToStr(3); ça ne marche pas ???

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  7. #7
    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
    table1[k].num ??? c'est quoi cette syntaxe, je connais pas et ca marche pas.
    C'est mieux comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Table1.FIRST;
    while not Table1.EOF do
    begin
     Table1.EDIT;
     Table1.FindField('NUM').AsString := '3';
     Table1.POST;
     Table1.NEXT;
    end;

  8. #8
    Membre très actif Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Par défaut
    merci
    Table1.FIRST;
    while not Table1.EOF do
    begin
    Table1.EDIT;
    Table1.FindField('NUM').AsString := '3';
    Table1.POST;
    Table1.NEXT;
    end;
    cela marche trés bien;
    mais comment faire pour ciblé un enregistrement ??
    si je veux par example changé que le num de l'enregistrement 4 ??

    merci bcp

  9. #9
    Membre très actif Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Par défaut
    Mr TryExceptEnd j'ai un autre poblém pour fair l"appel d'une fonction qui utilise une table
    voici ma fonction :
    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
    function detectligne(xs,ys : integer;table1:Ttable) : Extended;
    var      a, b, miEp, lg : Extended; dx,dy,yc : integer; okx,oky : boolean;
      begin
             Result:=-1;
             miEp:=f1.tligne['Ep']/2;
            dx:=f1.tligne['Xe'] -f1.tligne['X0'] ;
               dy:=f1.tligne['Ye'] -f1.tligne['Y0'];
    
              okx:=False; oky:=False;
              if ((dy<0) and (ys<=f1.tligne['Y0']) and (ys>=f1.tligne['Ye']))or ((dy>0) and (ys<=f1.tligne['Ye']) and (ys>=f1.tligne['Y0'])) then oky:=True;
             if ((dx>0) and (xs<=f1.tligne['Xe']) and (xs>=f1.tligne['X0']))or ((dx<0) and (xs<=f1.tligne['X0']) and (xs>=f1.tligne['Xe'])) then okx:=True;
    
    
              if (dx=0) and (dy=0) then begin if (xs - miEp <=f1.tligne['X0']) and (f1.tligne['X0']<= xs + miEp)and (ys - miEp <=f1.tligne['Y0']) and (f1.tligne['Y0'] <= ys + miEp)then Result:=-maxInt; EXIT;end;
    
               if (dx=0) then
                   begin if (xs - miEp <=f1.tligne['X0']) and (f1.tligne['X0'] <= xs + miEp)and oky then Result:=(ys - f1.tligne['Y0'])/dy;EXIT;end
                     else
                        if (dy=0) then
                         begin if (ys - miEp <=f1.tligne['Y0']) and (f1.tligne['Y0'] <= ys + miEp)and okx then Result:=(xs - f1.tligne['X0'])/dx;EXIT;end
                          else
                              begin
                                a:=dy/dx;
                                b:=f1.tligne['Y0'] - a*f1.tligne['X0'];
                                 yc:=round(a*xs + b);
                                lg:=sqrt(dx*dx + dy*dy);
                                miEp:=abs(miEp*lg/dx);
                               if (yc + miEp >= ys) and (yc - miEp <= ys) and okx and oky then  Result:=(xs - f1.tligne['X0'])/dx;
                    end;
             end;
    et pour l'appel j'ai fait :
    detcligen :=detectligne(x,y,table1);
    j'aubtien le code de erreur suivant :
    une classe d'exception EvariantError avec le message 'conversion de type variant incorrecte'processus stoppé
    je crois que c'est un probléme de syntaxe aussi
    car la fonction n'a rien a ce repproché
    si vous pouvé me dire comment fair l'appel cela seré cool
    merci bcp

Discussions similaires

  1. [ADOConnect] gestion des exception en tout temps
    Par portu dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/04/2005, 19h01
  2. [ORACLE 9i] Gestion des exceptions
    Par sygale dans le forum SQL
    Réponses: 6
    Dernier message: 19/08/2004, 15h06
  3. Gestion des exception (EOleException)
    Par shurized dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/06/2004, 17h25
  4. [XMLRAD] gestion des exceptions
    Par pram dans le forum XMLRAD
    Réponses: 2
    Dernier message: 28/01/2003, 17h48
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

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