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

SQL Firebird Discussion :

[IBConsole]SQL Error


Sujet :

SQL Firebird

  1. #1
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 49
    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 : 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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE SALARIE
        ALTER NUM_BAD TYPE DECIMAL(7,0);
    Mais il apparait le message d'erreur:
    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

  2. #2
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE DROP CONSTRAINT "NOM_CONTRAINTE"
    Dans ton cas c'est la contrainte UNI_NOM_PRENOM_BADGE qui te pose probleme donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE DROP CONSTRAINT "UNI_NOM_PRENOM_BADGE"
    Puis tu modifies ta colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE SALARIE 
        ALTER NUM_BAD TYPE DECIMAL(7,0);
    Puis tu peux recréer ta contrainte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE SALARIE ADD CONSTRAINT "UNI_NOM_PRENOM_BADGE" UNIQUE ("NOM_SAL", "PREN_SAL", "NUM_BAD");

  3. #3
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 49
    Par défaut
    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

  4. #4
    Membre Expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 052
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 052
    Par défaut
    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...

  5. #5
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 49
    Par défaut
    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

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 06/08/2009, 16h16
  2. DBLINK ORACLE vers MYSQL SQL Error: ORA-2850
    Par chemical_seb dans le forum Connexions aux bases de données
    Réponses: 0
    Dernier message: 19/08/2008, 15h02
  3. [Firebird 1.5] Dynamic SQL error (-303)
    Par crade dans le forum SQL
    Réponses: 1
    Dernier message: 15/06/2007, 21h32
  4. [FireBird] Dynamic SQL Error
    Par aityahia dans le forum SQL
    Réponses: 1
    Dernier message: 28/05/2007, 10h12
  5. Réponses: 1
    Dernier message: 16/05/2007, 15h54

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