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
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
Curtir tópico
+ 0
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.
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
Responder
Clique aqui para fazer login e interagir na Comunidade :)