Ajuda a manipular dados no Dbgrid.

01/10/2021

0

Boa tarde Pessoal, gostaria de uma ajuda.
Tenho essa duas tabela LGPD_DADOS_PESSOAL e LGPD_AMAZENAMENTO_DADOS, ela está ligada como Fk de Cod_dadosPesssoal, nisso tenho duas grid uma faz um select full que traz todos os registro e nessa outra grid gostaria que mostrasse o que tem na tabela de Armazenamento com o Cod_dadosPessoal, nisso fazendo um select apartir do campo que está selecionando na grid, ai se eu muda ele também muda o deixa deixa tipo pai e filho. Alguém poderia me ajudar a fazer esse desafio
Winicius

Winicius

Responder

Post mais votado

01/10/2021

você pode fazer isso via datasetprovider e clientdataset.

vou dar a dica com base no FireDAC (você não disse quais componentes de acesso a dados está utilizando)

faça assim:

// ************************************************************
// cria o relacionamento mestre-detalhe
// ************************************************************
FDQueryPrincipal.SQL.Text := 'SELECT * FROM TABELAPRINCIPAL'
DatasourcePrincipal.Dataset := FDQueryPrincipal

FDQueryDetalhe.SQL.Text := 'SELECT * FROM TABELADETALHE'
FDQueryDetalhe.MasterSource := DatasourcePrincipal
FDQueryDetalhe.MasterField := 'ID_PRINCIPAL' // campo da tabela principal
FDQueryDetalhe.IndexFieldNames := 'FK_PRINCIPAL' // campo da tabela detalhe onde está gravado o conteúdo da tabela principal
DatasourceDetalhe.Dataset := FDQueryDetalhe

DatasetProviderPrincipal.Dataset := FDQueryPrincipal

// ************************************************************
// configura os clientdatasets que irão apresentar os dados
// ************************************************************
ClientDatasetPrincipal.DatasetProvider := DatasetProviderPrincipal (só isto. não precisa atribuir nenhuma outra propriedade)

Dê um duplo-clique no ClientDatasetPrincipal e, na telinha que vai abrir, clique com o botão direito e selecione "Add all fields" (ou tecle CTRL + F).
Você verá que no final da lista haverá um campo chamado FDQueryDetalhe. Esse campo é o resultset com os detalhes do registro que estiver posicionado na tabela principal.
Agora precisamos de um clientdataset para receber esse resultset.

ClientDatasetDetalhe.DatasetField := ClientDatasetPrincipalFDQueryDetalhe (só isto. não precisa atribuir nenhuma outra propriedade)

Dessa forma a ligação estará completa.

Agora faltam os datasources que serão ligados às grades para mostrar os dados:

DatasourceGridPrincipal.Dataset := ClientDatasetPrincipal
DatasourceGridDetalhe.Dataset := ClientDatasetDetalhe

Agora ligue a grade principal ao datasource pertinente:
DBGridPrincipal.Datasource := DatasourceGridPrincipal

E faça o mesmo com a grade detalhe:
DBGridDetalhe.Datasource := DatasourceGridDetalhe

Se os componentes FDquery e/ou ClientDataset estiverem ativos (Active := True), desative.

Em tempo de execução abra somente o ClientDatasetPrincipal (não precisa fazer nada com os FDQuery).

Navegue na grade principal. Você verá que os registros da grade detalhe irão acompanhar a movimentação da grade principal.






Emerson Nascimento

Emerson Nascimento
Responder

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

Aceitar