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 23/05/2006, 12h55   #1
Membre du Club
 
Inscription : mars 2005
Messages : 105
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 105
Points : 52
Points : 52
Par défaut générateur et plantage

Bonjour,

Pour gérer un numéro de facture, j'utilise un générateur lié à un trigger qui va incrémenter automatiquement le numéro de facture à chaque insertion.
Ca fonctionne parfaitement sauf que je viens de constater qu'en cas de plantage durant le commit, le générateur conserve la nouvelle valeur incrémenté ( le rollback n'annule pas son auto incrémentation ).
Ceci est génant car risque de créer des 'trous' dans la liste des factures : numéro de facture pas utilisé si plantage.
J'ai fait une recherche sur le forum, j'ai vu que ce fonctionnement est tout à fait normal mais je n'ai pas trouvé de solution pour éviter cette incrémentation .
Faut il passer plutot par les procédures stockées pour faire les insertions de facture pour limiter les risques de plantage ou y a t'il une solution qui résoud ce problème ?
Merci d'avance
Thierry
free07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 13h11   #2
Membre confirmé
 
Avatar de TMuet
 
Homme Olivier Muet
Responsable de service informatique
Inscription : septembre 2003
Messages : 222
Détails du profil
Informations personnelles :
Nom : Homme Olivier Muet
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2003
Messages : 222
Points : 254
Points : 254
Non.
Les générateurs fonctionnent hors transaction.
Que tu sois dans une PS, un trigger ou n'importe quoi, un rollback n'empêchera pas son incrémentation.
TMuet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 13h19   #3
Membre régulier
 
Inscription : février 2005
Messages : 100
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 100
Points : 88
Points : 88
Bonjour,

Ce n'est pas gênant d'avoir un trou dans la liste des numéros de facture. Par exemple, si un jour tu decides d'effacer l'enregistrement correspondant au bout de quelques années, tu auras forcément un trou) Tout dépend de l'utilisation que tu souhaites en faire. A mon avis, il est plus judicieux d'utiliser ton générateur pour l'identifiant de ta table qui devrait être différent du numéro de facture comme :

table TFacture
colonne Numero identifiant changé en fonction du générateur
colonne NumeroFacture
...

Sinon si tu insistes vraiment pour utiliser un champ facture incrémenté alors crée un trigger before insert :

Code :
1
2
3
4
5
6
7
 
CREATE TRIGGER TFacture_BI0 FOR TFacture
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  SELECT max(NumeroFacture) + 1 FROM TFacture INTO new.NumeroFacture;
end
Avec ce trigger le numéro ne devrait se mettre à jour qu'en fonction de l'insertion et non plus du générateur et normalement tu n'as plus de problème durant un plantage avec un commit.

Ou alors ton numéro de facture pourrait même être un champs calculé.
sillycoder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 13h55   #4
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
voir le document :
http://www.ibobjects.com/docs/ti_AuditableSeries.ZIP
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 14h07   #5
Membre du Club
 
Inscription : mars 2005
Messages : 105
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 105
Points : 52
Points : 52
Tout d'abords merci pour ta réponse,

Citation:
Envoyé par sillycoder
Bonjour,

Ce n'est pas gênant d'avoir un trou dans la liste des numéros de facture. Par exemple, si un jour tu decides d'effacer l'enregistrement correspondant au bout de quelques années, tu auras forcément un trou)
Et bien, c'est trés génant, c'est meme fiscalement interdit car il y a forcément suspection de fraude et dur dur d'expliquer ceci à un controleur fiscal.
Si l'utilisateur décide d'effacer une facture, je la mets à l'état 'invalide' mais elle reste visible.

En ce qui concerne la solution de mettre un générateur sur l'identifiant de la table et le numéro de facture dans une colonne, je ne vois pas vraiment l'interet, cela ne fait que reporter le pb, comment fais tu pour gérer cela dans un environnement multi poste ?
free07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2006, 13h43   #6
Membre Expert
 
Avatar de edam
 
Inscription : décembre 2003
Messages : 1 716
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 1 716
Points : 1 783
Points : 1 783
il y a bcp d'encre qui a ecoulé pour ce sujet
alors j'aime bien prposé une solution et a vrait dir une question
a la fin de chaque journé peut on faire une mise a jour des factures pour qu'on a pas de trous???
__________________
PAS DE DESTIN, C'EST CE QUE NOUS FAISONS
edam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2006, 16h05   #7
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
Citation:
Envoyé par edam
il y a bcp d'encre qui a ecoulé pour ce sujet
alors j'aime bien prposé une solution et a vrait dir une question
a la fin de chaque journé peut on faire une mise a jour des factures pour qu'on a pas de trous???
oui bien sûr, je le répète le bon doc de référence pour cela avec exemple et explications est là :
http://www.ibobjects.com/docs/ti_AuditableSeries.ZIP
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2006, 16h31   #8
Rédacteur
 
Inscription : janvier 2004
Messages : 2 123
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : janvier 2004
Messages : 2 123
Points : 1 977
Points : 1 977
Salut,

Ce tutoriel ne pourrait pas vous aider ?
http://octobinz.developpez.com/artic...e/generateurs/
__________________
Ancien pseudo : yobenzen

Recherche un emploi de Chef de Projet ou Développeur en Normandie
Delphi/Oracle/Interbase
Migration vers symfony

CV :
- LinkedIn
- Viadeo
Benjamin GAGNEUX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2006, 16h53   #9
Membre Expert
 
Avatar de edam
 
Inscription : décembre 2003
Messages : 1 716
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 1 716
Points : 1 783
Points : 1 783
Citation:
Envoyé par edam
j'aime bien prposé une solution et a vrait dir une question
a la fin de chaque journé peut on faire une mise a jour des factures pour qu'on a pas de trous???
__________________
PAS DE DESTIN, C'EST CE QUE NOUS FAISONS
edam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2006, 22h43   #10
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
et ! lis les réponses que l'on t'a donné, ton pb est résolu
bien sûr que l'on peut
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2006, 08h56   #11
Membre du Club
 
Inscription : mars 2005
Messages : 105
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 105
Points : 52
Points : 52
Citation:
Envoyé par makowski
et ! lis les réponses que l'on t'a donné, ton pb est résolu
Désolé, j'ai été absent ces derniers jours, merci pour ton lien, il est trés interessant, j'ai jeté un coup d'oeil, il va me falloir du temps pour analyser cela car je n'ai pas delphi, seulement builder, en plus l'exemple a l'air d'utiliser des composants que je n'ai pas.
Et pour couronner le tout, je n'ai jamais fait de procédures stockés, je ne comprends pas celles qui sont écrites.
Bref, tu l'aura compris, cela va me prendre pas mal de temps pour comprendre ce qui doit être fait.
Je peux te solliciter à nouveau plus tard, si je comprends pas certaines choses ?
free07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/05/2006, 09h02   #12
Membre du Club
 
Inscription : mars 2005
Messages : 105
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 105
Points : 52
Points : 52
Citation:
Envoyé par edam
il y a bcp d'encre qui a ecoulé pour ce sujet
alors j'aime bien prposé une solution et a vrait dir une question
a la fin de chaque journé peut on faire une mise a jour des factures pour qu'on a pas de trous???
Je ne pense pas que cela soit une bonne solution, les factures sont pour la plupart imprimées et données aux clients, il est donc pas concevable de changer son numéro ensuite. Dans ce cas là, il n'y aura plus aucune correspondance de numéro de facture entre celles données aux clients et celles de la BD.
free07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h31.


 
 
 
 
Partenaires

Hébergement Web