Filtro de Filtro
Galera, boa tarde! A minha dúvida é a seguinte! É possível fazer um filtro dentro do outro no clientdataset. Explicando melhor através de um exemplo: Tenho um banco com 3 fields: Nome, Idade e Telefone. Aí eu aplico um filtro no field Idade buscando todo mundo que é maior de 18 anos e depois com os dados já filtrados, eu quero filtrar novamente todo mundo que o Nome Rafael. É possível fazer isso?
Grato!
Rafael Ribeiro
Curtidas 0
Respostas
Marco Salles
23/03/2011
Utilize o clone Cursor
Talves te ajude
http://marcosalles.wordpress.com/2011/02/17/clonecursor-como-definir-os-parametros-reset-keepsettings/
Talves te ajude
http://marcosalles.wordpress.com/2011/02/17/clonecursor-como-definir-os-parametros-reset-keepsettings/
GOSTEI 0
André Silveira
23/03/2011
cds.Filtered := False;
cds.Filter := 'IDADE > 18 and NOME like '''RAFAEL%'''';
cds.Filtered := True;
Taí uma forma de fazer simples e direta.
cds.Filter := 'IDADE > 18 and NOME like '''RAFAEL%'''';
cds.Filtered := True;
Taí uma forma de fazer simples e direta.
GOSTEI 0
Rafael Ribeiro
23/03/2011
André, boa tarde! Eu havia feito assim, mas não funciona de jeito nenhum!
GOSTEI 0
Rafael Ribeiro
23/03/2011
A verdade é que eu coloquei uma situação simples demais para a minha necessidade real. Tentando equivaler... pense o seguinte... e se eu precisa achar todos que chamam Rafael, Rodrigo e Roberto. Como ficaria?
GOSTEI 0
João Sobrinho
23/03/2011
Colega, de uma pesquisada sobre o evento OnFilterRecord do DataSet deve resolver seu problema.
GOSTEI 0
Marco Salles
23/03/2011
Amigo , uma coisa é vc fazer um filtro mais sofisticado . Outra coisa é fazer o filtro de um filtro . Neste ultimo caso
é o clone Mesmo .
é o clone Mesmo .
GOSTEI 0
Rafael Ribeiro
23/03/2011
Cara de verdade. Eu uso clone cursor e não vejo utilidade neste caso. Vou te explicar o que eu estou fazendo na realidade para ver se você me entende. Eu tenho duas combos que possuem como ítens os fields do meu clientdataset. Tenho 10 edits onde coloco as variáveis de pesquisa. Os 9 primeiros edits usam o field do texto da combo 1 e o 10º utiliza o field da combo2. O que deveria gerar de resultado? Todas as linhas que apresentam pelo menos 1 dos textos dos 9 primeiros edits, mas que numa segunda coluna a string seja de valor igual a "N". Eu penso que seria um filtro dentro do outro, mas estou aberto a novas idéias. Se você enxerga como usar o clone cursor neste fato, por favor me oriente. O que preciso é de uma solução.
Grato pela atenção!
Grato pela atenção!
GOSTEI 0
Marco Salles
23/03/2011
Talves vc precise de um filtro mais sofisticado.
Porém , não deu para entender o que vc precisa. Pelo menos eu não consegui mentalizar
Porém , não deu para entender o que vc precisa. Pelo menos eu não consegui mentalizar
GOSTEI 0
André Silveira
23/03/2011
Porque não faz a consulta usando o sql da query relacionada ao clientdataset, ao invés de filtrar pelo mesmo.
Mas se for filtrar mesmo pelo clientdataset, pode usar assim:
Conforme já tinha mandado em outra mensagem e você disse que não funciona, porque não funciona ? Alguma mensagem de erro ?
O único jeito de fazer filtro no clientdataset é usando a propriedade filter do mesmo.
Mas se for filtrar mesmo pelo clientdataset, pode usar assim:
ClientDataSet1.Filtered := False; ClientDataSet1.Filter := 'LAST_NAME like ''Davis%'' and STATE = ''MA'''; ClientDataSet1.Filtered := True;
Conforme já tinha mandado em outra mensagem e você disse que não funciona, porque não funciona ? Alguma mensagem de erro ?
O único jeito de fazer filtro no clientdataset é usando a propriedade filter do mesmo.
GOSTEI 0
André Silveira
23/03/2011
Indo mais diretamente no seu problema:
Para saber quais condições são usadas, pode colocar um procedimento que monte a string de acordo com os edits que estão preenchidos.
Espero ter ajudado.
ClientDataSet1.Filtered := False; ClientDataSet1.Filter := '((fieldcombo1 = CONDICAO1) OR (fieldcombo1 = CONDICAO2) OR (fieldcombo1 = CONDICAO3) or (fieldcombo1 = CONDICAO4) or (fieldcombo1 = CONDICAO5) or (fieldcombo1 = CONDICAO6) or (fieldcombo1 = CONDICAO7) or (fieldcombo1 = CONDICAO8) or (fieldcombo1 = CONDICAO9) or (fieldcombo1 = CONDICAO10)) and (fieldcombo2 = condicao); ClientDataSet1.Filtered := True;
Para saber quais condições são usadas, pode colocar um procedimento que monte a string de acordo com os edits que estão preenchidos.
Espero ter ajudado.
GOSTEI 0