SELECT 0
USE n:\banco\sequencial_real
SET ORDER TO chave_p
FOR a = 1 TO 500
GO BOTTOM
IF RECCOUNT() != 0
GO BOTTOM
trv = RLOCK(STR(RECNO()),"sequencial_real")
DO WHILE !trv
GO BOTTOM
trv = FLOCK(STR(RECNO()),"sequencial_real")
LOOP
ENDDO
m.sequ_ban = sequ_ban + 1
ELSE
m.sequ_ban = 1
ENDIF
INSERT INTO sequencial_real FROM MEMVAR
UNLOCK IN sequencial_real
ENDFOR
Tenho a seguinte rotina acima, onde por exemplo várias máquinas na epoca de matrícula emitem um boleto ao mesmo tempo de vários alunos gerando um numero sequencial para cada um.
Então ocorre que o sequencial é único e para não haver duplicidade de sequenciais agente trava o ultimo registro da tabela, soma-se um a ele e grava ele na tabela e depois desbloqueia o registro, e mesmo assim ele está ocorrendo duplicidade na minha tabela quando 2 ou mais máquinas tentam gravar um sequencial ao mesmo tempo.
Gostária de saber se alguem tem alguma rotina melhor que está ou alguma solução para o meu problema.
Atenciosamente,
Thiago Oliveira Ferraz
Analista de Sistemas
Universidade de Uberaba (UNIUBE) - Campus Aeroporto
Tel: 0xx(34)3319-8906
Cel: 0xx(34)9136-1260