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

Langage SQL Discussion :

[FB 1.5] insert avec FK


Sujet :

Langage SQL

  1. #1
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 941
    Points : 1 950
    Points
    1 950
    Par défaut [FB 1.5] insert avec FK
    Bonjour,

    j'ai deux tables :
    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
    23
    24
     
    la première :
    CREATE TABLE ENTFACT (
        ID                     BIGINT NOT NULL,
        EF_NUMPOSTE            VARCHAR(3),
        EF_DATEFACTURE         DATE,
        EF_HEUREFACTURE        TIME,
        EF_ETAT                CHAR(1),
        EF_CODECLIENT          VARCHAR(15),
    );
     
    ALTER TABLE ENTFACT ADD PRIMARY KEY (ID);
     
    et la seconde :
    CREATE TABLE LIGFACT (
        ID                    BIGINT NOT NULL,
        LF_NUMLIGNE           INTEGER NOT NULL,
        LF_TYPELIGNE          SMALLINT,
        LF_CODECONSO          VARCHAR(15),
        LF_LIBELLECONSO       VARCHAR(80),
        LF_QUANTITE           INTEGER,
        ...
    );
    ALTER TABLE LIGFACT ADD CONSTRAINT PK_LIGFACT PRIMARY KEY (ID, LF_NUMLIGNE);
    J'ai crée une FK comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    alter table LIGFACT
    add constraint FK_LIGFACT_1
    foreign key (ID)
    references ENTFACT (ID)
    on delete CASCADE
    on update CASCADE
    Sur la première table, la valeur de la clé (ID) s'incrémente automatiquement à l'aide d'un générateur et d'un trigger à chaque insert.

    Mon problème est le suivant :
    Je fais un insert d'une facture en mettant à jour les deux tables dans une meme transaction, lorsque je commit, j'ai le message suivant :
    Violation of Foreign Key constraint "FK_LIGFACT_1" on table "LIGFACT"

    Comment fait on pour faire un insert dans ce cas là ?
    Merci

  2. #2
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 941
    Points : 1 950
    Points
    1 950
    Par défaut
    Pour faire + simple :
    Dans une meme transaction, comment faire un insert sur deux tables T1 et T2, sachant que la clé de T1 est auto incrémenté et que sur T2, il y a une FK qui pointe sur la clé de T1 ?
    Merci d'avance

  3. #3
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut Re: [FB 1.5] insert avec FK
    Citation Envoyé par free07
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    alter table LIGFACT
    add constraint FK_LIGFACT_1
    foreign key (ID)
    references ENTFACT (ID)
    on delete CASCADE
    on update CASCADE
    Ce pourait-il qu'il manque on insert CASCADE ?

  4. #4
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Quel SGBD ?
    Si tu peux utiliser une sequence alors fais comme cela c'est plus simple.
    C'est à dire que tu recupere la prochaine valeur de la sequence et tu l'utilise les deux fois
    Pour oracle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    SELECT mysql.nextval INTO :O_seq FROM DUAL;
    INSERT INTO TOTO_MASTER VALUES(:O_seq,...);
    INSERT INTO TOTO_DETAIL VALUES(:O_seq,...);

  5. #5
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 941
    Points : 1 950
    Points
    1 950
    Par défaut
    C'est ce que je fais mais il m'affiche l'erreur suivante :
    Violation of Foreign Key constraint "FK_LIGFACT_1" on table "LIGFACT"

    le SGBD est Firebird 1.5 ( indiqué ds le sujet )

    Je ne sais pas comment faire, merci de m'aider !

  6. #6
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    Ce pourait-il que ta clé dans LIGFACT ne soit pas assignée lors du insert?

  7. #7
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 941
    Points : 1 950
    Points
    1 950
    Par défaut
    Si si, elle est bien assigné, d'ailleurs j'ai fait l'essai dans les deux cas, et le cas ou elle n'etait pas assigné, il me l'a signalé par une erreur ( différente de celle que j'ai )

  8. #8
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    Citation Envoyé par free07
    Violation of Foreign Key constraint "FK_LIGFACT_1" on table "LIGFACT"
    Est-ce que t'as fait une recherche du message dans l'aide de Firebird 1.5?

    J'avais eu le même problème en DB2 AS/400 et j'avais résolu avec l'aide.

  9. #9
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 941
    Points : 1 950
    Points
    1 950
    Par défaut
    Je n'ai malheuresement pas d'aide au niveau de Firebird, tu a eu le meme problème ? Comment l'a tu résolu ?
    Merci pour ton aide
    Thierry

  10. #10
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    J'ai fait des recherches ce matin (car chez moi il est 8h00am) et voici les 2 possibilités que j'avais eu comme problèmes.

    Ça fait presque 1 ans que j'ai eu ces problèmes. donc je suis pas certain.
    1- Specify a table in the FOREIGN KEY clause that has a PRIMARY or UNIQUE key that matches the referencing column list.

    2- Change the referencing column list to match the definition of the PRIMARY or UNIQUE key defined on the parent table.
    Probablement que dans ton cas le problème pourrait être plutôt au niveau du 2e message.
    Au niveau de la table primaire, il faut identifier la clé primaire ou/et unique.

    regarde ça et donne m'en des nouvelles!

  11. #11
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 941
    Points : 1 950
    Points
    1 950
    Par défaut
    Désolé mais je ne comprends pas du tout ton message...
    Ma clé est bien identifié est unique

  12. #12
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    Si je prend tes déclarations de table, dans mon cas j'ai été obligé d'ajouter la dernière ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE ENTFACT ( 
        ID                     BIGINT NOT NULL, 
        EF_NUMPOSTE            VARCHAR(3), 
        EF_DATEFACTURE         DATE, 
        EF_HEUREFACTURE        TIME, 
        EF_ETAT                CHAR(1), 
        EF_CODECLIENT          VARCHAR(15), 
        CONSTRAINT ENTFACT_PK  PRIMARY KEY (ID)
    et j'ai pas cette déclaration dans la deuxième table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE LIGFACT ADD CONSTRAINT PK_LIGFACT PRIMARY KEY (ID, LF_NUMLIGNE);
    Probablement que tu as mis cette contrainte parce que une autre table est référencé à cette table?!?

  13. #13
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 941
    Points : 1 950
    Points
    1 950
    Par défaut
    Ok je comprends mieux maintenant

    en fait ton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTRAINT ENTFACT_PK  PRIMARY KEY (ID)
    équivaut à mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE ENTFACT ADD PRIMARY KEY (ID);
    Et pour ce qui concerne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE LIGFACT ADD CONSTRAINT PK_LIGFACT PRIMARY KEY (ID, LF_NUMLIGNE);
    C'est simplement que pour la seconde table, je déclare la clé ( unique ) composé des deux colonnes ID et LF_NUMLIGNE
    ID représente le numéro de facture et LF_NUMLIGNE représente le numéro de ligne
    Merci de passer du temps à mon problème ! C sympa

  14. #14
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    C'est le CONSTAINT dans ta déclaration que je me demande si il doit être là.

    Ça me fait plaisir et ça me fait les dents en essayant d'aider le monde.

  15. #15
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 941
    Points : 1 950
    Points
    1 950
    Par défaut
    Ca y est j'ai trouvé, en fait il y avait une autre FK sur ma première table ( ENTFACT ) et c'est elle qui me gênait, je viens juste de m'en apercevoir !!!

    Merci tout de meme pour ton aide !

  16. #16
    Membre habitué Avatar de souellet
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    155
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2003
    Messages : 155
    Points : 171
    Points
    171
    Par défaut
    Fait plaisir!

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

Discussions similaires

  1. [INSERT][SELECT] insert avec un select imbriqué
    Par narmataru dans le forum SQL
    Réponses: 11
    Dernier message: 06/03/2013, 03h04
  2. [Procédure stockée]Insert avec renvoi clé primaire?
    Par busmik dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 26/08/2004, 16h14
  3. effectuer une requete insert avec 'values' ET 'select'
    Par delaio dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/08/2004, 19h05
  4. INSERT avec procédure stockée / Clef de type AutoInc
    Par bgdelphi dans le forum Bases de données
    Réponses: 5
    Dernier message: 18/10/2003, 18h30
  5. Problème d'insertion avec MySQL
    Par Sonny dans le forum ASP
    Réponses: 13
    Dernier message: 28/08/2003, 13h52

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