Ir ao conteúdo

Filtro DBGrid não está perfeito...


NycB

Posts recomendados

Postado

E aí pessoal!

Venho aqui consultar vossas sabedorias, pois já rodei por tudo, sites, fóruns, e demais pesquisas, mas igual ao problema que estou tendo não encontrei nenhum...

Seguinte: Tenho um DBGrid, ligado a um DataSet/DataSource, com TTable.

Enfim, minha rotina é para filtrar uma string nesse DataSet...


[B]if[/B](edit1.Text<>[COLOR="RoyalBlue"]''[/COLOR])[B]then[/B]
[B]begin[/B]
form1.dbgrid1.DataSource.DataSet.Filtered:=false;
form1.dbgrid1.DataSource.DataSet.Filter:= [COLOR="RoyalBlue"]'( Nome = '[/COLOR] + QuotedStr(edit1.text+[COLOR="RoyalBlue"]'*'[/COLOR]) + [COLOR="RoyalBlue"]')'[/COLOR];
form1.dbgrid1.DataSource.DataSet.Filtered:=true;
[B]end;[/B]

Até onde sei, numa pesquisa por "joao", isso deveria me retornar todos os nomes que contenham essa string, seja "joao da silva" ou "joaquim joao".

Entretanto (infelizmente), pra mim isso não ocorre, e a pesquisa só retorna o que inicia com joao.

Já vi gente tentando fazer a pesquisa dessa maneira, evitando o que eu quero... Por favor, se alguém tem alguma sugestão eu agradeço...

Lembrando que no meu DataSet, as opções foCaseInsensitive e foNoPartialCompare estão setadas como false.

Grato pela atenção, continuo atrás da solução...

Postado

E aí Mog. Lucas!

Vi um post seu já, (http://forum.clubedohardware.com.br/consulta-delphi/713706?t=713706&highlight=filter+dbgrid) quanto as "cartas coringa", mas tentei usar LIKE no Delphi, e ele não aceita, simplesmente não efetua a pesquisa. E o "%", ele diz que é um operador não aplicável...

Nesse post que citei, você usa a ADOTable, mas meu programa tá quase pronto, e é todo em TTable, não queria usar outras coisas...

No caso de usar como você falou, meu código fica assim:

form1.dbgrid1.DataSource.DataSet.Filter:= [COLOR="RoyalBlue"]'Nome LIKE %edit1.text%'[/COLOR];

e o erro é o seguinte: http://imageshack.us/photo/my-images/269/errofl.jpg/

Diz que o caracter é inválido para o filtro...

Mas valeu a ajuda!

post-262929-13884961340061_thumb.jpg

  • 2 semanas depois...
Postado

Pois então...

Resolvi no jeitinho brasileiro.

Uma gambiarra, mas que funcionou e fez o que eu queria...

Como a propriedade filtered do dataset usando a string + "*" só retorna valores depois do nome, criei mais campos e separei o nome em pedaços. Então na pesquisa ele retorna corretamente.

Ainda assim, se alguém tiver solução melhor agradeço!

Valeu galera!

  • Membro VIP
Postado

Oi amigo,

Desculpe a demora para responder..

Pelo que vi no google, bastaria trocar o que te passei (e o que você viu no meu outro post) de % para *.. mas usando a função QuotedStr

Veja:

http://www.hardware.com.br/comunidade/dbgrid-registros/312301/

http://www.delphipages.com/forum/showthread.php?t=63108

Seu código deve ficar algo como:

form1.dbgrid1.DataSource.DataSet.Filter:= 'Nome = ' + QuotedStr(EditX.text + '%') + ');

Lembrando que se você quiser utilizar os wildcards no inicio do nome, precisa colocar '%'+ ali no começo da função.. se não conseguir utilizando "=", experimente com "LIKE", mas não sei se o componente suporta..

Me diga se conseguir!

PS: Verifique se você consegue utilizar a função locate, do Dataset.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...