Sobre Mestre-Detalhe com ClientDataSet
Pessoal criei um SQLDataSet com a pesquisa e outro com a pesquisa sendo que esse segundo busca esse campo IdPai no primeiro (pois liguei a propriedade DataSource do segundo SQLDataSet no DataSource do primeiro) criei um DataSetProviter e conectei ao primeiro SQLDtSte liguei um ClientDataSet no DataSetProvider, pois bem qdo adiciono todos os campo no ClientDatSet ele traz um campo ´extra´ ClntDtStAlunosSQLDtStAlunosPai qeu eu ligo na propriedade DataSetField de um segundo ClientDataSet criando um Mestre-Detalhe, agora quero saber como forçar qdo eu der um insert no Mestre ele automaticamente Inserta o Detalhe (ou qualquer outra manipulação inclusive o ApplyUpdates)... achava que era automática mas não está no meu caso...
select * from ALUNOS where IdAluno = :IdAluno
select * from ALUNOSRESPONSAVEIS where IdResponsavel= :IdPai
Bruno Belchior
Curtidas 0
Respostas
Kotho
24/03/2005
Bom... vamos por partes...
primeiro a boa notícia... o ApplyUpdates é automático para o Detalhe...
agora a inserção tem que trabalhar um pouquinho... eu faço assim: no evento AfterInserto do Detalhe, eu atribuo o(s) campo(s) que faz(em) relacionamento com o Mestre... isso fará com que, somente os dados específicos do Detalhe precisem ser digitado pelo usuário.
Espero ter ajudado.
primeiro a boa notícia... o ApplyUpdates é automático para o Detalhe...
agora a inserção tem que trabalhar um pouquinho... eu faço assim: no evento AfterInserto do Detalhe, eu atribuo o(s) campo(s) que faz(em) relacionamento com o Mestre... isso fará com que, somente os dados específicos do Detalhe precisem ser digitado pelo usuário.
Espero ter ajudado.
GOSTEI 0
Bruno Belchior
24/03/2005
e como eu faria para qdo eu atualizar o campo relacionado da tabela detalhe os dados do mestre se autofiltrarem... exemplo: Tenho uma tabela alunos que tem três relacionamentos com outra tabela (mestre) idpai, idmae e idresponsavel e na tabela mestre esses três campo se relacionam com IdResponsavel, ai quero que qdo atualizar no Cliente os campos idpai, meus campos ligados no metre (Pai) se atualizem com o id que passei no aluno...
GOSTEI 0
Kotho
24/03/2005
me desculpe bruno, mas ficou um pouco confuso... por exemplo, não entendi quando você disse:
como é tua tela de cadastro (é com DBGrid??) ??
coloca pra gente o layout das tabelas... enfim, nos dê um pouco mais de detalhes...
obrigado e desculpe qualquer coisa...
e na tabela mestre esses três campo se relacionam com IdResponsavel
como é tua tela de cadastro (é com DBGrid??) ??
coloca pra gente o layout das tabelas... enfim, nos dê um pouco mais de detalhes...
obrigado e desculpe qualquer coisa...
GOSTEI 0
Bruno Belchior
24/03/2005
é o seguinte tenho a tabela
e esta outra onde os campos IdPai, IdMae e IdResponsavel se relacionam com registros distintos da tabela AlunosResponsaveis, quando monto o ClientDataSetAlunos com a consulta e os Clns´s que comportam pai, mãe e responsavel (três ClientsDataSets só que na mesma tabela) ligados a três DataSetField que controlam os mesmos... pois bem qdo posiciono em um aluno, nos Client´s de pai, mãe e responsável estarão setados nos campos que tem índices iguais ao que estão contidos no registro de alunos nos campos idpai, idmae e idresponsavel, a minha dúvida é como trocar o índice por exemplo no campo IdPai do ClientDataSet Alunos e o ClientDataSetPai automaticamente pular para o registro correspondente...
AlunosResponsaveis -------------------------------- IdResponsavel Nome Endereco ... Bairro
e esta outra
Alunos ------------------- IdAluno IdPai IdMae IdResponsavel Nome Endereco ... Bairro
select * from ALUNOS where IdAluno = :IdAluno
GOSTEI 0
Kotho
24/03/2005
Ok... no meu entendimento, a sua tabela Mestre é Aluno, e consequentemente a Detalhe será AlunoResponsaveis... me parece que você estava tentando fazer o contrário... se for isso, realmente fica muito difícil!
Só que, o complicador, neste caso, é o fato de terem tres campos que se relacionam com um... porém eu acredito não ser difícil resolver... Apesar de não ter nada parecido aqui, se você fizer o SELECT do AlunoResponsaveis, utilizando três UNION´s, sendo que cada um se relacionaria com um campo da tabela, vai funcionar (você poderia utilizar OR, só que ele pode quebrar a busca pelo índice), e sempre que alterar o código do responsável em Alunos, será atualizado (automáticamente) o AlunoResponsáveis.
Se não entendeu, avisa...
Só que, o complicador, neste caso, é o fato de terem tres campos que se relacionam com um... porém eu acredito não ser difícil resolver... Apesar de não ter nada parecido aqui, se você fizer o SELECT do AlunoResponsaveis, utilizando três UNION´s, sendo que cada um se relacionaria com um campo da tabela, vai funcionar (você poderia utilizar OR, só que ele pode quebrar a busca pelo índice), e sempre que alterar o código do responsável em Alunos, será atualizado (automáticamente) o AlunoResponsáveis.
Se não entendeu, avisa...
GOSTEI 0