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 04/04/2005, 23h29   #1
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
Par défaut [IB6] Alter table => altermoiement !

Je galère depuis 1 heure sur ce pb....

J'ai ce script
Code :
1
2
3
4
ALTER TABLE POINTAGE
ADD constraint FK_POINTAGE_1
FOREIGN KEY (ATE_REF)
REFERENCES ATELIER(ATE_REF)
(of course, la table ATELIER existe avec en PK ATE_REF varchar(10) )
que j'applique sur
Code :
1
2
3
4
5
6
7
8
9
CREATE TABLE POINTAGE (
    PT_DATE       DATE NOT NULL,
    PT_OUV_NUMSS   CHAR(13) NOT NULL ,
    ATE_REF       VARCHAR(10) NOT NULL,
    PT_HH_DEB     CHAR(8),
    PT_HH_FIN     CHAR(8),
    PT_PAUSE      CHAR(8),
    PT_NB_HEURES  CHAR(5)
);
et j'obtiens:
Citation:
---------- ERROR MESSAGE ----------

This operation is not defined for system tables.
unsuccessful metadata update.
STORE RDB$REF_CONSTRAINTS failed.
action cancelled by trigger (1) to preserve data integrity.
Name of Referential Constraint not defined in constraints table.
et bien sûr que Name of Referential Constraint not defined in constraints table puisque j'essaie de l'ajouter....

Bref, cette mécanique marche (et a marché) pour d'autres tables, et puis d'un coup, pof rideau, y a plus rien à en tirer d'IB

Qui saurait d'où provient ce problème ? (et accessoirement comment le résoudre...)

Par avance, merci.
__________________
"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 05/04/2005, 01h59   #2
Membre régulier
 
Inscription : décembre 2004
Messages : 142
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 142
Points : 76
Points : 76
Salut,

ca ne va pas t'aider, mais j'ai refait tes scripts (sous IB 6)...
Et, bien sûr, ça passe sans problème...

Euh... , c'est idiot, mais tu as essayé sur une autre Database, pour voir ?
Tu n'as aucune dépendance, genre procédure stockée, sur tes tables ?
Vulcanos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2005, 09h28   #3
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
Hi, je me doute que ça passe sous IB, c'est un peu fait pour mais je ne m'attendais pas à un problème sur ce contexte somme toute assez basique, vu que je ne pousse pas IB dans ses derniers retranchements !

Je parierai bien 100 sous sur un pb lié à un index : j'utilise CaseStudio pour générer le DDL, et je m'étais mis un Post-it pour procéder en 2 temps:
1/ toutes les créations (tables, contraintes de RI, etc...) sauf les Index
2/ les index

Mais comment savoir si c'est vraiment là que le bât blesse ?

Sinon, non: pas de PS ou autres triggers sur les tables incriminées
__________________
"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 05/04/2005, 09h48   #4
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Par défaut Re: [IB6] Alter table => altermoiement !

On a ce message quand on essaye de créer une contrainte, mais qu'il existe des données qui ne satisfont pas cette contrainte.

En clair :
Vous avez des données dans votre table POINTAGE.ATE_REF qui n'existent pas dans la table ATELIER.ATE_REF.

Pour vérifier celà il suffit d'executer cette requete :

Code :
1
2
3
SELECT p.* 
FROM pointage p LEFT JOIN atelier a ON a.ATE_REF=p.ATE_REF 
WHERE a.ATE_REF IS NULL
Qui liste les enregistrements de Pointage qui n'ont pas de correspondance dans Atelier.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2005, 10h02   #5
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
Par défaut Re: [IB6] Alter table => altermoiement !

Citation:
Envoyé par Barbibulle
Vous avez des données dans votre table POINTAGE.ATE_REF qui n'existent pas dans la table ATELIER.ATE_REF.
Je veux bien croire que ceci explique le message d'erreur, mais pour mon cas, la table Pointage vient juste d'être créée, elle est donc vide (enfin normalement )
__________________
"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 05/04/2005, 10h38   #6
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Le nom FK_POINTAGE_1 ne serait il pas utilisé par une autre contrainte ?

Avez vous essayez :

Code :
1
2
3
4
ALTER TABLE POINTAGE 
ADD constraint FK_BARBIBULLE 
FOREIGN KEY (ATE_REF) 
REFERENCES ATELIER(ATE_REF)
Et aussi : Cet alter se trouve ou ? juste après la création des tables (les instructions sont enchainées oubien vous faite le alter dans un autre script ?) ?
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2005, 10h55   #7
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
J'essaierai un nouveau nom de contrainte ce soir....

Cependant, j'ai, me semble-t'il, tenté cette création de toutes (?) les manières:

1/ un script issu de CaseStudio : create table suivi du add contrainte sans nom de contrainte

2/ idem ci dessus en fixant le nom de la contrainte ("relationshipXXX")

3/ create table puis sous IbExpert, ajout de la contrainte manuellement (nom attribué par IbExpert)

Dans tous les cas, l'ajout de la contrainte est en échec.

J'ai aussi été fouiner dans la table RDB$REF_CONTRAINT accrochée à ma DB, mais les seuls noms relevés semblent au format Interbase.
__________________
"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 05/04/2005, 12h54   #8
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Bon en fait je ne pense pas que celà vienne du nom de la contrainte car il me semble que lorqu'on donne un nom déjà utilisé le message est du type Duplicate value...

Par contre je me souvient qu'il y a un bug dans Interbase 6 relatif à la création de FK.

Votre ATE_REF de la table ATELIER n'est pas déjà référencé par une autre FK (autre que par la table POINTAGE) ? Si c'est le cas cherchez pas il me semble bien que c'est le bug. Maintenant il y a d'autres conditions pour que ce soit ce bug mais je ne me souviens plus trop.
Ou si ATE_REF de la table ATELIER fait parti d'un index nommé ?

Ce qui est certain c'est que c'est corrigé dans fb1.5.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2005, 13h20   #9
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 Barbibulle
Votre ATE_REF de la table ATELIER n'est pas déjà référencé par une autre FK (autre que par la table POINTAGE) ?
oui

Citation:
Envoyé par Barbibulle
Ou si ATE_REF de la table ATELIER fait parti d'un index nommé ?
encore oui

Citation:
Envoyé par qi130
Je parierai bien 100 sous sur un pb lié à un index
J'aurai du faire Madame Irma

FireBird me voilà (je crois que ça devient nécessaire) encore du boulot dont je me serai bien passer !
__________________
"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 05/04/2005, 13h27   #10
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Essayez de renommez notre index par un nom >S (TEST_INDX par exemple). Idem pour les FK qui sont liées à cette colonne.

Sinon le passage à FB1.5 se fait sans soucis et de toute façon il faudra bien que vous passiez le cap un jour ou l'autre (IB6 ayant quelques soucis sur certaines plateformes). Par contre vous avez aussi le choix de passer à IB7.5 mais c'est payant.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2005, 21h51   #11
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
Alors, la manip consiste à:

- supprimer les index que j'avais déclaré (au passage, et faute de connaissance a priori, j'avais déclaré des index sur les clés des tables alors qu'IB le fait automatiquement)

- passer les ordres d'alter pour ajout des FK

- recréer les index (sauf ceux en double par rapport à IB) supprimés à l'étape 1

Ca a l'air de rouler !

Merci à tous.
__________________
"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
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h08.


 
 
 
 
Partenaires

Hébergement Web