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 :

Message "violation de clé"


Sujet :

Delphi

  1. #1
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut Message "violation de clé"
    Bonjour;
    JE voudrais au niveau de ma procédure d'ajout de nouvel enregistrement éviter le fameux: "Violation de clé" quand l'utilisateur procède à la saisie d'un N d'Appel d'offre déja existant!!
    J'utilise ce qui suit:
    Un TDBEdit pour la saisie du numero d'appel d'offres
    Et les 2 méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DAtaModule3.TabApp.Append;
    DAtaModule3.TabApp.Post;
    Pour ce qui est du cas d'une validation sans avoir préalablement saisi de num d'appel d'offres, j'ai procéder au traitement adéquat :
    if DBAppel.text<> '' then ...

    Merci de vos réponses...

  2. #2
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    tu peux catcher l'exception

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    try
     Post
    except
     on E: Exception do
     begin
       ...
     end;
    end;
    Akim Merabet

  3. #3
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut
    La gestion de cette exception est t-elle la meilleure manière de régler le problème?? puis je utiliser une autre manière de contourner le problème???
    D'autre part , au niveau de ce qui a été proposé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
     Post
    except
     on E: Exception do
     begin
       ...
     end;
    end;
    Le E: exception doit être certainement personnalisé en fonction de mon exception, non???
    Bref, une autre solution serait la bien venue

    MERCI

  4. #4
    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

    Tu peux également utiliser l'évènement OnPostError de TDataSet.

  5. #5
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut
    Avec cet évenemnt, c'est à dire le OnPost Error, puis intercepter l'erreur avant la tentative d'insertion??

  6. #6
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 101
    Points
    19 101
    Par défaut
    Non car c'est l'insertion qui provoque l'erreur.
    Delphi :
    La F.A.Q. , 877 réponses à vos questions !
    264 sources à consulter/télécharger !

  7. #7
    Membre éclairé Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Points : 736
    Points
    736
    Par défaut
    Le E: exception doit être certainement personnalisé en fonction de mon exception, non???
    je sais pas ce que tu attaque comme base.
    avec ADO par exemple, je crois que la violation de contrainte de clé correspond a un code erreur.

    La gestion de cette exception est t-elle la meilleure manière de régler le problème??
    le mieux c'est un id généré de facon automatique.
    Akim Merabet

  8. #8
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    La gestion de cette exception est t-elle la meilleure manière de régler le problème?? puis je utiliser une autre manière de contourner le problème???
    Je dirais qu'il y a deux approches possibles du problème (l'une n'interdisant pas l'autre l'ailleurs) :
    - Soit tu fais des contrôles en amont pour t'assurer que l'opération ne va pas provoquer une erreur. Donc avant une insertion, tu t'assures que la clé saisie ne correspond pas déjà à une clé existante.
    - Soit tu traites l'erreur au moment du Post. Dans ce cas, je crois que toutes les solutions ont déjà été données.

    Personnellement j'aurais tendance à dire qu'il faut faire les deux.
    - Eviter de provoquer des erreures inutiles en signalant les anomalies au plux tôt (si le numéro de l'appel d'offre existe déjà, c'est peut-être que l'appel d'offre a déjà été saisi par quelqu'un d'autre. Dans ce cas, il vaut mieux prévenir l'utilisateur avant qu'il n'ait saisie la totalité de l'appel).
    - Traiter l'erreur au moment de la validation parce que de toute façon quel que soient les contrôles en amonts, il y aura toujours des cas qui passeront à travers.

    Je connais aussi d'autres développeurs qui résolvent le problème en supprimant les contraintes de la base. Comme ça plus d'erreur lors des accès BDD. Mais bon, on ne peut pas vraiment appeler ça une solution.

  9. #9
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut
    Je dirais qu'il y a deux approches possibles du problème (l'une n'interdisant pas l'autre l'ailleurs) :
    - Soit tu fais des contrôles en amont pour t'assurer que l'opération ne va pas provoquer une erreur. Donc avant une insertion, tu t'assures que la clé saisie ne correspond pas déjà à une clé existante.
    Donc , a travers quel composant ou encore quel type de méthode puis je implémenter cette solution??? en fonction bien sur de ce que j'ai déja utilisé au niveau de mon application.. A savoir un DBEdit relié à un DataSet... (TAble Paradox)

    Merci beaucoup

  10. #10
    Membre régulier Avatar de souminet
    Inscrit en
    Novembre 2006
    Messages
    351
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 351
    Points : 111
    Points
    111
    Par défaut
    Bonjour;
    Voilà, je me suis documenté, et j'ai trouvé qu'une solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    key:= inputbox('Nouveau','ajouter une nouvelle visite','');
    if length(key)>0 then
    if not table1.Locate('n_visite',key,[]) then
    begin
    table1.Append;
    table1.FieldByName('n_visite').AsString:=key
    end
    else
    if MessageDlg(('une visite ayant ce numéro existe déja'),mtWarning, mbOKCancel,0)=mryes then
    table1.cancel
    Mais je voudrais l'adapter à mon interface, c'est à dire le composant que j'utilise pour la saisie du N° d'Appel d'offres (Un DBEDIT)
    Merci++++++

Discussions similaires

  1. Message Access violation at Address 004665B1
    Par Paounet dans le forum Composants VCL
    Réponses: 3
    Dernier message: 10/04/2008, 13h30
  2. Message : "Key violation"
    Par Interruption13h dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/02/2007, 02h06
  3. Message de violation d'accès dans la dcc50.dll
    Par cchatelain dans le forum EDI
    Réponses: 17
    Dernier message: 29/11/2005, 18h28

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