Précédent   Forum des professionnels en informatique > Bases de données > Autres SGBD > InterBase
InterBase Forum d'entraide sur le SGBD InterBase de Codegear. Avant de poster -> F.A.Q Interbase, Tutoriels
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 23/03/2006, 19h34   #1
Membre émérite
 
Inscription : octobre 2003
Messages : 1 160
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : octobre 2003
Messages : 1 160
Points : 882
Points : 882
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 :
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
Neilos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2006, 20h48   #2
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Il faut travailler ainsi :
Code :
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 :
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
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2006, 22h43   #3
Membre émérite
 
Inscription : octobre 2003
Messages : 1 160
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : octobre 2003
Messages : 1 160
Points : 882
Points : 882
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
Neilos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2006, 09h33   #4
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
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
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2006, 14h51   #5
Membre émérite
 
Inscription : octobre 2003
Messages : 1 160
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : octobre 2003
Messages : 1 160
Points : 882
Points : 882
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
Neilos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2006, 22h00   #6
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
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
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2006, 22h05   #7
Membre émérite
 
Inscription : octobre 2003
Messages : 1 160
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : octobre 2003
Messages : 1 160
Points : 882
Points : 882
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
Neilos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2006, 08h59   #8
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
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 :
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
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2006, 19h40   #9
Membre émérite
 
Inscription : octobre 2003
Messages : 1 160
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : octobre 2003
Messages : 1 160
Points : 882
Points : 882
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
Neilos 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 22h39.


 
 
 
 
Partenaires

Hébergement Web