MySQL et clé etrangère

Ralaiy Messages postés 7 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 14 mars 2008 - 13 mars 2008 à 13:45
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 - 14 mars 2008 à 11:02
J'ai trois tables : Personnel, Materiel, Maintenir que j'ai créé dans Easy-Php 1.8, voici un enregistrement du
Personnel :  Id_Personnel = 12345
                  Code_Personnel = 12345
                  Nom_Personnel = Abraham
Materiel : Id_Materiel = 54321
               Code_Materiel = 54321
               Nom_Materiel = UNITE CENTRALE
Maintenir : Id_Maintenir = à faire
                 Id_Personnel = à faire
                 Id_Materiel = à faire
J'utilise Delphi 7 et j'ai comme réponse : Impossible d'ajouter un enregistrement fils : une constrainte externe l'empèche. Car Id_Personnel et Id_Materiel proviennent des tables respectivement Personnel et Maintenir par le code de création suivante :

alter table MAINTENIR add constraint FK_MAINTENIR foreign key (ID_PERSONNEL)
references PERSONNEL (ID_PERSONNEL) on delete restrict on update restrict;

alter table MAINTENIR add constraint FK_MAINTENIR2 foreign key (ID_MATERIEL)
references MATERIEL (ID_MATERIEL) on delete restrict on update restrict;

Merci de votre aide

                  

3 réponses

Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
13 mars 2008 à 16:57
...et c'est quoi la requete exacte qui provoque l'erreur ?
0
Ralaiy Messages postés 7 Date d'inscription jeudi 8 novembre 2007 Statut Membre Dernière intervention 14 mars 2008
14 mars 2008 à 06:46
INSERT
INTO maintenir
  (ID_PERSONNEL, ID_MATERIEL, ID_MAINTENIR)
VALUES  ("12345", "54321", "6789")
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
14 mars 2008 à 11:02
!!!!!
tes champs "ID_XXX" sont de type chaine?!!!!
si ce n'est pas le cas, ta requete doit etre

INSERTINTO maintenir
  (ID_PERSONNEL, ID_MATERIEL, ID_MAINTENIR)
VALUES  (12345, 54321, 6789)

sinon, tu peux faire un insert de ce genre pour verifier que tes enregistrements existent bien dans les autres tables :

INSERTINTO maintenir
  (ID_PERSONNEL, ID_MATERIEL, ID_MAINTENIR)
SELECT  (p.id_personnel, m.id_materiel, 6789) from personnel p, materiel m where (p.id_personnel=12345) and (m.id_materiel=54321);
0
Rejoignez-nous