Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
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 10/07/2003, 10h04   #1
Candidat au titre de Membre du Club
 
Inscription : avril 2003
Messages : 49
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 49
Points : 14
Points : 14
Par défaut [Résolu][IBConsole]SQL Error

Salut !

Je voulais modifier la définition de certains attributs d'une table de ma Bdd sous IBConsole mais apparemment les contraintes d'intégrités gènent ma manoeuvre.
Ma table est la suivante:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TABLE "SALARIE" 
(
  "MAT_SAL"	NUMERIC(7, 0) NOT NULL,
  "CODE_ETAB"	CHAR(2) NOT NULL,
  "CODE_CY"	CHAR(10) NOT NULL,
  "CODE_GRILLE"	CHAR(10) NOT NULL,
  "PASS_SAL"	CHAR(10),
  "ID_SAL"	CHAR(20),
  "ETAT_SAL"	NUMERIC(1, 0),
  "ADM_SAL"	NUMERIC(1, 0),
  "NOM_SAL"	CHAR(25) NOT NULL,
  "PREN_SAL"	CHAR(25) NOT NULL,
  "NUM_BAD"	INTEGER NOT NULL,
CONSTRAINT "PK_SALARIE" PRIMARY KEY ("MAT_SAL"),
CONSTRAINT "UNI_NOM_PRENOM_BADGE" UNIQUE ("NOM_SAL", "PREN_SAL", "NUM_BAD")
);
Les contraintes sont:
Code :
1
2
3
ALTER TABLE "SALARIE" ADD CONSTRAINT "FK_SALARIE_APPARTENI_CYCLE_HO" FOREIGN KEY ("CODE_CY") REFERENCES CYCLE_HORAIRE ("CODE_CY");
ALTER TABLE "SALARIE" ADD CONSTRAINT "FK_SALARIE_APPARTENI_ETABLISS" FOREIGN KEY ("CODE_ETAB") REFERENCES ETABLISSEMENT ("CODE_ETAB");
ALTER TABLE "SALARIE" ADD CONSTRAINT "FK_SALARIE_ATTRIBUER_GRILLE" FOREIGN KEY ("CODE_GRILLE") REFERENCES GRILLE ("CODE_GRILLE");
Mon script de modification est :
Code :
1
2
ALTER TABLE SALARIE
    ALTER NUM_BAD TYPE DECIMAL(7,0);
Mais il apparait le message d'erreur:
Citation:
Unsuccessful metadata update
MODIFY RDB$RELATION_FIELDS failed
action cancelled by trigger (1) to preserve data integrity
Cannot update index segment used by an Integrity Constraint
Statement: ALTER TABLE SALARIE
ALTER NUM_BAD TYPE DECIMAL(7,0)
Comment contourner ce prob, sachant que je comptais aussi modifier ma clés primaire en Décimal? Qu'est ce qui empêche cette modif?

Merci
Seb
Seb7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2003, 10h15   #2
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: [IBConsole]SQL Error

Il faut avant de pouvoir modifier une colonne supprimer les contraintes qui sont dessus... :
la commande est la suivante :
Code :
ALTER TABLE DROP CONSTRAINT "NOM_CONTRAINTE"
Dans ton cas c'est la contrainte UNI_NOM_PRENOM_BADGE qui te pose probleme donc :
Code :
ALTER TABLE DROP CONSTRAINT "UNI_NOM_PRENOM_BADGE"
Puis tu modifies ta colonne :
Code :
1
2
ALTER TABLE SALARIE 
    ALTER NUM_BAD TYPE DECIMAL(7,0);
Puis tu peux recréer ta contrainte :
Code :
ALTER TABLE SALARIE ADD CONSTRAINT "UNI_NOM_PRENOM_BADGE" UNIQUE ("NOM_SAL", "PREN_SAL", "NUM_BAD");
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2003, 10h50   #3
Candidat au titre de Membre du Club
 
Inscription : avril 2003
Messages : 49
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 49
Points : 14
Points : 14
Merci beaucoup Barbibulle, maintenant ça marche très bien.
Par contre, sous Interbase quel est le type qui te permet d'avoir une donnée sur x caractères.
Sous MySQL, j'utilisais Décimal pour avoir mon n° de badge sous la forme: "0000043" au lieu de "43". Mais là, je n'arrive pas à obtenir ce résultat, il semble ne garder que "43" et j'ai absolument besoin de tous les caractères.

Quel type réalise ça sous Interbase?

Merci
Seb7 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2003, 11h25   #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
C'est à toi de compléter par programmation lors de l'affichage avec des zero non significatif à droite.

Ou bien utilise le type CHAR(7)... Et d'empécher par programmation la saisie de caractères non numériques...
En ce qui concerne les tris si effectivement tu mets SYSTEMATIQUEMENT les zero non significatifs à droite celà reviendra au même. Par contre pour les recherches tu vas également devoir rechercher en indiquant les zeros à droite...
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2003, 11h38   #5
Candidat au titre de Membre du Club
 
Inscription : avril 2003
Messages : 49
Détails du profil
Informations forums :
Inscription : avril 2003
Messages : 49
Points : 14
Points : 14
OK, ben vu que j'avais déjà prévu de n'autoriser uniquement que la saisie de chiffres dans les zones concernées, je vais utiliser le type CHAR(7). De toute façon ceux ne sont que des numéros de matricule ou de badge, aucun calcul n'entre en jeu, donc ça ira très bien.

Merci

A+
Seb
Seb7 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 04h57.


 
 
 
 
Partenaires

Hébergement Web