[firebase-br] RES: RES: Invalid Cursor

Luis luisfirevb em gmail.com
Seg Ago 31 08:19:09 -03 2009


Só para seu conhecimento, o primeiro software que fiz e ainda é meu carro
chefe é um sistema de normas técnicas onde a rastreabilidade é primordial,
então a sequência é um indicador de que não houve exclusão de registros,
por isso meu ID não é autonumeração, mas sim seqüencial real.

Como o sistema é multiusuário, claro que há verificação de erros para esse
caso, então se soma + 1 e tenta novamente até conseguir. Claro que
dificilmente terá duas ou três tentativas seguidas, mesmo porque o sistema
não é uma frente de caixa.

Obrigado.
Luis

-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Sérgio Alexandre Gianezini
Enviada em: domingo, 30 de agosto de 2009 19:10
Para: lista em firebase.com.br
Assunto: Re: [firebase-br] RES: Invalid Cursor

"Luis" <luisfirevb em gmail.com> escreveu na mensagem
news:002301ca298d$301f36c0$905da440$@com...
Sérgio mas quando não pode haver quebra seqüencial na numeração, não digo na
ID da tabela, mas no código seqüencial de um tipo de registro que deve ser
sempre 1,2,3,4 etc... e se abordar uma inclusão, não se perca esse número
como acontece no gererator?

O único caso desse, que já vi acontecer, é em relação ao NSU catarinense,
nesse caso, a tabela é preenchida ANTES com um range de números, e quando
ela está chegando no limite, é re-preenchida com mais um range...
Acho extremamente dificil ter uma necessidade de numeros que não pode
quebrar ordem, tenho mais de 12 anos trabalhando com software comercial, em
áreas diversas, e só vi o caso do NSU mesmo... que já tem solução,
diga-se...

Max() não funciona corretamente se a tabela recebe inclusões por mais de um
usuário, vai dar chave duplicada mais cedo ou mais tarde... mas pode tentar
via forceps, pega max, tenta salvar, se deu erro, pega max, tenta salvar...

Pseudo codigo pascal:

Repeat
  FlagOK := True;
  TabDado.Edit;
  TabDadoCHAVE.AsInteger = PegaMax('Tabela','Chave') + 1;
  TabDado.Post;
  Try
    TabDado.ApplyUpdate;
   Except
     FlagOK := False; // Verificar a mensagem, se é chave duplicada...
  End;
Until FlagOK; 









Mais detalhes sobre a lista de discussão lista