Fórum Problemas com Query #379087
08/06/2010
0
alguém sabe dizer como deve ser escrito o comando numa Query utilizando o filter para que o resultado seja igual a este comando: QryCli.SQL.Add('Select * from clientes where nome like ' + QuotedStr(EdtPesquisa.Text + '%')) ? Já tentei de várias formas obter o mesmo resultado desta linha de comando usando o filter, mas não consigo. Usando o SQL, posso digitar num edit um nome em maiusculas ou minusculas que o resultado aparece corretamente. Infelizmente, o mesmo não ocorre com o filter. Se alguém puder me ajudar, agradeço muito.
Simone Grandini
Curtir tópico
+ 0Posts
08/06/2010
Marco Salles
com a propriedade Fielter dos DataSet e Simula a situação do Like que vc Obtem exceCutando SQL
So ha um inconveniente , é que funciona melhor para campos do Tipo String e caseSensitive
Espero que vc consiga aplicar com a sua realidade e tb dá para fazer Alteraçoes e Modificação Facielmente
Type TipoSearch = (tpMaior,tpMenor,TpIgual,TpFim,TpInicio,TpAll);
procedure FiltrarDataSet(cDataSet:TDataSet;cField,pesquisa:String;cTipoSearch: TipoSearch );
var
strFiltro:String;
begin
cDataSet.Filtered:=false;
case cTipoSearch of
//todos os Maiores e iguais ao o Texto ...
tpMaior:strFiltro:=cField+' > '+QuotedStr(Pesquisa);
//Todos os Menores do Texto
tpMenor:strFiltro:=cField+' < '+QuotedStr(Pesquisa);
//pesquisar igaul ao Texto
TpIgual:strFiltro:=cField+' like '+QuotedStr(Pesquisa);
//pesquisar no Inicio do Texto
tpInicio:strFiltro:=cField+' like '+QuotedStr(Pesquisa+'%');
//pesquisar no Fim do Texto
tpFim:strFiltro:=cField+' like '+QuotedStr('%'+Pesquisa);
//em qualquerlugar no Texto
tpAll:strFiltro:=cField+' like '+QuotedStr('%'+Pesquisa+'%');
end;
cDataSet.Filter:=strFiltro;
cDataSet.Filtered:=true;
end;
//Exemplo de Utilização ... Um Radio Group com os Seis Items de Filtro
procedure TForm3.Button1Click(Sender: TObject); var cTipoSearch: TipoSearch; begin cds.Filtered:=false; case RadioGroup1.ItemIndex of 0:cTipoSearch:=tpMaior; //todos os Maiores e iguais ao Texto 1:cTipoSearch:=tpMenor; //Todos os Menores do Texto 2:cTipoSearch:=tpIgual; //pesquisar igaul ao Texto 3:cTipoSearch:=tpInicio; //pesquisar no Inicio do Texto 4:cTipoSearch:=tpFim; //pesquisar no Fim do Texto 5:cTipoSearch:=tpAll; //em qualquerlugar no Texto end; //embaixo fiz para Testar , uma Pesquisa com Filter usando o CAMPO << NAME >> Da Tabela COUNTRY //e Passei um Texto De Um EDIT chamado edtPesquisa... Entende Isto ?????????????????? FiltrarDataSet(cds,'Name',edtPesquisa.Text,cTipoSearch); /////Usando o Field Name end;
Tem que entender que o Cacacter A < B < C < D .....
Gostei + 0
08/06/2010
Wilson Junior
QryCli.Filter := 'UPPER(Nome) LIKE UPPER(' + QuotedStr( Trim(EdtPesquisa.Text) ) + '%)';
QryCli.Filtered := True;
Espero ter colaborado.
Gostei + 0
08/06/2010
Marco Salles
QryCli.Filter := 'UPPER(Nome) LIKE UPPER(' + QuotedStr( Trim(EdtPesquisa.Text) ) + '%)';
QryCli.Filtered := True;
Espero ter colaborado.
Gostei + 0
08/06/2010
Wilson Junior
Este código funciona via SQL, não testei com o Filter, mas funciona perfeitamente.
O caso que utilizo o UPPER para o campo e o conteúdo da pesquisa é para o caso de o campo ter o valor "Maria" e o conteúdo da pesquisa ser "maria", assim não retornaria o resultado desejado.
Bom, efetuei o UPPER, pois em determinadas configurações do banco de dados o UPPER do banco é diferente do UpperCase do Delphi, somente por isto.
Espero que tenham entendido. Qualquer coisa é só perguntar.
Gostei + 0
08/06/2010
Simone Grandini
Gostei + 0
08/06/2010
Marco Salles
Este código funciona via SQL, não testei com o Filter, mas funciona perfeitamente.
O caso que utilizo o UPPER para o campo e o conteúdo da pesquisa é para o caso de o campo ter o valor "Maria" e o conteúdo da pesquisa ser "maria", assim não retornaria o resultado desejado.
Bom, efetuei o UPPER, pois em determinadas configurações do banco de dados o UPPER do banco é diferente do UpperCase do Delphi, somente por isto.
Espero que tenham entendido. Qualquer coisa é só perguntar.
Gostei + 0
08/06/2010
Marco Salles
Gostei + 0
08/06/2010
Simone Grandini
vc colaborou e muito. Era exatamente isso o q eu queria: q o usuário tivesse a liberdade de digitar o nome de todas as formas possíveis. E foi o q aconteceu. Testei com todas as letras em caixa alta, em caixa baixa, com a 1a letra em caixa alta e as demais em caixa baixa e vice versa, tanto com parte do nome ou com o nome por inteiro e deu certo. Tanto faz o nome estar gravado no sistema em letras maiusculas ou minusculas que o filtro dá certo. Valeu mesmo!
Marco,
eu entendi sua explicação. E o exemplo q vc deu está bem claro. Gostei muito tb. Só q esse código, no meu caso, não dá tanta flexibilidade como o do Paulista. Mas com certeza, servirá pra alguém.
Obrigada pessoal pela força!
Gostei + 0
08/06/2010
Marco Salles
QryCli.Filter := 'UPPER(Nome) LIKE UPPER(' + QuotedStr( Trim(EdtPesquisa.Text) ) + '%)';
QryCli.Filtered := True;
Espero ter colaborado.
Gostei + 0
09/06/2010
Simone Grandini
Segue alteração:
Antes: QryCli.Filter := 'UPPER(Nome) LIKE UPPER(' + QuotedStr( Trim(EdtPesquisa.Text) ) + '%)';
Depois: QryCli.Filter := 'upper(nome) like upper(' + QuotedStr(Trim(EdtPesquisa.Text+'%')) + ')';
Coloquei o "upper" e o "like upper" em letras minusculas, mas isso não influencia em nada, claro. Apenas retirei o '%' no final da string e coloquei junto com o EdtPesquisa.Text.
Gostei + 0
09/06/2010
Marco Salles
Segue alteração:
Antes: QryCli.Filter := 'UPPER(Nome) LIKE UPPER(' + QuotedStr( Trim(EdtPesquisa.Text) ) + '%)';
Depois: QryCli.Filter := 'upper(nome) like upper(' + QuotedStr(Trim(EdtPesquisa.Text+'%')) + ')';
Coloquei o "upper" e o "like upper" em letras minusculas, mas isso não influencia em nada, claro. Apenas retirei o '%' no final da string e coloquei junto com o EdtPesquisa.Text.
Gostei + 0
09/06/2010
Wilson Junior
Quanto ao funcionar, testei ele hoje e funciona normalmente.
O importante é que o tópico foi resolvido e todos nós aprendemos alogo.
Gostei + 0
30/06/2010
Carlos Mazzi
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)