Fórum Sobre Mestre-Detalhe com ClientDataSet #273935

24/03/2005

0

Pessoal criei um SQLDataSet com a pesquisa
select * from ALUNOS
where IdAluno = :IdAluno
e outro com a pesquisa
select * from  ALUNOSRESPONSAVEIS
where IdResponsavel= :IdPai
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...


Bruno Belchior

Bruno Belchior

Responder

Posts

24/03/2005

Kotho

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.


Responder

Gostei + 0

24/03/2005

Bruno Belchior

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...


Responder

Gostei + 0

24/03/2005

Kotho

me desculpe bruno, mas ficou um pouco confuso... por exemplo, não entendi quando você disse:

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...


Responder

Gostei + 0

24/03/2005

Bruno Belchior

é o seguinte tenho a tabela
AlunosResponsaveis
--------------------------------
IdResponsavel
Nome
Endereco
...
Bairro


e esta outra
Alunos
-------------------
IdAluno
IdPai
IdMae
IdResponsavel
Nome
Endereco
...
Bairro
onde os campos IdPai, IdMae e IdResponsavel se relacionam com registros distintos da tabela AlunosResponsaveis, quando monto o ClientDataSetAlunos com a consulta
select * from ALUNOS 
where IdAluno = :IdAluno
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...


Responder

Gostei + 0

24/03/2005

Kotho

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...


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar