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

InterBase Discussion :

[IB6] Problème de clef étrangère


Sujet :

InterBase

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut [IB6] Problème de clef étrangère
    Bonjour à tous,

    j'ai un petit problème avec la création de ma base de donnée.
    J'ai besoin d'utiliser des FOREIGN KEY depuis différentes tables, mon script SQL à très bien fonctionné sous MySQL et après une brève adaptation la plupart des choses fonctionnent sous Interbase 6 Open SOurce.

    Voici le code qui me pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE "T_ConcertInterprete" (
    	"IdConcert"		INTEGER 			NOT NULL,
    	"IdInterprete"		INTEGER				NOT NULL,
     
    	CONSTRAINT		"PK_CI_Concert_Interprete"	PRIMARY KEY ("IdConcert", "IdInterprete"),
    	CONSTRAINT		"FK_CI_Concert"			FOREIGN KEY ("IdConcert") 	REFERENCES "T_Concerts"("IdConcert"),
    	CONSTRAINT		"FK_CI_Interprete"		FOREIGN KEY ("IdInterprete") 	REFERENCES "T_Interprete"("IdInterprete")
    );
    Sachant que les colonnes qui doivent servir de Foreign Key sont bien des primary key dans leurs tables.

    Si vous pouviez m'éclairer sur la syntaxe à utiliser pour qu'Interbase accepete cela....merci bcp !
    Neilos

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    Il faut travailler ainsi :
    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
    25
    26
    27
    28
    CREATE TABLE "CONTRAT_TRAVAIL"  (
    	"CODE_CONTRAT" CHAR(4) NOT NULL,
    	"LIBELLE_CONTRAT" CHAR(50) NOT NULL,
    	"DUREE_HEBDOMADAIRE" DECIMAL(4,2) NOT NULL,
    	"CODE_CP" CHAR(3) NOT NULL,
    	"NB_JOURS_CP" SMALLINT NOT NULL,
    	"ANCIENNETE_POSSIBLE" CHAR(1) DEFAULT 'O',
    	"CODE_CONGES_ANCIENNETE" CHAR(3),
    	"NB_JOURS_ANCIENNETE" SMALLINT,
    	"DELAI_ANCIENNETE" SMALLINT,
    	"AUTRES_CONGES_1" CHAR(1) NOT NULL,
    	"CODE_CONGES_1" CHAR(3),
    	"NB_JOURS_CONGES_1" SMALLINT DEFAULT 0 NOT NULL,
    	"AUTRES_CONGES_2" CHAR(1),
    	"CODE_CONGES_2" CHAR(3),
    	"NB_JOURS_CONGES_2" SMALLINT DEFAULT 0 NOT NULL,
    	"RTT_POSSIBLE" CHAR(1) DEFAULT 'O' NOT NULL,
    	"CODE_RTT" CHAR(3),
    	"NB_JOURS_RTT" SMALLINT DEFAULT 0 NOT NULL,
     PRIMARY KEY ("CODE_CONTRAT")
    );
     
     
    ALTER TABLE "CONTRAT_TRAVAIL" ADD FOREIGN KEY ("CODE_CP") REFERENCES "CODE_ABSENCE" ("ABS_CD") ON UPDATE NO ACTION ON DELETE NO ACTION;
    ALTER TABLE "CONTRAT_TRAVAIL" ADD FOREIGN KEY ("CODE_CONGES_ANCIENNETE") REFERENCES "CODE_ABSENCE" ("ABS_CD") ON UPDATE NO ACTION ON DELETE NO ACTION;
    ALTER TABLE "CONTRAT_TRAVAIL" ADD FOREIGN KEY ("CODE_CONGES_1") REFERENCES "CODE_ABSENCE" ("ABS_CD") ON UPDATE NO ACTION ON DELETE NO ACTION;
    ALTER TABLE "CONTRAT_TRAVAIL" ADD FOREIGN KEY ("CODE_RTT") REFERENCES "CODE_ABSENCE" ("ABS_CD") ON UPDATE NO ACTION ON DELETE NO ACTION;
    ALTER TABLE "CONTRAT_TRAVAIL" ADD FOREIGN KEY ("CODE_CONGES_2") REFERENCES "CODE_ABSENCE" ("ABS_CD") ON UPDATE NO ACTION ON DELETE NO ACTION;
    C'est à dire en 2 temps...

    On peut aussi utiliser cette syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE "CONTRAT_TRAVAIL" ADD CONSTRAINT "CODE_CP" FOREIGN KEY ("CODE_CP") REFERENCES "CODE_ABSENCE" ("CODE_ABSENCE") ON UPDATE NO ACTION ON DELETE NO ACTION;
    Si tu as plusieurs tables comme ça, et sous IB 6.0, il FAUT

    1/ Déclarer toutes les tables (create etc...)
    2/ faire les alter pour les FK

    et pas create... puis alter, create .... alter.


    Pourquoi n'utilises-tu pas Firebird ?
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Merci pour ta réponse...pourquoi je n'utilise pas firebird ?
    Je n'en sais trop rien...je ne me suis que trop perdu à chercher un bon remplacant au feu BDE sans vraiment trouver mon bonheur.

    J'ai essayer MySQL avec dbExpress mais pour développer un produit commercial il faut acheter un driver pour la version 4.

    Idem je crois que pour firebird je n'ai pas trouvé de pilote dbExpress que je puisse utiliser dans un produit destiné à être commercialisé.

    Si je me trompe merci de m'éclairer je me suis vraiment perdu....
    Neilos

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    Un driver pour Firebird......

    J'ai développé un soft "mixte" IB/FB, mais je crois que c'est avec ADO (avec une simple duplication/rename des éléments IB)...

    Sinon, il y a les composants ZEOS http://seegernet.koolhost.de/zeosforum/portal.php
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Ben oui un driver car je n'ai que les composants dbExpress et je ne trouve pas les IB dans Developer Studio 2006 Pro.

    Merci pour le lien je vais voir.
    Neilos

  6. #6
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    Citation Envoyé par qi130

    J'ai développé un soft "mixte" IB/FB, mais je crois que c'est avec ADO (avec une simple duplication/rename des éléments IB)...
    Autant pour moi, c'est bien avec du dbExpress que j'ai fait ce soft...
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    dbExpress...et donc tu utilise Firebird comme s'il s'agissait d'interbase ?
    Le pb c'est qu'ils disent sur le site de firebird qu'il ne sera plus compatible avec Interbase ou quelque chose comme cela.

    Enfin si ça marche je suis preneur. C'est vraiment un avantage de travailler avec Firebird plutôt qu'interbase ?
    Neilos

  8. #8
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    Jusqu'à FB 1.5, c'est compatible. aPrès bah à voir !

    Il y aura certainement une compatibilité ascendante, mais il est sûr que FB ne sera plus compatible avec IB7.


    Pour voir apparaitre FB dans la customisation de la connexion, j'ai enrichi dbxdrivers.ini (dans delphi7\Borland Shared\DBExpress):
    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
    [Firebird]
    GetDriverFunc=getSQLDriverINTERBASE
    LibraryName=dbexpint.dll
    VendorLib=fbclient.dll
    Database=database.gdb
    RoleName=RoleName
    User_Name=sysdba
    Password=masterkey
    ServerCharSet=
    SQLDialect=1
    BlobSize=-1
    CommitRetain=False
    WaitOnLocks=True
    ErrorResourceFile=
    LocaleCode=0000
    Interbase TransIsolation=ReadCommited
    Trim Char=False
    Ca ressemble beaucoup à la partie IB, sauf pour
    et c'est ok pour moi...
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Merci pour les informations, chez moi apparement cela ne fonctionne pas. Malgré avoir modifié les fichiers et lancé le serveur je n'ai pas Firebird dans la liste des connexion possible pour le TSQLConnection.

    Edit : c'est bon il fallait rajouter une ligne Firebird=1 au début du fichier. Merci !
    Neilos

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

Discussions similaires

  1. Problème de clef étrangère nullable
    Par teddyalbina dans le forum Entity Framework
    Réponses: 4
    Dernier message: 21/04/2010, 08h12
  2. Problème avec clefs étrangères
    Par tomy29 dans le forum Hibernate
    Réponses: 5
    Dernier message: 05/11/2008, 17h42
  3. Problème a la création d'une clef étrangère
    Par tomy29 dans le forum Administration
    Réponses: 3
    Dernier message: 19/07/2008, 11h07
  4. [Win'Design] Problème de clef étrangére
    Par Invité dans le forum Autres
    Réponses: 2
    Dernier message: 02/05/2008, 17h03
  5. [SQL SERVER 2000] Problème clef étrangére
    Par Tankian dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 11/05/2004, 10h44

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