duvida com generator!!
Ola amigos, minha duvida é a seguinte:
pq quando crio o generator e chamo a sql:
select gen_id(gen_clientes_id,1) from rdb$database
ele faz tudo bunitinho, mas se insiro 1 registro, cancelo ele, o generator continua gerando e n continua de onde parei?
ex:
query.insert
gerou 1
query.cancel
cancelou, quando insiro de novo ele vai 2 e nao volta pro 1 de onde nem inseri!
como contornar isso?
um abraço
[color=green:b3ac60bda8]Movido de Delphi para Interbase/Firebird[/color:b3ac60bda8]
pq quando crio o generator e chamo a sql:
select gen_id(gen_clientes_id,1) from rdb$database
ele faz tudo bunitinho, mas se insiro 1 registro, cancelo ele, o generator continua gerando e n continua de onde parei?
ex:
query.insert
gerou 1
query.cancel
cancelou, quando insiro de novo ele vai 2 e nao volta pro 1 de onde nem inseri!
como contornar isso?
um abraço
[color=green:b3ac60bda8]Movido de Delphi para Interbase/Firebird[/color:b3ac60bda8]
Njuniorba
Curtidas 0
Respostas
Catunda
28/08/2005
Well, the book is on the table.......
Colega, o comando abaixo, utilizado por vc está correto:
select gen_id(gen_clientes_id,1) from rdb$database
O problema é o momento em que vc está disparando o comando.
Pelo que percebi vc esta utilizando logo apos o insert, e uma vez feito o valor do generator não volta atras.
Eu resolvi esse problema fazendo a incrementação do generator no evento before post do dataset, assim somente executo o comando de incrementação do generator se confirmar a inclusão do registro.
Contudo, essa minha maneira tem o incoveniente de não mostrar logo o código, no caso, do novo cliente, mas há formas de tb contornar esse problema, e isso depende do modo de lançamento do seu formulario, isso é, se vc está lançando os dados em um dbgrid ou em dbedit... etc...
Valeu?????????
Colega, o comando abaixo, utilizado por vc está correto:
select gen_id(gen_clientes_id,1) from rdb$database
O problema é o momento em que vc está disparando o comando.
Pelo que percebi vc esta utilizando logo apos o insert, e uma vez feito o valor do generator não volta atras.
Eu resolvi esse problema fazendo a incrementação do generator no evento before post do dataset, assim somente executo o comando de incrementação do generator se confirmar a inclusão do registro.
Contudo, essa minha maneira tem o incoveniente de não mostrar logo o código, no caso, do novo cliente, mas há formas de tb contornar esse problema, e isso depende do modo de lançamento do seu formulario, isso é, se vc está lançando os dados em um dbgrid ou em dbedit... etc...
Valeu?????????
GOSTEI 0
Motta
28/08/2005
Generator (Sequence no Oracle) são objetos que garantem unicidade , mas não a integridade , tem algumas aplicações que não podem ter ´banguelas´ (apolices , NF´s etc) , para isto a solução é colocar uma tabela que guarde a última sequencia utilizada e ter sua atualização numa única transação, já vi varias discussões sobre este assunto aqui uma pequisa pode trazer uma solução até melhor.
GOSTEI 0
Gandalf.nho
28/08/2005
Um generator fica fora do contexto das transações, ou seja, não é afetado por rollback, mas a menos que realmente não possa haver buracos na numeração como notas fiscais e similares, vc pode ignorar isso.
GOSTEI 0