Maneju 0 Denunciar post Postado Janeiro 25, 2011 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
Valdery 0 Denunciar post Postado Janeiro 26, 2011 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
Maneju 0 Denunciar post Postado Janeiro 27, 2011 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