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 :

Incrémentation d'un numero


Sujet :

SQL Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 30
    Par défaut Incrémentation d'un numero
    Voilà, je sais que c'est un sujet longuement abordé dans le forum, j'ai fait des recherches, mais rien de ce qui est proposé pour l'instant ne répond vraiment à ma question !

    Bon j'ai créé une table Clients en utilisants le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE "CLIENTS" 
    (
      "NUMERO"	INTEGER NOT NULL,
      "NOM"	CHAR(30),
      "PRENOM"	CHAR(30),
      "AGE"	INTEGER,
      "EMAIL"	CHAR(20)
    J'aimerais que le NUMERO soit autoincrémenté ! Suivant les prescriptions données sur ce forum, j'ai créer un générateur et un trigers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TRIGGER "CREATE_NUMERO" FOR "CLIENTS" 
    ACTIVE BEFORE INSERT POSITION 0
    AS BEGIN
         NEW.NUMERO = GEN_ID(NUMERO_GEN, 1);
      END
    Jusque là tout fonctionne ! Et c'est maintenant qu'apparaît mon problème (que j'ai déjà abordé dans un autre post d'ailleurs !)

    Si je fais mon insertion vià le code sql :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO CLIENTS(NOM,PRENOM,AGE,EMAIL)
       VALUES ('Dupont', 'MARCEL', 26, 'dup@free.be');
    Tout marche impec, il incrémente automatiquement le Numéro et le met à 1.

    Par contre si avec IBconsole, je clique sur TABLES puis sur CLIENTS, il m'ouvre une fenêtre Properties for :CLIENTS.
    J'ai alors 5 onglets de gauche à droite :
    - Properties
    - Metadata
    - Permissions
    - Data
    - Dependencies

    Je clique sur l'onglet Data. Il me présente alors ma Table sous forme d'un tableau avec dedans mon client n°1 Marcel Dupont. En dessous j'ai une barre d'outils qui me permet de travailler les données de ma table :
    Next record, Last record, Insert record, Delete record, etc....

    Si je clique sur Insert record, il me crée une nouvelle ligne, dans laquelle je peux introduire mes nouvelles données, mais le problème est qu'il n'incrémente pas mon champs NUMERO !!!!!

    Quelqu'un pourrait-il m'expliquer pourquoi et comment faire pour que l'incrémentation fonctionne ? Merci d'avance !

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2002
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 70
    Par défaut
    Bonjour,

    Premièrement, ton trigger n'est peut-être pas optimiser (ce n'est pas la cause d'une erreur, mais pourrait en prévenir).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE TRIGGER "CREATE_NUMERO" FOR "CLIENTS" 
    ACTIVE BEFORE INSERT POSITION 0 
    AS BEGIN 
       if (NEW.NUMERO is null) then
       {
          NEW.NUMERO = GEN_ID(NUMERO_GEN, 1); 
       }  
    END
    Comme ça, si jamais tu insères un numéro, il ne te vas pas le changer.

    Quand tu cliques sur insert record, tu dois ensuite cliquez sur post, ou un autre bouton de ce genre, pour que le trigger s'exécute.

  3. #3
    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
    Il est préférable de faire plutot ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TRIGGER "CREATE_NUMERO" FOR "CLIENTS" 
    ACTIVE BEFORE INSERT POSITION 0 
    AS BEGIN 
      if (NEW.NUMERO is null) then
         NEW.NUMERO = GEN_ID(NUMERO_GEN, 1); 
      END
    et pour que ca incremente automatiquement il faut faire des insertions soit en ommétant la colonne NUMERO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO CLIENTS(NOM,PRENOM,AGE,EMAIL) 
       VALUES ('Dupont', 'MARCEL', 26, 'dup@free.be');
    soit en lui affectant NULL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO CLIENTS(NUMERO, NOM,PRENOM,AGE,EMAIL) 
       VALUES (NULL, 'Dupont', 'MARCEL', 26, 'dup@free.be');
    L'incrementation se fait apres l'insertion et non avant...

    Et donc c'est valable pour IBConsole....... il faut valider la saisie.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 30
    Par défaut
    Merci de vos réponses rapides ! Je fais tout de suite les changements et les tests et je vous dis si ça fonctionne !

  5. #5
    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
    arff j avais pas vu que Dihap avait déjà répondu, enfin le principal c'est qu'on dise la même chose...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 30
    Par défaut
    Génial ça marche ! En fait il fallait cliquer en plus sur "Commit & Refresh"
    Il met alors les bonnes valeurs pour le champs NUMERO ! Encore un grand merci à tous les deux pour votre aide !

  7. #7
    Membre éprouvé
    Inscrit en
    Avril 2002
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 70
    Par défaut
    Comme le dit si Bien Barbibulle, en autant qu'on dit là même chose

    En plus, Barbibulle a donné plus de détails que moi, alors ce n'est pas vraiment inutile

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

Discussions similaires

  1. Champ incrémenter numero automatique
    Par toto222 dans le forum Excel
    Réponses: 1
    Dernier message: 20/10/2009, 17h18
  2. [XL-2007] Probleme dtpicker+incrémenter un numero à la nouvelle feuille
    Par jimmy59940 dans le forum Excel
    Réponses: 2
    Dernier message: 29/04/2009, 09h00
  3. créer un numero incrémenter avec remise a 0 annuel
    Par p'tite Sandrine dans le forum Access
    Réponses: 17
    Dernier message: 29/01/2007, 10h17
  4. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10
  5. Post incrémentation?
    Par Defrag dans le forum C
    Réponses: 4
    Dernier message: 08/10/2002, 10h36

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