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 MySQL Discussion :

Impossible d'ajouter un enregistrement fils


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    ingé sys
    Inscrit en
    Avril 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingé sys

    Informations forums :
    Inscription : Avril 2004
    Messages : 156
    Points : 70
    Points
    70
    Par défaut Impossible d'ajouter un enregistrement fils
    Salut, jai une requete qui coince. Jai une table activité qui est divisée en 3 : atelier, sortie, stage. Jai donc 3 entités filles. C'est la table atelier qui me pose souci. L'atelier peut avoir lieu soit dans une salle, soit dans une école. Quand je veux ajouter une table à l'aide d'un formulaire, je demande donc ou il aura lieu. Ma requete fonctionne seulement quand les champs ecole et salle sont renseignés alors que je ne veux qu'il n'y en est qu' un.
    jai cette erreur la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur 1216 : Impossible d'ajouter un enregistrement fils : une constrainte externe l'empèche
    Jai 2 clés étrangères dans ma table, l'id de l'ecole et l'id de la salle.
    comment je peux résoudre ça svp ?

  2. #2
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Salut,

    Si tu nous donnais la structure de tes tables, ta version de MySQL et surtout la requête en question on y verrait plus clair
    Pensez au bouton

  3. #3
    Membre régulier
    Profil pro
    ingé sys
    Inscrit en
    Avril 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingé sys

    Informations forums :
    Inscription : Avril 2004
    Messages : 156
    Points : 70
    Points
    70
    Par défaut
    oki !

    voila la structure de la table activité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE ACTIVITE (
      idAct INT(3) NOT NULL AUTO_INCREMENT,
      PRIMARY KEY(idAct)
    )
    TYPE=InnoDB;
    ma table atelier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    CREATE TABLE ATELIER (
      ACTIVITE_idAct INT(3) NOT NULL,
      ECOLE_idEco INT(3) NULL,
      SALLE_idSalle INT(3) NULL,
      idAte INT(3) NOT NULL,
      intituleAte VARCHAR(35) NULL,
      jourAte VARCHAR(10) NULL,
      heuredebutAte TIME NULL,
      heurefinAte TIME NULL,
      datedebutAte DATE NULL,
      datefinAte DATE NULL,
      ageminAte INT(2) NULL,
      agemax INT(2) NULL,
      publicAte VARCHAR(25) NULL,
      categorieAte VARCHAR(25) NULL,
      tarifAte FLOAT NULL,
      contenuAte TEXT NULL,
      remarqueAte VARCHAR(100) NULL,
      lienbrochureAte VARCHAR(35) NULL,
      PRIMARY KEY(ACTIVITE_idAct)
    )
    TYPE=InnoDB;
    Je suis sous Easy Php 1.8 et aec le php info jai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Client API version  : 3.23.49
    enfin ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /****************TABLE ACTIVITE *****************************/
     
    $query="INSERT INTO activite (idAct) VALUES ('')";
    $send=mysql_query($query);
    $id=mysql_insert_id();//recherche de l'id de la derniere requete effectuée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $query3="INSERT into atelier( ACTIVITE_idAct,ECOLE_idEco, SALLE_idSalle,idAte,intituleAte,jourAte,heuredebutAte,heurefinAte,datedebutAte,
    								datefinAte,ageminAte,agemaxAte,publicAte,categorieAte,tarifAte,contenuAte,remarqueAte,lienbrochureAte)
    							VALUES ( '$id','$ecole','$salle','$code','$nom','$select','$heuredebut','$heurefin','$datedebut','$datefin','$agemin',
    							'$agemax','$public','$categorie','$tarif','$description','$remarque','$lienbrochure')";
    Jai realisé mon MCD/MLD avec dbdesigner qui ensuite synchronise les tables avec Mysql.
    merci de votre aide

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Tu as deux solutions:
    sol 1) tu autorises ces clefs étrangères à être NULL, et au niveau applicatif tu vérifies que l'une des deux soit NULL, mais pas l'autre

    sol 2) en Programmation Orientée Objet, tu aurais ceci:

    Une classe Lieu, qui est une classe abstraite. Deux sous-classes (concrètes): Salle et Ecole.

    Une Activité est forcément liée à un Lieu (cardinalité 1,1), que ce lieu soit une salle ou une école.

    Maintenant, pour traduire cela en SQL, on aura:

    - une table Lieu avec l'id de lieu et les données communes à toutes les "sous-classe" (Ecole, Salle)

    - un table par "sous-classe" (Ecole, Salle), dont l'identifiant est une clef étrangère (référençant l'identifiant de la table Lieu)

    Pour insérer une nouvelle école :
    1) on ajoute un enregistrement dans la table lieu
    2) on récupère l'id du lieu nouvellement créé (LAST_INSERT_ID)
    3) dans la table Ecole, on ajoute un enregistrement avec comme clef l'id de Lieu. Les autres champs sont propres à la table Ecole (ex: nom de l'école)

    Pour récupérer des infos sur le lieu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM lieu
    LEFT OUTER JOIN ecole USING id
    LEFT OUTER JOIN salle USING id
    Si les champ de "ecole" sont NULL, c'est que c'est une salle.
    Si les champ de "salle" sont NULL, c'est que c'est une école.
    Note: il est donc possible de faire de l'héritage multiple.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  5. #5
    Membre régulier
    Profil pro
    ingé sys
    Inscrit en
    Avril 2004
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : ingé sys

    Informations forums :
    Inscription : Avril 2004
    Messages : 156
    Points : 70
    Points
    70
    Par défaut
    je te remercie de ta réponse tres précise. Jvais prendre la solution 1 car je ne peux pas faire d'objet

    merci encore !

  6. #6
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Ce qui ne va pas dans ta requête (INSERT): si tu veux que l'une des deux clefs étrangères soit NULL, il faut que dans tes valeurs tu mettes NULL, et non une chaîne vide ou 'NULL'.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/07/2009, 14h19
  2. Impossible d'ajouter des enregistrements via une requête
    Par roman33 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 05/06/2009, 21h20
  3. Impossible d'ajouter des enregistrements
    Par bitou_77 dans le forum Access
    Réponses: 4
    Dernier message: 30/08/2006, 18h58
  4. Impossible d'ajouter des enregistrements
    Par bitou_77 dans le forum Access
    Réponses: 3
    Dernier message: 26/08/2006, 16h38
  5. Impossible d'ajouter un enregistrement fils
    Par SwiTz dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/03/2006, 14h22

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