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

Requêtes et SQL. Discussion :

Violation Primary Key [AC-2002]


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 136
    Points : 169
    Points
    169
    Par défaut Violation Primary Key
    Bonjour à tous,

    Tout d'abord, mon problème ne concerne pas spécifiquement une requête Access, mais il y est (je pense) très fortement lié, donc je poste ici !

    Bon alors, voici mon problème !

    J'ai une appli Access en phase de conception. Les tables ont été créées sous Microsoft SQL Server 2008 (ainsi que les vues), les formulaires et le code ont ensuite été ajoutés sous Access (version 2002/XP).

    L'application compte 6 tables. Une requête assemble ces tables pour n'en former qu'une et, au final, un formulaire utilise tous les champs résultats.
    Pour le principe, voilà ce que ça donne avec un exemple simple :

    1)
    TB_PROJET avec "ID, Nom, Prénom, Age"
    TB_ADRESSE avec "ID, Numero_de_rue, Nom_de_rue"
    TB_PARENTS avec "ID, Nom_du_pere, Nom_de_la_mere"

    2) La "vue" créée sous SQL Server 2008 donne une unique table avec :
    "ID, Nom, Prenom, Age, Numero_de_rue, Nom_de_rue, Nom_du_pere, Nom_de_la_mere"

    3) Un formulaire avec plusieurs onglets pioche dans le résultat les champs :
    Onglet 1 intitulé "Identité" : Nom, Prenom, Age
    Onglet 2 intitulé "Adresse" : Numero_de_rue, Nom_de_rue
    Onglet 3 intitulé "Parents" : Nom_du_pere, Nom_de_la_mere

    Au pied du formulaire, on a accès au sélecteur pour choisir l'enregistrement voulu.
    Lorsqu'on choisit, par exemple, le 50ème enregistrement sur 150, tout se passe bien ; les données s'affiche dans les champs, il est possible de les modifier, etc.

    Toutefois, et c'est là mon problème (enfin ! me direz-vous ), lorsque je vais à l'enregistrement 151 sur 150 (formulaire vierge, donc, pour entrer un nouvel enregistrement), les champs vides s'affichent bien... mais je ne peux rien taper à l'intérieur... Aucun message d'erreur où que ce soit, mais impossible d'entrer la moindre donnée.
    Quand j'essaie de rentrer la valeur via la requête en elle même (double clic sur la requête et remplissage d'une ligne), le message obtenu est :

    "Violation de la clé primaire PRIMARY KEY "ID". Impossible d'insérer une clé en double dans l'objet 'TB_PROJET'."
    Voilà... Donc a priori, un problème de clé (ça, je l'ai compris). Mais mon ami Google ne m'a pas aidé bcp plus... Donc je viens vers vous !
    En tout cas, j'espère avoir été clair dans mes explications ^^ Si quelqu'un a une piste, je suis preneur. Je suis arrivé à la limite de mes compétences !
    Merci d'avance à vous ^^

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Beub',

    N'aurais-tu une table ou une vue qui s'appelle TB_PROJET ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 136
    Points : 169
    Points
    169
    Par défaut
    Bonjour Richard !

    Pour la table TB_PROJET, si, j'en ai une. Admettons que dans l'exemple que j'ai donné :

    Table 1 (avec id, nom, prénom, age) soit TB_PROJET
    Table 2 (avec id, numéro de rue et nom de rue) soit TB_ADRESSE
    Table 3 (avec id, nom du père et nom de la mère) soit TB_PARENTS

    J'édite tout de suite le premier message pour que ce soit plus clair.

  4. #4
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Quelle est la primary key déclarée de ta table TB_PROJET ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 136
    Points : 169
    Points
    169
    Par défaut
    Toutes les tables ont pour primary key le champ "ID" (typé integer).

  6. #6
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    En numéro auto ?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 136
    Points : 169
    Points
    169
    Par défaut
    Justement, non.
    Je dois être handicapé, mais ça fait 45min que je cherche à faire passer en NuméroAuto ces champs, sans succès. Grosso modo, du haut de mes 3-4 heures d'utilisation de SQL Server 2008, je suis incapable de m'en servir convenablement.

  8. #8
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Il y a donc deux problèmes :
    • violation de clé dans TB_PROJET ;
    • passage de ID en numéro auto.


    Il est très facile, dans SQL Server, de déclarer un champ en numéro auto.

    Mais, intéressons-nous au premier problème :
    Dans Access, si tu remplies tes tables (via l'onglet Table) et que tu simules la création de ce fameux 151ème enregistrement dans les trois tables, avec les mêmes données, que se passe-t-il ?

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 136
    Points : 169
    Points
    169
    Par défaut
    Désolé, repas de 13 à 14h, et le temps de faire tout ça, j'ai eu un petit temps de réponse... Bref, jsuis de nouveau opérationnel.

    J'ai réussi (youhou) à faire passer l'ID en numéroAuto, donc ça, c'est fait ! (impressionnant...)

    Et j'ai rempli comme tu me l'as demandé les tables pour créer un enregistrement via l'onglet "Tables" du menu Access. L'enregistrement se crée parfaitement, aucun message d'erreur. Une fois que tout est bien saisi, j'ouvre le formulaire ; le 151ème enregistrement s'affiche et peut être modifié. Je passe au 152ème, le formulaire vierge s'affiche... Mais impossible de remplir les champs.

    Quand j'ouvre la requête via l'onglet Requetes du menu Access et que j'essaie d'ajouter un nouvel enregistrement, le panneau d'erreur a changé ! Maintenant, j'ai droit à :

    Impossible d'insérer une valeur explicite dans la colonne identité de la table "TB_PROJET" quand IDENTITY_INSERT est défini à OFF.
    La colonne identité de TB_PROJETS, c'est "ID" je suppose.
    Je sais pas si c'est mieux mais ça change en tout cas.

  10. #10
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Eh bien SQL Server t'informe, via Access, qu'il est impossible d'entrer, manuellement, une valeur dans un champ "numéro auto".

    Il faudrait, dans Access, supprimer tes tables liées et re-créer la laison : cela derait rouler.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 136
    Points : 169
    Points
    169
    Par défaut
    Supprimer mes tables liées et recréer la liaison ? Euh... tu m'expliques ça ?

  12. #12
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    D'après ce que j'ai compris, tes tables sont, physiquement, sur SQL Server, non ?

    Si tu y accèdes dans Access, c'est donc que ces tables y figurent (dans Access) en tant que tables liées (icône Globe avec une flèche), et non pas comme des tables créées dans Access.

    En supprimant la table (Globe), tu ne supprimes QUE la liaison, pas la table en elle-même. Ensuite, tu recrées la liaison comme tu as dû le faire au début (la liaison ne se crée pas toute seule !).

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Février 2010
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 136
    Points : 169
    Points
    169
    Par défaut
    Désolé pour le déterrage de topic, j'ai complètement oublié de repasser par ici.

    L'appli tourne parfaitement, tout est impeccable ! Merci Richard ^^
    Sujet résolu !

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

Discussions similaires

  1. Violation Primary Key incohérente
    Par TomDuBouchon dans le forum Développement
    Réponses: 7
    Dernier message: 16/10/2012, 10h58
  2. Violation of Primary Key sans données
    Par Baquardie dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 26/01/2010, 19h41
  3. Violation of PRIMARY KEY constraint
    Par DEV-10 dans le forum Développement
    Réponses: 6
    Dernier message: 30/11/2009, 15h01
  4. [AJAX] Violation Primary Keys
    Par ririch dans le forum AJAX
    Réponses: 27
    Dernier message: 18/05/2009, 09h21
  5. Violation de la contrainte PRIMARY KEY
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 14/12/2007, 10h43

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