Gravação com mestredetralhe?
Boa tarde a todos, espero que vcs possam me ajudar, acredito ser simples, só não sei como fazer, bom vamos lá..
uso Dbexpress com Firebird estou fazendo um mestredetralhe, por exemplo:
Tabela 1 (Pedido)
NumPedido (*) (Generator)
CodUsuario
NomeUsuario
Tabela 2(ItensPedido)
NumPedido (*)
CodProduto(*)
Qde
Estou trabalhando em rede, o generator gera automaticamente o meu numero de pedido quando mando gravar, o problema é como vou inserir no meu grid os itens de pedido se ainda não tenho o numero do pedido que faz chave composta com o codproduto??
Quando tento inserir dá erro!!
Espero que alguem possa me ajudar e desde já, muito obrigado.
Jelves@bol.com.br
uso Dbexpress com Firebird estou fazendo um mestredetralhe, por exemplo:
Tabela 1 (Pedido)
NumPedido (*) (Generator)
CodUsuario
NomeUsuario
Tabela 2(ItensPedido)
NumPedido (*)
CodProduto(*)
Qde
Estou trabalhando em rede, o generator gera automaticamente o meu numero de pedido quando mando gravar, o problema é como vou inserir no meu grid os itens de pedido se ainda não tenho o numero do pedido que faz chave composta com o codproduto??
Quando tento inserir dá erro!!
Espero que alguem possa me ajudar e desde já, muito obrigado.
Jelves@bol.com.br
Jelves
Curtidas 0
Respostas
Jelves
19/11/2003
GOSTEI 0
Jelves
19/11/2003
sobe
GOSTEI 0
Jelves
19/11/2003
Alguém pode me dar uma dica, ou um exemplo, qualquer coisa...
Jelves
Jelves
GOSTEI 0
Alexrol
19/11/2003
Ola
Bom neste caso acho que vc não deveria usar um generator,pois o generator cria o cidgo quando vc manda grava-lo e não antes.
Mas antes de uma olhada nisso.
http://www.activedelphi.com.br/modules.php?op=modload&name=News&file=article&sid=58
Bom neste caso acho que vc não deveria usar um generator,pois o generator cria o cidgo quando vc manda grava-lo e não antes.
Mas antes de uma olhada nisso.
http://www.activedelphi.com.br/modules.php?op=modload&name=News&file=article&sid=58
GOSTEI 0
Lordglacius
19/11/2003
Para que funcione do jeito que vc quer, primeiramente vc deve gravar a ´capa´ do pedido, pegar o valor do seu código para depois começar a inserir os itens.
Uma FK nos itens ajudaria bastante, mas existe uma maneira mais simples de fazer isso:
Trabalhe com uma tabela temporária (ClientDataSet) residente na memória e trabalhe com os itens normalmente. Após terminar o lançamento do pedido, com o método ApplyUpdates do ClientDataSet, serão feitos todos os statements SQL necessários para a atualização do Pedido em si e seus Itens. Procure na internet mais sobre o funcionamento de ClientDataSets como NestedDataSets (conhecido como Mestre-detalhe/Um para muitos)
Caso tenha interesse eu colecionei uma apostila da BDN (borland developer network) baseada em uma série de artigos sobre como otimizar este tipo de tarefa utilizando ClientDataSet´s.
[]´s
Uma FK nos itens ajudaria bastante, mas existe uma maneira mais simples de fazer isso:
Trabalhe com uma tabela temporária (ClientDataSet) residente na memória e trabalhe com os itens normalmente. Após terminar o lançamento do pedido, com o método ApplyUpdates do ClientDataSet, serão feitos todos os statements SQL necessários para a atualização do Pedido em si e seus Itens. Procure na internet mais sobre o funcionamento de ClientDataSets como NestedDataSets (conhecido como Mestre-detalhe/Um para muitos)
Caso tenha interesse eu colecionei uma apostila da BDN (borland developer network) baseada em uma série de artigos sobre como otimizar este tipo de tarefa utilizando ClientDataSet´s.
[]´s
GOSTEI 0
Jelves
19/11/2003
Olá Eric, tudo bem?! obrigado pela sua resposta, quanto a apostila eu tenho interesse sim, se vc puder me enviar ficarei muito grato.
Bom se eu gravar a capa, pelo que entendi os dados da tabela pedidos, ai realmente já terei o código para lançar nas tabela de itens, porém cairei no mesmo problema, se derrepente quando o usuário for digitar os itens, ele pega e desiste daquele pedido?!, então perderei o sequencial daquele pedido, e eu gostaria de poder gravar os pedidos em sequencial, no caso de um usuário excluir o pedido, eu gravo em uma tabela de auditoria o nome do usuario, a data e o numero do pedido.
Quanto a tabela temporaria eu não sei como usa-la, eu uso SQLDATASET e ClientDataSet, o meu ClientDataSet é ligado no Datasetprovider, que é ligado no SQLDATASET, com isto ele não deixa eu inserir os itens no meu grid, pois a minha tabela de itens tem uma chave composta de numpedido e codproduto, eu preciso do numero do pedido para isto. Como eu disse sobre a tabela temporária eu não sei usa-la, bem que queria saber como fazer, pois veja bem se eu preencher a minha tabela pedido e minha tabela itens de pedido sem o código do pedido e quando eu antes de mandar gravar no banco ele pegaria e faria uma varredura nas duas tabelas colocando o numpedido na tabela de pedido e numpedido na tabela de itens.
Acho que ficou mais ou menos explicado!
Muito obrigado
Jelves
Bom se eu gravar a capa, pelo que entendi os dados da tabela pedidos, ai realmente já terei o código para lançar nas tabela de itens, porém cairei no mesmo problema, se derrepente quando o usuário for digitar os itens, ele pega e desiste daquele pedido?!, então perderei o sequencial daquele pedido, e eu gostaria de poder gravar os pedidos em sequencial, no caso de um usuário excluir o pedido, eu gravo em uma tabela de auditoria o nome do usuario, a data e o numero do pedido.
Quanto a tabela temporaria eu não sei como usa-la, eu uso SQLDATASET e ClientDataSet, o meu ClientDataSet é ligado no Datasetprovider, que é ligado no SQLDATASET, com isto ele não deixa eu inserir os itens no meu grid, pois a minha tabela de itens tem uma chave composta de numpedido e codproduto, eu preciso do numero do pedido para isto. Como eu disse sobre a tabela temporária eu não sei usa-la, bem que queria saber como fazer, pois veja bem se eu preencher a minha tabela pedido e minha tabela itens de pedido sem o código do pedido e quando eu antes de mandar gravar no banco ele pegaria e faria uma varredura nas duas tabelas colocando o numpedido na tabela de pedido e numpedido na tabela de itens.
Acho que ficou mais ou menos explicado!
Muito obrigado
Jelves
GOSTEI 0
Lordglacius
19/11/2003
Ola amigo!
Quanto à vc gravar o número sequencial certinho na tabela, não se preocupe.
Como um amigo meu DBA de Oracle diz: ´PK e ID de tabela são coisas pra
ficarem cheias de buracos mesmo. Pelo menos assim eu sei que o banco está
funcionando direito.´ hehehehehe.=)
Nisso eu concordo com ele. Não importa se sua tabela vai ficar cheia de
buracos. O que importa que o próprio banco controle este tipo de tarefa,
dando mais confiança à sua aplicação rodando em rede. Se vc decidir
controlar isso na ´unha´, vai ter mais problemas do que apenas dar
manutenção no banco, pode acreditar.
A apostila já te mandei em PVT.
[]´s
Quanto à vc gravar o número sequencial certinho na tabela, não se preocupe.
Como um amigo meu DBA de Oracle diz: ´PK e ID de tabela são coisas pra
ficarem cheias de buracos mesmo. Pelo menos assim eu sei que o banco está
funcionando direito.´ hehehehehe.=)
Nisso eu concordo com ele. Não importa se sua tabela vai ficar cheia de
buracos. O que importa que o próprio banco controle este tipo de tarefa,
dando mais confiança à sua aplicação rodando em rede. Se vc decidir
controlar isso na ´unha´, vai ter mais problemas do que apenas dar
manutenção no banco, pode acreditar.
A apostila já te mandei em PVT.
[]´s
GOSTEI 0