Olá galera, nesta Quick Tips, falarei nesse artigo sobre Mestre/Detalhe em Delphi, é uma recurso muito interessante que temos no Delphi, simples de fazer porém no começo são várias propriedades, vários componentes, mas depois de que pegamos a prática fica bem simples.
O que seria Mestre / Detalhe?
Mestre é o registro que existe por si só, e o detalhe precisa de um mestre para existir. É o caso da chave primária e chave estrangeira, Cliente e Telefone, Cliente e Endereco, Responsavel e Aluno, entre outros. Onde temos uma lista de telefones para um cliente ou uma lista de endereço para o cliente, ou até mesmo uma lista de alunos para um responsável.
Montando o Mestre Detalhe em Delphi. Estou usando um exemplo onde temos uma entidade responsável e uma entidade Aluno, e um aluno possui um responsável, e um responsável possui 1 ou N alunos.
Vamos montar a seguinte janela, Onde:
- SDS - SqlDataSet
- SDP - DataSetProvider
- CDS - ClientDataSet
- DS - DataSorce
- SDSDetalhe
CommandText = SELECT A.IDALUNO, A.NOME, A.CPF, A.SEXO FROM ALUNO A WHERE A.IDRESPONSAVEL = :IDRESPONSAVEL
Nota: Observe que temos um parâmetro que será tratado direto pelo Delphi, então declare esse parâmetro com o mesmo nome da chave primária de sua tabela.DataSource = DSMestre_X_Detalhe
- DSMestre_X_Detalhe
DataSet = SDSMestre
- SDSMestre
CommandText = SELECT R.IDRESPONSAVEL, R.NOME, R.CPF, R.SEXO FROM RESPONSAVEL R
- DSPMestre
DataSet = SDSMestre
- CDSMestre
ProviderName = DSPMestre
Adicione todos os Fields, observe que será adicionado um DataSetField chamado SDSDetalhe, ou seja, o nome da DataSet de Detalhe, neste campo é que fazemos toda a mágica do mestre detalhe.
- CDSDetalhe
DataSetField = CDSMestreSDSDetalhe
- DSMestre
DataSet = CDSMestre
- DSDetalhe
DataSet = CDSDetalhe
- DBGridMestre
DataSource = DSMestre
Nota: Será adicionado uma coluna onde ao clicarmos termos o resultado em um Panel dos detalhes do mesmo. - DBGridDetalhe
DataSource = DSDetalhe
As configurações estão descritas passo a passo, é meio chato no começo, mas logo nos acostumamos, agora basta abrir o CDSDetalhe, e teremos o resultado.