Qual a melhor maneira de criar um número sequencial na rede?
Como em qualquer sistema, estou utilizando número sequencial no meu sistema, mas estou tendo problemas quanto a registros que podem estar sendo inseridos ao mesmo tempo na tabela.
Utilizo o Generator para chave primária (campo ID), mas no campo número tenho que manter ele sequencial, o que não é possivel quanto ao generator, pois depois de criado (On new record), e nesse caso eu preciso que seja assim pois tenho tabelas filho, não posso mais alterá-lo.
Então atribuo o valor ao campo Número através do SELECT MAX, porém ele não pega valores que ainda não foram comitados por outros usuários, sendo assim o número mostrado pode não ser o último de fato, e o problema é que o índice apesar de não ter sido comitado ele é válido, ou seja, ele verifica existe um número maior em outra transação mesmo que não tenha sido comitada. Qual a alternativa para isso?
Utilizo o Generator para chave primária (campo ID), mas no campo número tenho que manter ele sequencial, o que não é possivel quanto ao generator, pois depois de criado (On new record), e nesse caso eu preciso que seja assim pois tenho tabelas filho, não posso mais alterá-lo.
Então atribuo o valor ao campo Número através do SELECT MAX, porém ele não pega valores que ainda não foram comitados por outros usuários, sendo assim o número mostrado pode não ser o último de fato, e o problema é que o índice apesar de não ter sido comitado ele é válido, ou seja, ele verifica existe um número maior em outra transação mesmo que não tenha sido comitada. Qual a alternativa para isso?
Phfdelphi
Curtidas 0
Respostas
Franbrito
07/06/2004
Porque vc nao coloca no evento beforepost da tabela. Utilizando select Max
GOSTEI 0
Xisto
07/06/2004
Nao estou sugerindo como ideal, apenas faco assim.
Espero que ao final deste topico eu tb encontre o que seria o ideal.
Tenho a famosa tabela CONFIG que guarda sempre o ultimo de tudo (Cliente/Fornecedor/Venda/Contrato,etc).
Leio a tabela, incremento, pego o numero incrementado e trabalho nele sem estress.
Como disse nao sei se é o ideal, mas tem funcionado bem.
Gostaria de saber se teria como um TRIGGER (Firebird) incrementar este numero do unico registro da tabela CONFIG (é um registro para cada filial) e me retorna-lo, tudo num unico comando SQL.
Espero que ao final deste topico eu tb encontre o que seria o ideal.
Tenho a famosa tabela CONFIG que guarda sempre o ultimo de tudo (Cliente/Fornecedor/Venda/Contrato,etc).
Leio a tabela, incremento, pego o numero incrementado e trabalho nele sem estress.
Como disse nao sei se é o ideal, mas tem funcionado bem.
Gostaria de saber se teria como um TRIGGER (Firebird) incrementar este numero do unico registro da tabela CONFIG (é um registro para cada filial) e me retorna-lo, tudo num unico comando SQL.
GOSTEI 0
Silviogs
07/06/2004
OLá Amigo
utilizei esta rotina para resolver o meu problema, esperoi que lhe ajude.
CREATE PROCEDURE Gera_SEQ
@Filial tinyint,
@Retorno Integer Output
as
begin transaction
Update PArametros_Filial with (tablockx)
Set Última_Sequência = Última_Sequência + 1
Where Filial = @Filial
select @retorno = última_Sequência FRom Parametros_Filial Where Filial = @Filial
commit transaction
GO
Atenciosamente
Silvio Guedes
utilizei esta rotina para resolver o meu problema, esperoi que lhe ajude.
CREATE PROCEDURE Gera_SEQ
@Filial tinyint,
@Retorno Integer Output
as
begin transaction
Update PArametros_Filial with (tablockx)
Set Última_Sequência = Última_Sequência + 1
Where Filial = @Filial
select @retorno = última_Sequência FRom Parametros_Filial Where Filial = @Filial
commit transaction
GO
Atenciosamente
Silvio Guedes
GOSTEI 0
Tarcisiojr
07/06/2004
ola amigo seguinte eu ja tive um problema parecido eu precisava guardar em 2 tabelas, a 1a era informacoes do pedido de venda e a tabela filha os itens da venda, no caso a 1a tabela uma um auto increment so q eu precisava saber q numero o registro tinha ganhado no campo ID pra eu cadastrar na tabela filha o numero do ID como ligacao de produtos a venda entao o q eu fiz, criei um campo com nome IP_CLIENTE entao eu cadastrava na 1a tabela so ip e depois dava um select procurando o ultimo registro com o ip da minha maquina no BD o ultimo obvio q era o q eu acabara da cadastrar ai era so pegar o numero gerado e alterar o resto dos campos e cadastrar nas tabelas filhas o ID retornado no select, bem foi assim q eu resolvi o meu nao sei se da pra vc tirar uma ideia disso....
GOSTEI 0
Alanvieceli
07/06/2004
eu uso igual ao [color=green:b259acc8e4]Xisto[/color:b259acc8e4], uso uma TABELA DE SISTEMA que armazena todos os ultimos códigos, depois só os inremento e atualizo a TABELA DE SITEMA...
barbadam, não da erro.....pelo menos até agora..
[]´s
:twisted:
barbadam, não da erro.....pelo menos até agora..
[]´s
:twisted:
GOSTEI 0