[firebase-br] RES: Problema com Mestre/Detalhe e Transações. Complicado!

Enio Marconcini -:- www.Enio.Pro.Br -:- eniorm em gmail.com
Seg Jun 16 08:35:12 -03 2008


bom eu realmente uso o CachedUpdates setado para True, e ApplyUpdates/Commit
qdo tenho que gravar fisicamente ou CancelUpdates/RollBack para abortar,

quanto ao ID não é preciso pois eu setei meu DataSet para gerar o ID
automaticamente no OnInsert, ou seja, já tenho o valor sequencial.

Tudo é feito como o recomendado, o que foi o que eu sempre fiz,

acontece que o que eu mais precisava era exibir num dbgrid os registros que
já foram inseridos, antes do commit,

abraços

2008/6/13 Jose Aparecido da Silva <joseasilva em bol.com.br>:

> Lembre-se que por ser CachedUpdates = True os dados não são gravados no
> banco após o post. É preciso dar o ApplyUpdates para que os dados sejam
> enviados ao banco. Aí você vai poder usar a sua lógica e da mesma maneira
> se
> alguma coisa der errado é só dar um rollback. Use todos numa mesma
> transação
> que não tem erro. Para ligar as tabelas logo no inicio adquira o código que
> vai unir os dados através de generators. Eu faço desse modo e tenho sido
> muito feliz. Exemplo em Delphi e IBX que e igual a MDO:
>
> qrCodigo.Sql.Clear;
> qrCodigo.Sql.Add('select gen_id(MeuGenerator, 1) as Codigo from
> RDB$DATABASE
> ');
> qrCodigo.Open;
>
> Código:= qrCodigo.FieldByName('Codigo').asInteger ;
>
> Aí utilizo o Código retornado tendo a certeza que não se repetirá visto que
> o generator independe de transação.
>
> [ ]'s
> José Aparecido da Silva
>
>
>
> -----Mensagem original-----
> De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br]
> Em
> nome de Enio Marconcini -:- www.Enio.Pro.Br -:-
> Enviada em: sexta-feira, 13 de junho de 2008 11:00
> Para: FireBase
> Assunto: [firebase-br] Problema com Mestre/Detalhe e Transações.
> Complicado!
>
> Saudações amigos,
> estou com um problema sério, em que depois de muita pesquisa no Google,
> listas e foruns ainda não consegui resolver, só me resta pedir pra St.
> Expedito o Santo das causas impossíveis me ajudar!
>
> Cadastro Mestre/Detalhe
>
> Na teoria não há mistério. O problema vem na impelentação.
> Atualmente eu tenho feito assim: gravo primeiro (commit) no registro
> mestre,
> gravo os detalhes (commit) e exibo-os num dbgrid dentro do form de cadastro
> do registro mestre.
> O inconveniente é que pode haver sido cadastrado mestres incompletos, sem
> registros detalhes.
>
> Estou usando MDO (semelhante ao IBX)
>
> Minha idéia é ter tudo amarrado num mesmo MDOTransaction, se eu commitar,
> grava tudo, do contrário abandona tudo... ATÉ AÍ TUDO BEM: o problema é ir
> inserindo registros detalhe e exibir na grade, antes de commitar a
> transação.
>
> Minhas tabelas:
> Produtos -> Acessorios <- Itens
>
> Onde cada Produto (mestre) possui N acessórios, e os Itens são os
> acessórios
> que compõem o Produto final
> Assim, na tabela acessório contém a PK e as FK´s de Produtos e Items
> (espero que fui claro)
>
> tentei amarrar tudo ao mesmo MDOTransaction e proceder assim:
>
> *StartTransaction;*
>
> *Produtos.Insert;*
> // preenchido os dados do produto
> *Produtos.Post;*
>
> // para cada item inserido
> *Detalhe.Insert;*
> // adiciono o PK de Itens
> // adiciono a PK de Produtos
> *Detalhe.Post;*
>
> *QueryExibeItens.Close;
> QueryExibeItens.Open;*
> // aqui deveria ser exibido os itens adicionados num DBGrid
> // possui um SQL para trazer os dados dos itens adicionados, e relacionados
> com a tabela detalhe
> // no entanto não aparece nada.
>
> os DataSet´s foram setados para CachedUpdates True
>
> ao término, se for Commit:
> *Produtos.ApplyUpdates;
> Detalhe.ApplyUpdates;
> Transação.Commit;*
>
> senão:
> *Detalhes.CancelUpdates;
> Produtos.CancelUpdates;
> Transacao.Rollback;*
>
> até uma aplicação de exemplo, seguindo as dicas que encontrei, eu
> implementei e não teve acordo, quem quiser dar uma olhada
> ftp.santafedosul.sp.gov.br/publico/Teste_MasterDetail.rar
>
> se alguém tiver alguma dica me fala.
>
> abraços
>
> --
> M.I.C.T.M.R.
> ENIO RODRIGO MARCONCINI
> ...: www.santafedosul.sp.gov.br
> ....................: www.enio.pro.br
> ......: gtalk: eniorm em gmail.com
> .......................: skype: eniorm
> Linux User................. #433647
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 
M.I.C.T.M.R.
ENIO RODRIGO MARCONCINI
...: www.santafedosul.sp.gov.br
....................: www.enio.pro.br
......: gtalk: eniorm em gmail.com
.......................: skype: eniorm
Linux User................. #433647



Mais detalhes sobre a lista de discussão lista