Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Maneju

Mestre Detalhe

Recommended Posts

Olá.

 

Sei que tem vários posts sobre este assunto mas nenhum resolve o problema ou não achei o post correto.

 

Qual a melhor maneira de trabalhar com mestre detalhe? Confesso que de todo jeito que imagino sobram brechas para problemas.

 

 

exemplo hipotético da forma que trabalho:

 

 

cabeçalho do pedido. Seleciono o maior código gerado pela máquina em uso pois outras máquinas na rede podem ter inserido outros cabeçalhos de pedidos:

 

try
  ...
  ibtransaction.commit;
  ibquery1.close;
  ibquery1.sql.clear;
  ibquery1.sql.text:= 'select max(codigo) Cod from cabecalho where loja = '  + StrLoja + ' and maquina = ' + StrMaquina;
  ibquery1.open
  IntMaster:= ibquery1.fieldbyname('Cod').asinteger;
except
  IntErro:= 1
  ibtransaction.rollback;
  raise
end

 

Se não deu erro, eu vou fazer a inserção dos detalhes

if IntErro = 0 then
  begin
     try
        ...
        ibtransaction2.commit;
        showmessage('Pedido Resgistrado');
     except
        //se der pau aqui, tenho que excluir o Mestre do pedido
        //para não ficar um registro pai sem associação
        //mas e se o pau for de rede por exemplo, agora não consigo mais excluir o registro mestre
        ibtransaction2.rollback;
        raise
     end

end;

 

Isto pq eu não consigo ter tudo numa única transação pois o meu código Mestre é gerado por um generator. Teria outra saída de gerar este código mestre? Só se eu tivesse um contador separado que não fosse o proprio contador da tabela mestre mas acho que isso foge dos padrões.

Como vcs trabalham isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Amigo, você está trabalhando com 3 camadas ? por que você não utilizar select gen_id(generator,0) from rdb$database(caso seja firebird), para identificar e reservar o próximo código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola.

 

eu estava usando assim mas e se alguem na rede inserir algo na mesma tabela, ele não pode me trazer um registro que foi gravado por outra máquina?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.