[firebase-br] RES: Loucura => Mestre/Detalhe & CachedUpdates C/MDO vIB
Jose Aparecido da Silva
joseasilva em bol.com.br
Qui Jun 25 11:38:05 -03 2009
Uso IBX, Delphi 7, IBX e FB 2.1
Eu faço assim:
1. Inicio a tabela master (PEDIDOS)
2. Seto o ID da tabela Master (PEDIDOS) através de uma função que eu criei
que simplesmente faz um select gen_id(gen_pedidos, 1) from rdb$database;
3. no onnewrecord da tabela detalhe: (PEDIDOSITENS) eu seto o id da tabela
master, no caso: IDPEDIDO = qrPedidos.FieldByname('ID').asInteger;
4. Na tabela Master sou eu que atribuo o ID da primary key.
5. Na tabela Detalhe eu defino o Campo da primary key como Requerid:= false
e seto o valor numa trigger before insert no banco
Tenho feito assim e nunca tive problemas.
Fica ai mais uma dica.
[ ]'s
Jose
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Zottis
Enviada em: quinta-feira, 25 de junho de 2009 08:26
Para: FireBase
Assunto: Re: [firebase-br] Loucura => Mestre/Detalhe & CachedUpdates C/MDO
vIB
Para contornar esse problema eu utilizo assim:
criei um campo Estado_da_Tabela na Tabela Pedidos
e nele eu coloco como "INSERINDO", no onnewrecord
e quando eu vou colocar registros na tabela de itens, eu gravo o registro da
tabela Pedidos no banco
se eu clico no botao salvar, eu mudo o campo ESTADO_DA_TABELA para
"GRAVADO",
se eu clico no botao Cancelar, eu verifico o campo ESTADO_DA_TABELA, se esta
"INSERINDO" eu deleto,
se esta "GRAVADO", eu Aplico o Cancel
assim eu consegui resolver este problema.
PS. Criei também um Trigger que deleta os pedidos que estão com o Campo
ESTADO_DA_TABELA = "INSERINDO"
se a data for menor que a data atual, para evitar de deixar passar algum
erro nos lançamentos.
espero que ajude.
Zottis(TeamFB Users)
Zottis Sistemas - 2009 Ano XII
Programação Delphi/PHP/Firebird/MySQL
"Um homem só tem o direito de olhar
a um outro de cima para baixo, quando
vai ajuda-lo a levantar-se".
Gabriel Garcia Marquez
----- Original Message -----
From: "Mário Reis" <mariodosreyx em gmail.com>
To: <lista em firebase.com.br>
Sent: Thursday, June 25, 2009 6:31 AM
Subject: [firebase-br] Loucura => Mestre/Detalhe & CachedUpdates C/MDO v IB
Bom dia,
Depois de muitos problemas a tentar por a funcionar um programinha simples
em que uso o FB2.1+MDO c/1 ficheiro Mestre(factura) e outro Detalhe(Linhas
da
Factura) com CachedUpdates e quando estava quase a desistir reparei que há
mais
gente, não muita na Net que experimenta/ou as mesmas dificuldades.
Vai daí toca a tentar IBMaster(MastApp.Drp) que vem com o Delphi7 alterando
para o Firebird em especial EdOrders.pas que tem por-de-trás o ficheiro
Mestre=>Orders e o Detalhe=>Items c/CachedUpdates=True e, no
AfterPost_do_Orders Database.ApplyUpdates([Orders,Items etc...])+
Transaction.CommitRetaining. Converti linha a linha para os componentes
da MDO e para meu espanto tb não funciona/ou.
Comecei de novo e... nada.
Isto é, os registo de Detalhe novos não são gravados.
Para meu espanto o mesmo acontece com o original usando os componentes
nativos
do Interbase, IBDatabase,IBTransaction, IBTable,IBDataSet etc...(reinstalei
de
novo e tudo como dantes, i.e., continuo sem consiguir escrever novos registo
no
detalhe mas, não dá erro nenhum. Simplesmente não escreve!?
Contrariamente, o exemplo que usa o BDE(TDataBase,TTable,TQuery etc..)
funciona
na perfeição, i.e. grava novas linhas no detalhe, pode-se desistir e faz bem
o
cancelupdates... tudo conforme esperado!
Espantoso, não é? Logo com o BDE
Já aconteceu o mesmo a mais algum de vóz.
Qualquer ajuda c/ Mestre + Detalhe & CancelUpdates=True é bem vinda.
Obrigado a todos
Mário
______________________________________________
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
Mais detalhes sobre a lista de discussão lista