|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
![]() ![]() Claude RenouleaudDéveloppeur informatique Inscription : février 2006 Messages : 4 753 ![]() |
Bonjour
Dans une application Delphi utilisant les compos IBX pour accéder à ma base, après lecture de cet excellent article de PierreY chez Firebird-fr, j'ai défini les paramètres de la transaction ainsi: Code :
J'aimerais savoir si ces paramètres me garantirons de me prémunir d'accès simultanés sur la table COMPTEUR qui aurait pour concéquence de renvoyer des n° identiques. Bref, accès concurrentiels ou pas, et est-ce la bonne méthode ou pas ? @+ Claudius
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira. |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
ben non pas forcément
mais on a déjà répondu X fois à ce genre de question, je ne vois pas pourquoi à chaque fois vous voulez tous réinventer la roue il y a deux documents qui traitent de cette question et qui apportent des solutions http://www.ibobjects.com/docs/ti_AuditableSeries.ZIP et http://octobinz.developpez.com/artic...e/generateurs/
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#3 |
![]() ![]() Claude RenouleaudDéveloppeur informatique Inscription : février 2006 Messages : 4 753 ![]() |
Réinventer la roue, sûrement pas !
J'avais déjà lu l'article sur les incréments purs qui est assurément une bonne méthode pour numéroter des documents tels que des factures. Cependant je ne suis pas à la recherche d'un tel incrément. Peu importe si il y a des trous dans la numérotation. Les pièces que je dois numéroter possèdent un format un peu particulier: Annee+Mois+Incrément. L'appel d'un GEN_ID via un trigger ne peut satisfaire à cette demande. Donc mon soucis reste de pouvoir m'assurer d'un accès exclusif à ma table COMPTEUR. N'utilisant les composant IBObjects je regarderais plus tard en détail ce projet exemple. Claudius
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira. |
|
|
00
|
|
|
#4 |
|
Membre émérite
![]() Ingénieur développement logiciels Inscription : février 2005 Messages : 682 ![]() |
Bonjour,
Tu veux un accès exclusif à une table de numérotation. Moi j'enregistre mon nouveau numéro formater comme le tien (annee mois itération dans le mois) dans une table sur une procédure stockée qui me retouorne le nouveau numéro valide. Dans cette table ce numéro fait partie d'un index unique donc si un autre appel à cette procédure tente d'enregistrer le même numéro il a le droit à une violation de clef et alors je traite cette vialoation dans ma procédure pour demander un nouveau numéro. Ce n'est pas plus compliqué que d'attendre qu'un table soit libéré en écriture. a+
__________________
Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle. Aymond d'Alost |
|
|
00
|
|
|
#5 | |||
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
Citation:
je ne vois pas pourquoi ce ne serait pas possible via un trigger, c'est basique presque Code :
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|||
|
00
|
|
|
#6 |
|
Membre émérite
![]() Ingénieur développement logiciels Inscription : février 2005 Messages : 682 ![]() |
Bonjour,
La solution de makowski me paraît franchement séduisante, d'autant plus que tu peux réinitialiser ton générateur en début de mois. a+
__________________
Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle. Aymond d'Alost |
|
|
00
|
|
|
#7 | |
![]() ![]() Claude RenouleaudDéveloppeur informatique Inscription : février 2006 Messages : 4 753 ![]() |
Citation:
Pourquoi faire simple quand on peut faire compliqué ? Merci à vous deux. @+
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira. |
|
|
|
00
|
|
|
#8 | |
|
Membre du Club
![]() |
Citation:
Pour répondre strictement à ta question, et sachant que la bonne réponse est d'utiliser un générateur, il manque des paramètres, ton souhait est de faire fonctionner firebird au niveau d'isolement "SERIALIZABLE" : SERIALIZABLE : isc_tpb_consistency + isc_tpb_wait + isc_tpb_lock_read (lock explicite des tables auxquelles on accède uniquement en lecture) + isc_tpb_lock_write (lock explicite des tables auxquelles on accède en lecture et écriture) Les phrases "lock explicites..." indiquent qu'il faut passer aussi le NOM des tables auxquelles on veut un lock explicite en lecture ou en écriture. isc_tpb_write est implicite, on utilise isc_tpb_read quand on veut indiquer explicitement qu'on n'a que l'intention de faire des lectures (et se protéger d'une erreur de manipulation ou d'un injection de SQL qui risquerait de provoquer une écriture "malgré nous") @+ -- Pierre Y. |
|
|
|
00
|
|
|
#9 | |||
![]() ![]() Claude RenouleaudDéveloppeur informatique Inscription : février 2006 Messages : 4 753 ![]() |
Bonjour
Citation:
Cependant, par simple curiosité, j'ai essayé de paramétrer un lock explicite en lecture / écriture sur ma table et je n'y suis pas parvenu. J'ai essayé différentes syntaxes sans succès. Code :
Ah, question subsidiaire: les compos IBX sont-ils les mieux adapter à Firebird ? Merci @+
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira. |
|||
|
|
00
|
|
|
#10 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
pas vraiment non
et surtout pour jouer comme tu le fais le mieux dans ce cas c'est de prendre les UIB
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#11 | ||
![]() ![]() Claude RenouleaudDéveloppeur informatique Inscription : février 2006 Messages : 4 753 ![]() |
Bonjour
Citation:
Citation:
Bonne journée. Je tag résolu. @+
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira. |
||
|
|
00
|
|
|
#12 |
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 215 ![]() |
mais tu as raison, c'est en essayant que l'on apprend
"jouer" n'était pas péjoratif
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
|
00
|
|
|
#13 | |||||
|
Membre du Club
![]() |
Citation:
En général il y a des propriétés dans les composants T[XXX]Transaction (où XXX in (IB, UIB, JvUIB, IBO, ...) qui permettent de contrôler les paramètres, le tout est ensuite encodé par le composant pour être passé à l'API : Dans JvUIB ces paramètres sont LockRead et LockWrite. Ca donnerait : Code :
-- Pierre Y. |
|||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com