Inserir registro com Master/Detail
Pessoal,
Fiz várias pesquisas aqui no forum e ainda estou com duvidas. O problema é o seguinte:
Estou trabalhando com DBXpress e master/detail, sem grandes problemas, faço os relacionamentos dos cds e tudo funciona bem.
Quero incluir um novo registro nesta estrutura, pelo que pesquisei aqui, a solução que encontrei foi atraves de um generator, onde rodaria uma rotina (sp) que me retornaria o codigo desta tabela master (pk), antes de gravar, inseriria este codigo no cds master e depois executando o applyupdate.
Minha duvida, o clientdataset não consegue retornar este valor automaticamente? Imaginei algo desta forma:
if cds_master.applyupdates(0) = 0 then
//neste momento ja teria a chave do registro master
if cds_detail.applyupdates(0) = 0 then
Showmessage(´registro gravado com sucesso´);
Assim não precisaria executar um store procedure para buscar a chave da tabela master antes de mandar gravar no banco.
Isto é possível? Ou estou viajando.
Abraços
Rodolfo
Fiz várias pesquisas aqui no forum e ainda estou com duvidas. O problema é o seguinte:
Estou trabalhando com DBXpress e master/detail, sem grandes problemas, faço os relacionamentos dos cds e tudo funciona bem.
Quero incluir um novo registro nesta estrutura, pelo que pesquisei aqui, a solução que encontrei foi atraves de um generator, onde rodaria uma rotina (sp) que me retornaria o codigo desta tabela master (pk), antes de gravar, inseriria este codigo no cds master e depois executando o applyupdate.
Minha duvida, o clientdataset não consegue retornar este valor automaticamente? Imaginei algo desta forma:
if cds_master.applyupdates(0) = 0 then
//neste momento ja teria a chave do registro master
if cds_detail.applyupdates(0) = 0 then
Showmessage(´registro gravado com sucesso´);
Assim não precisaria executar um store procedure para buscar a chave da tabela master antes de mandar gravar no banco.
Isto é possível? Ou estou viajando.
Abraços
Rodolfo
Rodolfo.pirolo
Curtidas 0
Respostas
Mmoreira
18/09/2007
Cara posso estar falando uma grande besteira mas ate onde sei isso que voce esta querendo fazer nao é possivel pois o valor desta chave primaria do cds master nao foi enviada para o mesmo. O que eu faco neste caso é no AffterInsert do CdsMaster é uma rodar uma funcao que acessa um generator no Banco de Dados e me retorna o novo codigo unico .. ai pronto no CdsFilho este codigo ja é informado.
No meu caso eu trabalho com Firebird e funciona perfeitamente.
Qualquer duvida posta ai.
Abs!
No meu caso eu trabalho com Firebird e funciona perfeitamente.
Qualquer duvida posta ai.
Abs!
GOSTEI 0
Raserafim
18/09/2007
já que vc utilia o ClientDataSet, então tudo fica mais fácil.
eu faço da seguinte forma.
antes de salvar eu pego o próimo código disponível, então coloco no registro Master e em todos os registros Detalhe
dá uma olhada neste post que vai te ajudar:
[url]http://forum.devmedia.com.br/viewtopic.php?t=89900&highlight=[/url]
eu faço da seguinte forma.
antes de salvar eu pego o próimo código disponível, então coloco no registro Master e em todos os registros Detalhe
dá uma olhada neste post que vai te ajudar:
[url]http://forum.devmedia.com.br/viewtopic.php?t=89900&highlight=[/url]
GOSTEI 0
Rodolfo.pirolo
18/09/2007
Mas era exatamente isto que não queria fazer.
Não gostaria de ter que rodar uma rotina antes de mandar gravar o cds_master, pensei que o cds tivesse algum evento que retorne o registro que foi gravado.
Então, vamos fazer o que todo mundo faz.
Obrigado pelas respostas.
Abraços
Rodolfo
Não gostaria de ter que rodar uma rotina antes de mandar gravar o cds_master, pensei que o cds tivesse algum evento que retorne o registro que foi gravado.
Então, vamos fazer o que todo mundo faz.
Obrigado pelas respostas.
Abraços
Rodolfo
GOSTEI 0
Raserafim
18/09/2007
rodolfo, realmente seria interessante se tivesse uma forma de não fazser isso e o ClientDataSet retornasse isso.
eu não conheço.
mas sugiro que tente mais um pouco e nos avise se encontrar alguma outra forma.
eu não conheço.
mas sugiro que tente mais um pouco e nos avise se encontrar alguma outra forma.
GOSTEI 0