Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/12/2010, 11h43   #1
Membre régulier
 
Inscription : février 2010
Messages : 100
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 100
Points : 92
Points : 92
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 :

Citation:
"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 ^^
Beub' est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 12h19   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Beub',

N'aurais-tu une table ou une vue qui s'appelle TB_PROJET ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 12h35   #3
Membre régulier
 
Inscription : février 2010
Messages : 100
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 100
Points : 92
Points : 92
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.
Beub' est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 12h37   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Quelle est la primary key déclarée de ta table TB_PROJET ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 12h41   #5
Membre régulier
 
Inscription : février 2010
Messages : 100
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 100
Points : 92
Points : 92
Toutes les tables ont pour primary key le champ "ID" (typé integer).
Beub' est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 12h44   #6
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
En numéro auto ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 12h48   #7
Membre régulier
 
Inscription : février 2010
Messages : 100
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 100
Points : 92
Points : 92
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.
Beub' est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 13h00   #8
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
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 ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 14h43   #9
Membre régulier
 
Inscription : février 2010
Messages : 100
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 100
Points : 92
Points : 92
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 à :

Citation:
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.
Beub' est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 14h50   #10
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
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.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 15h05   #11
Membre régulier
 
Inscription : février 2010
Messages : 100
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 100
Points : 92
Points : 92
Supprimer mes tables liées et recréer la liaison ? Euh... tu m'expliques ça ?
Beub' est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 15h14   #12
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
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 !).
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 11h04   #13
Membre régulier
 
Inscription : février 2010
Messages : 100
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 100
Points : 92
Points : 92
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 !
Beub' est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h16.


 
 
 
 
Partenaires

Hébergement Web