[firebase-br] RES: Generator que Incrementa mesmo Após o Rollback

Jose Aparecido da Silva joseasilva em bol.com.br
Sex Abr 30 16:22:22 -03 2010


Generator não depende de transação e creio que isso é o que se espera dele.
Se você precisa fazer o controle desses números para não deixar nenhum
espaço entre eles, creio que é preciso rever a lógica do teu sistema.
Creio que não há problema em perder um número ou outro, pelo menos sabemos
que não haverá número repetido.

[ ]'s
Jose Aparecido da Silva
Fasystem


-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Rogério Monteiro
Enviada em: sexta-feira, 30 de abril de 2010 15:20
Para: lista em firebase.com.br
Assunto: Generator que Incrementa mesmo Após o Rollback

Olá Colegas.

Uso Delphi 7 + ZeosLib + FB 2.1.

tenho uma tabela chamada ESTOQUEPAPELSOBRAS que é filha da tabela 
ESTOQUEPAPEL. Todas as tabelas, eu disse TODAS, eu tenho primeiramente um 
campo chamado ID que é a minha chave primária e que são auto-incrementadas 
pela trigger no BEFORE POST do FB. Portanto:

Em

ESTOQUEPAPEL  -  ID  -->> PK

ESTOQUEPAPELSOBRAS   -   ID  -->> PK
                                                    ESTOQUEPAPELSOBRAS  -->>

FK que recebe o ID de ESTOQUEPAPEL.

Na tabela ESTOQUEPAPELSOBRAS tenho tb um campo chamado ALTURA e outro 
LARGURA, e uma Unique Constraint com os campos IDESTOQUEPAPEL, ALTURA, 
LARGURA.

Utilizo TZQuery + TDataSetProvider + TClientDataSet.

Pois bem, logo, se eu tento cadastrar na ESTOQUEPAPELSOBRAS uma ALTURA e 
LARGURA repetida, eu somente consigo pegar a exceção no evento 
OnReconcileError do CDS, e não no AfterPost como no restante das tabelas, e 
dou um Rollback. Até aí td bem.

PROBLEMA:

Verifico o Generator que incrementa o ID de ESTOQUEPAPELSOBRAS e, ao invés 
de ele não incrementar nada pq houve exceção, se por exemplo ele estiver no 
número 4, ele incrementa 3 e vai para 7. Se está com 5 vai para 8 e assim 
por diante.
Como fazer esse 'rollback' neste caso?

Desde já agradeço a todos.

Rogério. 









Mais detalhes sobre a lista de discussão lista