Fórum Filtrando Tabela Master pela Detalhe #394585
27/01/2011
0
Quando eu pesquisar na tabela detalha pelo curso = 'INGLES' por exemplo eu quero que ele me mostre todo mundo que tem o curso ingles.
eu já tentei da um DataSet.Filter = 'CURSO = '+QuotedStr('INGLES') porem ele apenas filtra o DataSet detalhe , e não filtra o mestre;
Ronaldo Lanhellas
Curtir tópico
+ 0Posts
27/01/2011
Efraim Santana
carrega os dados em um clientdataset com select abaixo
select a.curso, b.funcionariofrom cursos a left join funcionarios b on a.codigo = b.codigocurso
ai so filtrar.
Gostei + 0
27/01/2011
Ronaldo Lanhellas
Vamos raciocinar: eu tenho 2 ClientDataSet (o master e o detaill),
o master tem o DataSetField apontando para o detail correto !
No DataSet temos um método chamado Filter que faz a filtragem dos registros dentro do DataSet,então se eu utilizar:
cds.Filter := 'NOME LIKE '+QuotedStr('RONALDO');
ele vai pegar todo mundo que tem o nome RONALDO.
O detail tem informações do Master, vamos supor que o detail seja os Cursos do Funcionario (master), então quando eu usar o filtro
cdsDetail.Filter := 'CURSO LIKE '+QuotedStr('INGLES');
Aqui que entra a jogada, eu gostaria que ele mostrasse todos os Funcionarios que possuem curso de INGLES, o que ocorre é que ele ta mostrando normalmente os Funcionarios (Sem Filtro nenhum) e está tirando apenas os Cursos que não são de INGLES, ou seja, se eu tiver um Funcionário com um Curso de ESPANHOL ele aparece normal, só não irá aparecer seu Curso de Espanhol pois fiz a filtragem somente para INGLES. Mais não é isso que eu quero, eu gostaria de filtrar automaticamente o Funcionario já que ele não tem curso de INGLES
Acho que deu uma desenrolada agora :D
Gostei + 0
28/01/2011
Ronaldo Lanhellas
Alguem pode me responder essa questão ?
Gostei + 0
29/01/2011
Marco Salles
Gostei + 0
31/01/2011
Ronaldo Lanhellas
IDFUNCIONARIONOMECPF
E temos uma tabela detalhe chamada CURSOS com os seguintes camposIDCURSOIDFUNCIONARIOCURSO
E agora ? se eu quiser pegar o funcionário com o Curso de INGLÊS ?
Bom, vamos passo a passo:Primeiro faço o select simples na tabela curso que retorna um ou vários IDFUNCIONARIO dependendo de quantos funcionários possuem o Curso de INGLÊSFica assim: Select IDFUNCIONARIO from CURSOS WHERE CURSO LIKE '%'INGLES'%'
Agora já temos todos os IDFUNCIONARIO que possuem o curso de INGLES, a unica coisa que temos que fazer é pegar todos os funcionários com esses ID's retornados pelo primeiro select, e como faço isso ?
Select * FROM FUNCIONARIOS WHERE IDFUNCIONARIO IN (Select IDFUNCIONARIO from CURSOS WHERE CURSO LIKE '%'INGLES'%')
Isso mesmo, eu coloco um Select dentro do outro, e irá funcionar corretamente o seu filtro mestre detalhe.
Gostei + 0
31/01/2011
Marco Salles
IDFUNCIONARIO NOME CPF
E temos uma tabela detalhe chamada CURSOS com os seguintes campos IDCURSO IDFUNCIONARIO CURSO
E agora ? se eu quiser pegar o funcionário com o Curso de INGLÊS ?
Bom, vamos passo a passo: Primeiro faço o select simples na tabela curso que retorna um ou vários IDFUNCIONARIO dependendo de quantos funcionários possuem o Curso de INGLÊS Fica assim: Select IDFUNCIONARIO from CURSOS WHERE CURSO LIKE '%'INGLES'%'
Agora já temos todos os IDFUNCIONARIO que possuem o curso de INGLES, a unica coisa que temos que fazer é pegar todos os funcionários com esses ID's retornados pelo primeiro select, e como faço isso ?
Select * FROM FUNCIONARIOS WHERE IDFUNCIONARIO IN (Select IDFUNCIONARIO from CURSOS WHERE CURSO LIKE '%'INGLES'%')
Isso mesmo, eu coloco um Select dentro do outro, e irá funcionar corretamente o seu filtro mestre detalhe.
Gostei + 0
31/01/2011
Wilson Junior
Espero ter colaborado.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)