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 :

Eviter les doublon dans une table en mode edit


Sujet :

Bases de données Delphi

  1. #1
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut Eviter les doublon dans une table en mode edit
    Salem
    j'ai une table en mode edition (pour modifier les enregistrement )
    mais l'orsque j'écrit un enregistrement qui existe déja j'ai le message de violation de clé !!
    ou doi-je l’intercepte et comment
    cela fait un long moment que je cherche ,mais sans réponse
    voici le code que j'utilise :
    merci bcp

  2. #2
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    Essaies de faire juste ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try
      table1.Post;
    except
       table1.cancel; 
       ShowMessage('Code existe déjà !');
    end;

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    encore un
    il serait temps de comprendre comment on gère les exceptions

    la réponse était déjà dans le post cité
    exemple sans prétention

    je rappelle également que pour certains composants base de données il existe des évènements comme : onPostError si justement indiqué par @tryexceptend (et toujours dans le même post)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut
    j'ai utiliser le code ,comme indiquer dans le poste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Table1PostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    begin
     if (E is EDBEngineError) then
         begin
          case (E as EDBEngineError).Errors[0].ErrorCode of
          9729 :  begin   MessageDlg('ERREUR', mtInformation,[mbOk], 0);TABLE1.Cancel;;end;
          end;
      Abort;
      end;
    end;
    mais j'obtiens le message d'erreur
    puis j'ai mon message
    qu-es-qui va pas dans ce code
    merci bcp

  5. #5
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    Il faut affecter à Action une des valeurs de TDataAction (voir le help de delphi)

    essaies ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    procedure TForm1.Table1PostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    begin
       MessageDlg(e.Message, mtInformation,[mbOk], 0);
       Action := daAbort;
    end;

  6. #6
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut
    mais j'ai tjr mon message d'erreur !!
    merci bcp

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    le OnPostError est bien affecté au DataSet concerné ?
    Tu as bien un Message Informatif (code de akli_agha) puis un Message d'Erreur
    Peut-être même une Notification d'Exception en plus, ce qui ferait 3 Messages !

    Le Cancel est-il utile en cas d'Echec du Post ?
    Faudrait vérifier le State est toujours en dsEdit\dsInsert
    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

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut
    le OnPostError est bien affecté au DataSet concerné ?
    j'ai pas bien compri cela veut dire quoi ?
    j'ai une seul table avec un seul data source
    Tu as bien un Message Informatif (code de akli_agha) puis un Message d'Erreur
    j'ai un message d'erreur puis le message indicatif
    Faudrait vérifier le State est toujours en dsEdit\dsInsert
    ca je connais pas du tout

    SVP vous pouvez pas m'aidé
    merci bcp

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    faudrait peut être que l'exécution du projet ne soit pas en mode déboguage
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  10. #10
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    faudrait peut être que l'exécution du projet ne soit pas en mode déboguage
    que veut dire cela !!
    et comment le faire !!
    merci bcp

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    cela veut simplement dire que quand on obtient pour un même séquence :

    try
    Table.Post
    except
    on E:EException do
    begin
    Showmessage('Erreur');
    ...
    end;
    Abort;
    end;
    deux messages , le premier étant égal a E.message et le second 'Erreur' il y a de forte chance que le lancement de l'éxécution du programme ait été fait via L'IDE (en mode débug) et que l'option (je ne sais plus laquelle) d'affichage d'erreur soit coché .
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  12. #12
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut
    l'obtion c 'Arrêter sur exceptions Delphi'
    j'ai chercher dans :Projet/option/compilateur et j'ai pas trouvé
    j'ai delphi 5 ,vous coyé que elle n’existe pas !!
    merci bcp

  13. #13
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    C'est dans Outils|Options du débogeur, onglet Exceptions du langage

  14. #14
    Membre habitué Avatar de stfanny31
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 254
    Points : 163
    Points
    163
    Par défaut
    donc c'est ca
    dans notre table1 mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TForm1.Table1PostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    begin
     if (E is EDBEngineError) then
         begin
          case (E as EDBEngineError).Errors[0].ErrorCode of
          9729 :  begin   MessageDlg('ERREUR', mtInformation,[mbOk], 0);TABLE1.Cancel;;end;
          end;
      Abort;
      end;
    end;
    et désactiver
    'Arrêter sur exceptions Delphi'
    dans Outils|Options du débogeur, onglet Exceptions du langage
    merci a vous tous
    merci bcp

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

Discussions similaires

  1. supprimer les doublons dans une table
    Par mavean dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/06/2019, 13h26
  2. Eviter les doublons dans une requête.
    Par Smint dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 22/03/2017, 16h17
  3. Réponses: 0
    Dernier message: 09/02/2011, 09h13
  4. Eviter les doublons dans une tables ..
    Par zouzou_18 dans le forum VB.NET
    Réponses: 10
    Dernier message: 18/09/2009, 09h13
  5. Eviter les doublons dans une requete ?
    Par DrySs dans le forum Requêtes
    Réponses: 1
    Dernier message: 30/03/2006, 05h24

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