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