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 :

Trigger remise a 0 compteur


Sujet :

SQL Firebird

  1. #1
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 85
    Points : 49
    Points
    49
    Par défaut Trigger remise a 0 compteur
    Bonjour,

    voila j'aimerai savoir comment remettre a 0 un compteur. J'ai crée un generator ainsi qu'un trigger pour auto incrementer ma clé primaire lorsque j'insere un nouvel enregistrement cependant j'aimerai le refaire partir a 0 quand on supprime tout les enregistrements d'une table ou le dernier enregistrement.

    Je voudrais le faire avec un trigger after delete mais apres je ne vois pas comment verifier si il n'y a plus d'enregistrements dans la table

    merci

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Remettre à zero c'est facile il suffit de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gen_id(Mon_gen, -gen_id(Mon_gene,0));
    Le seul problème c'est que si vous êtes en mode multi-user vous risquez d'avoir des soucis.

    Cette opération est plutot à reserver lors de la maintenance de la base, deconnexion des users, effacement des enregistrements et RAZ du générateur.

    Dans le cadre d'une utilisation courante et donc dans un trigger after delete comme vous souhaitez le faire, sachez juste que vous ne pourrez plus dire que votre base est multi-user. Ou du moins ça serait mentir car cette opération n'est pas compatible dans cette environnement.

    Il faut accepter
    - qu'une clé primaire ait des trous (lorsqu'un User fait un rollback alors que l'enregistrement a été inséré, l'ID n'est pas réutilisé).
    - qu'après un effacement total ou partiel des enregistrements, la clé primaire ne reparte pas de zero ou de la plus grande valeurs dans la table mais bien de la valeur suivante du générateur.

    Sans ça vous vous exposez à des conflits entre users.

  3. #3
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 85
    Points : 49
    Points
    49
    Par défaut
    nan mais dans mon cas c'est pas multi-utilisateurs, c'est juste pour me familiariser avec interbase donc je serai le seul a l'utiliser, c'est pour apprendre dans un premier temps. Ouais je vois comment faire pour le mettre a 0 mais je voudrai verifier d'abord si la base est bien vide, je viens de realsier une procedure stockée qui me compte le nombre d'enregistrements d'une table ùais j'arrive a l'appeler dans un trigger, je crois que j'ai un probleme avec la valeur de retour

    SET TERM !!;
    CREATE TRIGGER DELETE_ARTISTE FOR ARTISTES
    ACTIVE AFTER DELETE
    AS
    DECLARE VARIABLE nbcount INTEGER;
    BEGIN
    EXECUTE PROCEDURE PROC_INIT_GEN_ARTISTES RETURNING_VALUES :nbcount;
    IF :nbcount = 0 THEN SET GENERATOR ARTISTES_GEN TO 0;
    END; !!

    voila ce que j'ai fais mais j'ai une erreure

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    normal vous n'avez pas le droit d'utiliser le set generator dans une PS/trigger.

  5. #5
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 85
    Points : 49
    Points
    49
    Par défaut
    ouais effectivement ça marche pas, quelqu'un a pas une idée ?

  6. #6
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    j'en ai bien une mais j'ai bien peur de l'avoir déjà donnée dans mon premier message.

    Peut être qu'en me relisant vous allez la voir :

  7. #7
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 85
    Points : 49
    Points
    49
    Par défaut
    si si je l'ai bien vu, je l'ai utilisé dans un trigger mais ça ne fonctionne toujours pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SET TERM !!;
    CREATE TRIGGER DELETE_ARTISTE FOR ARTISTES
    ACTIVE AFTER DELETE
    AS
    DECLARE VARIABLE nbcount INTEGER;
    BEGIN
        EXECUTE PROCEDURE PROC_INIT_GEN_ARTISTES RETURNING_VALUES :nbcount;
        IF (:nbcount = 0) THEN GEN_ID(ARTISTES_GEN, -gen_id(ARTISTES_GEN,0));
    END; !!
    j'ai toujours une erreure sur le "GEN_ID"

    Edité par Barbibulle : :tagcode:

  8. #8
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Gen_id renvoie une valeur je pense que ça lui pose probleme de pas l'affecter.

    vous avez qu'a utiliser votre nbcount qui est de type integer et qui ne vous sert plus a rien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IF (nbcount = 0) THEN 
      nbcount = GEN_ID(ARTISTES_GEN, -gen_id(ARTISTES_GEN,0));

  9. #9
    Membre du Club
    Inscrit en
    Mars 2002
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 85
    Points : 49
    Points
    49
    Par défaut
    Ok c'est bon merci Barbibulle !

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

Discussions similaires

  1. Compteur et Trigger
    Par cedji dans le forum LabVIEW
    Réponses: 0
    Dernier message: 18/06/2010, 12h37
  2. Réponses: 2
    Dernier message: 10/12/2009, 00h01
  3. remise a zero compteur id
    Par freesly dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/05/2005, 10h39
  4. [PB CONCEPTUEL] avec compteur/trigger
    Par kase74 dans le forum SQL
    Réponses: 6
    Dernier message: 25/03/2004, 11h02
  5. Remise à 0 d'un compteur automatique
    Par missllyss dans le forum SQL
    Réponses: 4
    Dernier message: 15/12/2003, 16h46

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