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

 Firebird Discussion :

Clé composée de deux colonnes


Sujet :

Firebird

  1. #1
    Membre du Club Avatar de Doudy
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 104
    Points : 53
    Points
    53
    Par défaut Clé composée de deux colonnes
    Bonjour,

    J'ai une table (Firebird 2.1 utilisée avec FlameRobin 0.9.3 sous Windows 7 ) définie comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE NOM
    (
      NONOM Integer NOT NULL,
      NOM Varchar(50) NOT NULL,
      NOACTIVITE Integer,
      ADRESSE Varchar(50),
      CP Integer,
      VILLE Varchar(40),
      TEL Varchar(20),
      PORTABLE Varchar(20),
      EMAIL Varchar(50),
      CA Numeric(10,2),
      CONSTRAINT PK_NOM PRIMARY KEY (NONOM)
    );
    Après création de la table et ajout de quelques enregistrements, j'aurais besoin d'ajouter une colonne à la clé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    alter table NOM
    add constraint PK_NOM
    primary key (NONOM, NOM)
    mais j'ai un message d'erreur de FlameRobin:

    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
    Starting transaction...
    Preparing query: alter table NOM
    add constraint PK_NOM
    primary key (NONOM, NOM)
    Prepare time: 0.022s
    Plan not available.
     
     
    Executing...
    Error: *** IBPP::SQLException ***
    Context: Statement::Execute( alter table NOM
    add constraint PK_NOM
    primary key (NONOM, NOM) )
    Message: isc_dsql_execute2 failed
     
    SQL Message : -607
    This operation is not defined for system tables.
     
    Engine Code    : 335544351
    Engine Message :
    unsuccessful metadata update
    STORE RDB$INDICES failed
    attempt to store duplicate value (visible to active transactions) in unique index "RDB$INDEX_5"
     
     
    Total execution time: 0.025s
    Donc auriez vous une idée pour ajouter le champ NOM à ma clé ?

    Merci d'avance pour votre aide.
    Ubuntu 13.10 + Debian server 7.2

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Si le champ NONOM (Integer) est associé à un trigger/générateur, la clé primaire sur ce champ est amplement suffisante pour identifier tes enregistrements de façon unique.
    Dans le cas contraire, tu dois supprimer la PK existante pour la redéfinir sur les 2 champs (NONOM, NOM).

    @+ Claudius

  3. #3
    Membre du Club Avatar de Doudy
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    Merci de la réponse,

    Oui, champ NONOM (Integer) est associé à un trigger/générateur.
    Mais j'ai besoin du champ NOM dans ma clé car car j'utilise sous Delphi le composant wwIncrementalSearch ( d'InfoPower ) qui est une sorte d'edit box faisant une recherche incrémentale sur un des champs de l'index, donc le champ NOM m'est nécessaire.
    Dans la doc du composant il est dit:

    When searching against a Table, the component automatically uses the index to enhance performance. See the TwwTable property NarrowSearch and SyncSQLByRange to further customize how InfoPower performs incremental searching on a Table.
    When searching against a Query or QBE result, the component performs a sequential search on the field defined by the SearchField property. The search is always case insensitive against a query or QBE.
    Ubuntu 13.10 + Debian server 7.2

  4. #4
    Membre du Club Avatar de Doudy
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    J'ai donc supprimé le triggers avec succès, puis j'ai essayé de supprimer la clé, mais erreur:
    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
    Starting transaction...
    Preparing query: ALTER TABLE NOM DROP CONSTRAINT PK_NOM
    Prepare time: 0.014s
    Plan not available.
     
     
    Executing...
    Error: *** IBPP::SQLException ***
    Context: Statement::Execute( ALTER TABLE NOM DROP CONSTRAINT PK_NOM )
    Message: isc_dsql_execute2 failed
     
    SQL Message : -607
    This operation is not defined for system tables.
     
    Engine Code    : 335544351
    Engine Message :
    unsuccessful metadata update
    ERASE RDB$RELATION_CONSTRAINTS failed
    action cancelled by trigger (1) to preserve data integrity
    Cannot delete PRIMARY KEY being used in FOREIGN KEY definition.
     
     
    Total execution time: 0.017s
    Et pourtant le triggers a bien été supprimé, il n'apparait plus dans l'onglet Triggers de FlameRobin
    Ubuntu 13.10 + Debian server 7.2

  5. #5
    Membre du Club Avatar de Doudy
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 104
    Points : 53
    Points
    53
    Par défaut
    Bien, le problème et résolu : il y avait une clé étrangère qui empèchait la suppresion de la PK ...
    Ubuntu 13.10 + Debian server 7.2

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

Discussions similaires

  1. [CR9] groupement en deux colonnes
    Par wargre dans le forum SAP Crystal Reports
    Réponses: 10
    Dernier message: 13/06/2006, 10h11
  2. Minimum entre deux colonnes
    Par keikun dans le forum Requêtes
    Réponses: 5
    Dernier message: 18/08/2005, 13h20
  3. zone de liste : affichage de deux colonnes
    Par niclalex dans le forum IHM
    Réponses: 3
    Dernier message: 27/10/2004, 22h51
  4. [CR] Faire un groupe sur deux colonnes, voir mon exemple
    Par Etienne51 dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 08/10/2004, 14h02

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