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 :

message d'erreur que je ne comprend pas


Sujet :

Bases de données Delphi

  1. #1
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut message d'erreur que je ne comprend pas
    bonjour à tous,
    voila j'ai une table (SQL Serveur) employe , je veux faire une insertion dans cette table j'ai le message suivant :

    Violation of primary key constraint 'PK_Employe' , cannot insert duplicate key in object 'employe'

    quelqu'un peut me dire ca que ca signifie
    merci beaucoup

  2. #2
    Membre régulier
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 101
    Points : 122
    Points
    122
    Par défaut
    tout simplement que tu essaies d'ajouter un enregistrement avec une valeur qui existe déja dans ta table.

    Vérifie la structure de ta table, et surtout sur quel champ se trouve l'index Primary Key (PK).
    Cela t'indiquera quel est le champ qui n'accepte qu'une seule fois la même valeur dans toute la table...

  3. #3
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut probléme avec la clé primaire et les relations
    bonjour à tous,
    voila j'ai 5tables la table employé dont la clé primaire est le matricule et 4autres tables qui sont ratachées (en relation) avec employé grace au matricule

    comme je ne métrise pas bien SQL Serveur j'ai un probléme au niveau de ce champ matricule si kelkun peut me montré au montrer au niveau du SQL Serveur comment dois je les déclarer!!!!
    merci infiniment

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;

    Pour un début c'est un vrai début.

    Première option : aide SQL Server --> index --> déclaration
    Seconde option : Google--> Tuto SQL Server déclaration champs

    Bon courage.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  5. #5
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut message d'erreur
    bonjour tout le monde,
    en faisant une insertion j'ai ce message d'erreur:

    table does not support this operation because it is not uniquely indexed

    qu'est cela veut dire?
    merci

  6. #6
    Membre habitué Avatar de host22
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2007
    Messages : 222
    Points : 183
    Points
    183
    Par défaut
    Citation Envoyé par lila23 Voir le message
    bonjour tout le monde,
    en faisant une insertion j'ai ce message d'erreur:

    table does not support this operation because it is not uniquely indexed

    qu'est cela veut dire?
    merci
    Normalement tout est dans le message d'erreur!!!
    il faut que tu ajoute une clé primaire ou un index unique pour ta table
    Un homme savant a compris un certain nombre de vérités, un homme cultivé a compris un certain nombre d'erreurs.

  7. #7
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    La clé primaire sert justement à identifier la ligne entière.
    Au niveau de ton table employé, tu as N° matricule comme clé primaire.
    Donc à chaque insertion, il faut vérifier si un enregistrement avec le n° matricule existe dans la base. Si un tel enregistrement existe, il faut plus insérer mais mettre à jour l'enregistrement.
    Voilà.
    On progresse .....

  8. #8
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;

    Pour cela tu as l'évènement BeforePost qui peut servir à gérer les doublons par exemple.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  9. #9
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut probléme de relation entre les tables
    bonjour a tous,
    (j'utilise SQL Serveur 2003)
    j'ai disons trois tables:employe,contrat,diplome
    la table employe a pour clé primaire matricule et les deux autres sont en relation avec la table employé grace au champ matricule donc g declaré dans ces deux tables un champ mat et créer une relation (dans la table employé) avec ces deux tables

    premier probléme quand je fais une insertion dans la table employé j'ai le message suivant:

    violation of primary key 'constraint pk_employe' , cannot insert duplicate key in object 'employe' mais l'insertion dans la table se fait quand meme

    deuxiéme probléme : quand je veux faire une insertion dans la table diplome par exemple l'insertion se fait oci mais en double

    je crois que je me trompe dans la création des relations!!!!

    merci bcp de votre aide

  10. #10
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    tu n'aurai pas un champs autoincrementer comme cle primaire pour ta table employer ?

    si c'est le cas dans le insert il n'est pas necessaire de lui indiquer la cle

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  11. #11
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut
    non je n'ai pas de champ autoincrémentable je tape tout les champs dans des dbedit pui je fai l'insertion comme ceci:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    query1.Active:=false;
    query1.SQL.Clear;
    query1.SQL.Add(' insert into employe (matricule,nom,prenom,date_ness,lieu_ness,num_tel_fixe,num_tel_portable,e_mail,sexe,sit_fam,nbr_enf,nationalite,num_sec_soc,date_recru,fonction,structure,departement,unite,etat)');
    query1.SQL.Add(' values('''+dbedit1.Text+''', '''+dbedit2.Text+''', '''+dbedit3.Text+''', '''+dbedit4.Text+''', '''+dbedit5.Text+''', '''+dbedit6.Text+''', '''+dbedit7.Text+''', ');
    query1.SQL.Add('  '''+dbedit8.Text+''', '''+dbcombobox1.Field.Value+''', '''+dbcombobox2.Field.Value+''', '''+dbedit9.Text+''', '''+dbedit10.Text+''', ');
    query1.SQL.Add('  '''+dbedit11.Text+''', '''+dbedit12.Text+''', '''+dbedit13.Text+''', '''+dbedit14.Text+''', '''+dbedit15.Text+''', '''+dbedit16.Text+''', '''+dbedit17.Text+''') ');
    query1.ExecSQL;
    employe.Refresh;

    merci

  12. #12
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par lila23 Voir le message
    non je n'ai pas de champ autoincrémentable je tape tout les champs dans des dbedit pui je fai l'insertion comme ceci:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    query1.Active:=false;
    query1.SQL.Clear;
    query1.SQL.Add(' insert into employe (matricule,nom,prenom,date_ness,lieu_ness,num_tel_fixe,num_tel_portable,e_mail,sexe,sit_fam,nbr_enf,nationalite,num_sec_soc,date_recru,fonction,structure,departement,unite,etat)');
    query1.SQL.Add(' values('''+dbedit1.Text+''', '''+dbedit2.Text+''', '''+dbedit3.Text+''', '''+dbedit4.Text+''', '''+dbedit5.Text+''', '''+dbedit6.Text+''', '''+dbedit7.Text+''', ');
    query1.SQL.Add('  '''+dbedit8.Text+''', '''+dbcombobox1.Field.Value+''', '''+dbcombobox2.Field.Value+''', '''+dbedit9.Text+''', '''+dbedit10.Text+''', ');
    query1.SQL.Add('  '''+dbedit11.Text+''', '''+dbedit12.Text+''', '''+dbedit13.Text+''', '''+dbedit14.Text+''', '''+dbedit15.Text+''', '''+dbedit16.Text+''', '''+dbedit17.Text+''') ');
    query1.ExecSQL;
    employe.Refresh;

    merci
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  13. #13
    Membre habitué Avatar de host22
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2007
    Messages : 222
    Points : 183
    Points
    183
    Par défaut
    Bonjour;
    je croit que ta mal conçue tes tables et te relations ou tes tedit ne sont pas dans l'ordre, donc ta des insertions fausses.
    bon courage!
    Un homme savant a compris un certain nombre de vérités, un homme cultivé a compris un certain nombre d'erreurs.

  14. #14
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    C'est normal à mon avis que tu as sans arrêt des erreurs de violation de clé primaire.
    Car non seulement tu utilise des contrôles orienté donnée (les dbEdit, dbCombo,etc) qui est à mon avis rattaché à un source de donnée, tu effectue une reinsertion manuel après via ta requête.
    Donc il faut que tu utilise l'un ou l'autre mais pas les 2 ensembles.
    C'est à dire :
    - soit utiliser un TQuery couplé avec un TDataSource et des contrôles DB
    - soit utiliser un TQuery et des contrôles standards et inserer manuelement les données.

    Allez courage.
    On progresse .....

  15. #15
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;

    mon message a été découpé

    voilà je crois que ton problème vient de l'utilisation des DBxxx, ces composants sont orientés données, autrement dit, si tu renseigne un composant orienté donnée, la valeur est, par défaut, postée. Pour comprendre se qui ce passe voilà le déroulement des opérations :

    1. composant DBxxx reçoit une valeur;
    2. l'évènement Post est déclenché;
    3. ta requête essai de passer un enregistrement déjà posté par le biais du Post implicite déclenché suite à l'utilisation des DBxxx ;
    4. un message d'erreur est déclenché.


    La solution consiste à utiliser des composant ordinaires tel que Edit à la place de DBEdit.

    Bonne chance.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  16. #16
    Membre habitué Avatar de host22
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Mars 2007
    Messages : 222
    Points : 183
    Points
    183
    Par défaut
    Citation Envoyé par Just-Soft Voir le message
    Salut;

    mon message a été découpé

    voilà je crois que ton problème vient de l'utilisation des DBxxx, ces composants sont orientés données, autrement dit, si tu renseigne un composant orienté donnée, la valeur est, par défaut, postée. Pour comprendre se qui ce passe voilà le déroulement des opérations :

    1. composant DBxxx reçoit une valeur;
    2. l'évènement Post est déclenché;
    3. ta requête essai de passer un enregistrement déjà posté par le biais du Post implicite déclenché suite à l'utilisation des DBxxx ;
    4. un message d'erreur est déclenché.

    logique;
    a mon avis tu peut poster directement tes dbedit (sans insertion)!!

    La solution consiste à utiliser des composant ordinaires tel que Edit à la place de DBEdit.

    Bonne chance.
    Un homme savant a compris un certain nombre de vérités, un homme cultivé a compris un certain nombre d'erreurs.

  17. #17
    Débutant Avatar de lila23
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Points : 54
    Points
    54
    Par défaut probléme résolé
    bonjour à tous,
    ce que vous m'avez dit est juste en utilisant les dbedits et en éxécutant ma requete je fesais l'insertion en double avec des edits ca marche

    encore merci

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

Discussions similaires

  1. [Débutant] Message d'erreur que je ne comprends pas
    Par Mlezen dans le forum MATLAB
    Réponses: 4
    Dernier message: 12/02/2009, 15h35
  2. Un message d'erreur que je ne comprends pas
    Par KOUTO dans le forum Bases de données
    Réponses: 7
    Dernier message: 22/01/2009, 17h25
  3. Message d'erreur que je ne comprends pas
    Par yvkoe dans le forum Langage
    Réponses: 4
    Dernier message: 24/11/2007, 10h27
  4. J'ai un message d'erreur que je ne comprend pas
    Par Jonathan Raucy dans le forum IHM
    Réponses: 2
    Dernier message: 24/09/2007, 17h14
  5. [Débutant] Message d'erreur que je ne comprends pas
    Par Le Furet dans le forum Langage
    Réponses: 2
    Dernier message: 25/02/2006, 17h37

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