Fórum Qual a melhor maneira de criar um número sequencial na rede? #236488

07/06/2004

0

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?


Phfdelphi

Phfdelphi

Responder

Posts

07/06/2004

Franbrito

Porque vc nao coloca no evento beforepost da tabela. Utilizando select Max


Responder

Gostei + 0

07/06/2004

Xisto

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.


Responder

Gostei + 0

07/06/2004

Silviogs

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


Responder

Gostei + 0

08/06/2004

Tarcisiojr

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....


Responder

Gostei + 0

08/06/2004

Alanvieceli

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:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar