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 15/02/2005, 10h14   #1
Futur Membre du Club
 
Inscription : mars 2002
Messages : 84
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 84
Points : 19
Points : 19
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
koolkris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2005, 10h51   #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
Remettre à zero c'est facile il suffit de faire un
Code :
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.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2005, 11h05   #3
Futur Membre du Club
 
Inscription : mars 2002
Messages : 84
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 84
Points : 19
Points : 19
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
koolkris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2005, 11h21   #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
normal vous n'avez pas le droit d'utiliser le set generator dans une PS/trigger.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2005, 11h39   #5
Futur Membre du Club
 
Inscription : mars 2002
Messages : 84
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 84
Points : 19
Points : 19
ouais effectivement ça marche pas, quelqu'un a pas une idée ?
koolkris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2005, 12h07   #6
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
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 :
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2005, 12h19   #7
Futur Membre du Club
 
Inscription : mars 2002
Messages : 84
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 84
Points : 19
Points : 19
si si je l'ai bien vu, je l'ai utilisé dans un trigger mais ça ne fonctionne toujours pas

Code :
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:
koolkris est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2005, 14h24   #8
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
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 :
1
2
IF (nbcount = 0) THEN 
  nbcount = GEN_ID(ARTISTES_GEN, -gen_id(ARTISTES_GEN,0));
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2005, 15h37   #9
Futur Membre du Club
 
Inscription : mars 2002
Messages : 84
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 84
Points : 19
Points : 19
Ok c'est bon merci Barbibulle !
koolkris 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 17h50.


 
 
 
 
Partenaires

Hébergement Web