Ir para conteúdo
Fórum Script Brasil
  • 0

autoinc firebird em rede - não funciona


Felipee

Pergunta

Galera,

vou procurar detalhar o maximo.

vejo que o pessoal acaba rodando em circulo neste assunto. li outros post e percebo que acaba ficando na mesmo.

se algume passou por isso e puder me ajudar agradeceria imensamente.

tenho tres tabelas em rede relacionadas a cadastro de nf:

tab1-cabecalho

tab2-itens nf

tab3-parcelas nf

temos que ter o mesmo id para as tres tabelas para manter a integridade.

o q faço:

1-dou um append em todas realizando os respectivos cadastros;

2-num botao de confirmacao para gravar os lancamento da nf faço:

tab1.edit;

tab1.filedbyname('codtab1').value:=geracod(tab1, codtab1);

tab1.post;

geracod - possui um select max

tab2.first;

while not tab2.eof do

begin

tab2.edit;

tab2.filedbyname('codtab2').value:=tab1.filedbyname('codtab1').value;

tab2.post;

end;

tab3.first;

while not tab2.eof do

begin

tab3.edit;

tab3.filedbyname('codtab3').value:=tab1.filedbyname('codtab1').value;

tab3.post;

end;

//inicia transacao para gravar os registros

TudoOK:= False;

Transacao.TransactionID:= 1;

Transacao.IsolationLevel:= xilReadCommitted;

dm.conexao.StartTransaction(Transacao);

//grava os registros

if tab1.ApplyUpdates(0) = 0 then

if tab2.ApplyUpdates(0) = 0 then

if tab3.ApplyUpdates(0) = 0 then

TudoOK:= True;

if TudoOK then

begin

dm.conexao.Commit(Transacao);

baixaestoque;

end

else

begin

dm.conexao.Rollback(Transacao);

alerta('Atenção! Não foi possível concretizar esta venda. Por favor confirme novamente ou tente mais tarde. Obrigado!');

abort;

end;

o problema que ocorre é que a maquina1 gera o mesmo codigo no mesmo segundo em que esta transacao está sendo realizada pela maquina2 antes dela sofrer o commit e quando a maquina2 finaliza seu commit, ela altera o registro da venda da maquina1 e sobrescreve os registros, ou seja a venda da maquina1 é perdida.

infelizmente isso já ocorreu 2 vezes....

antes utilizava o trigger mas ele não gera id sequencialmente. ele gera um codigo que mesmo que não tenha sido gravado, não é gerado mais. acho estao entendedo o q estou falando.

a emissao de nf tem que ser sequencial.

uso d7, firebird 1.5 e dbexpress.

agradeço qualquer ajuda e aguardo.

felipee.

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
o problema que ocorre é que a maquina1 gera o mesmo codigo no mesmo segundo em que esta transacao está sendo realizada pela maquina2 antes dela sofrer o commit e quando a maquina2 finaliza seu commit, ela altera o registro da venda da maquina1 e sobrescreve os registros, ou seja a venda da maquina1 é perdida.

A solução definitiva é ... assim que o codigo é gerado ele deve ser gravado na tabela (mesmo que nada seja digitado ) .... exemplo Cod := 234 .... se um segundo usuario fizer tambem uma inclusão , o programa verá que já existe o codigo 234 e adicionará + 1 a este codigo e tambem gravará na tabela ... exemplo Cod := 235 (mesmo que nada seja digitado )

se o usuario 1 clicar no OK e formalizar o post e o applayupdates, então somente estará confirmando a gravação final do registro... entretanto se ele clicar no botão Cancelar, então voce faz o programa procurar este codigo e deleta-lo

o mesmo acontece com o usuario 2.

desta maneira voce não acontecerá de sobrescrever os registros, pois cada usuario estará usando um codigo unico.

lembrando que desta maneira temos prós e contras

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...