| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
repleis Profissional

Registrado: Segunda-Feira, 5 de Abril de 2010 Mensagens: 582
|
Enviada: Qui Set 11, 2014 2:48 pm Assunto: Order by Pelo Começo da Palavra |
|
|
Olá pessoal, sempre utilizei esse código em meus campos de pesquisa, tipo o usuário vai digitando e vai aparecendo o resultado abaixo. Olhem o código.
| Código: |
with DM.QFornecedor do
begin
Close;
SQL.Clear;
SQL.Text := 'SELECT * FROM CADASTROFORNECEDOR';
if Edit1.Text <> EmptyStr then
SQL.Text := SQl.Text + 'WHERE upper(NOMEFORNECEDOR) LIKE :palavra';
SQl.Text := SQl.Text + 'ORDER BY NOMEFORNECEDOR';
if Edit1.Text <> EmptyStr then
ParamByName ('palavra').AsString:= '%' + UpperCase(Edit1.Text) + '%';
Open;
|
Funciona bem mais e uma seguinte situação não traz o nome de mais relevancia primeiro. Ex: Tem nos Registro CARLOS MARIA, MARIA CARLOS
seu digitar "Maria" o primeiro registro que mostra é CARLOS MARIA.
Já tentei ASC, DESC, mais não tem jeito.
Desde já obrigado a todos. |
|
| Voltar ao Topo |
|
 |
rique_neves Mestre


Registrado: Sexta-Feira, 17 de Fevereiro de 2012 Mensagens: 873
|
Enviada: Qui Set 11, 2014 3:13 pm Assunto: Re: Order by Pelo Começo da Palavra |
|
|
Faço assim sempre deu certo.
| Código: | with DM.QFornecedor do
begin
Close;
SQL.Clear;
SQL.Text := 'SELECT * FROM CADASTROFORNECEDOR';
if Edit1.Text <> EmptyStr then
SQL.Text := SQl.Text + 'WHERE upper(NOMEFORNECEDOR) LIKE upper(:palavra)';
SQl.Text := SQl.Text + 'ORDER BY NOMEFORNECEDOR';
if Edit1.Text <> EmptyStr then
ParamByName ('palavra').AsString:= '%' +Edit1.Text+'%'; |
bye _________________ Atrás de todo problema a uma oportunidade brilhantemente disfarçada!
Compartilhar Imagens .: http://s124.photobucket.com/ |
|
| Voltar ao Topo |
|
 |
repleis Profissional

Registrado: Segunda-Feira, 5 de Abril de 2010 Mensagens: 582
|
Enviada: Qui Set 11, 2014 3:19 pm Assunto: Re: Order by Pelo Começo da Palavra |
|
|
| rique_neves escreveu: | Faço assim sempre deu certo.
| Código: | with DM.QFornecedor do
begin
Close;
SQL.Clear;
SQL.Text := 'SELECT * FROM CADASTROFORNECEDOR';
if Edit1.Text <> EmptyStr then
SQL.Text := SQl.Text + 'WHERE upper(NOMEFORNECEDOR) LIKE upper(:palavra)';
SQl.Text := SQl.Text + 'ORDER BY NOMEFORNECEDOR';
if Edit1.Text <> EmptyStr then
ParamByName ('palavra').AsString:= '%' +Edit1.Text+'%'; |
bye |
aqui ainda ficou a mesma coisa amigo tipo tenho um cadastro maria e outro mariana digitei maria e mariana veio primeiro. mesmo assim obrigado. |
|
| Voltar ao Topo |
|
 |
rique_neves Mestre


Registrado: Sexta-Feira, 17 de Fevereiro de 2012 Mensagens: 873
|
Enviada: Qui Set 11, 2014 4:00 pm Assunto: Re: Order by Pelo Começo da Palavra |
|
|
faça assim entao irá pegar todos os registros que começa com o que for digitado.
| Código: | with DM.QFornecedor do
begin
Close;
SQL.Clear;
SQL.Text := 'select* FROM CADASTROFORNECEDOR WHERE upper(NOMEFORNECEDOR) LIKE upper(:palavra)';
ParamByName ('palavra').AsString:= '%' +Edit1.Text;
open;
end; |
bye _________________ Atrás de todo problema a uma oportunidade brilhantemente disfarçada!
Compartilhar Imagens .: http://s124.photobucket.com/ |
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
|
| Voltar ao Topo |
|
 |
repleis Profissional

Registrado: Segunda-Feira, 5 de Abril de 2010 Mensagens: 582
|
Enviada: Qui Set 11, 2014 4:44 pm Assunto: Re: Order by Pelo Começo da Palavra |
|
|
| rique_neves escreveu: | faça assim entao irá pegar todos os registros que começa com o que for digitado.
| Código: | with DM.QFornecedor do
begin
Close;
SQL.Clear;
SQL.Text := 'select* FROM CADASTROFORNECEDOR WHERE upper(NOMEFORNECEDOR) LIKE upper(:palavra)';
ParamByName ('palavra').AsString:= '%' +Edit1.Text;
open;
end; |
bye |
Desse jeito ai amigo não busca nada não sei por que... Aguardo... |
|
| Voltar ao Topo |
|
 |
repleis Profissional

Registrado: Segunda-Feira, 5 de Abril de 2010 Mensagens: 582
|
Enviada: Qui Set 11, 2014 4:46 pm Assunto: |
|
|
Me perdoe a ignorância amigo, onde implementar esse código poderia postar como ficaria o código baseado nas informações que passei, se não for pedir de mais. Aguardo. |
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Set 11, 2014 5:28 pm Assunto: |
|
|
Ex:
| Código: | with DM.QFornecedor do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM CADASTROFORNECEDOR');
if Edit1.Text = EmptyStr then
SQl.Add('ORDER BY NOMEFORNECEDOR')
else
begin
SQL.Add('WHERE upper(NOMEFORNECEDOR) LIKE :palavra');
SQl.Add('ORDER BY');
SQl.Add('case when NOMEFORNECEDOR like :palavraini then 1 else 2 end,');
SQl.Add('NOMEFORNECEDOR');
ParamByName('palavra').AsString := '%' + UpperCase(Edit1.Text) + '%';
ParamByName('palavraini').AsString := UpperCase(Edit1.Text) + '%';
end;
Open; |
Espero que ajude. |
|
| Voltar ao Topo |
|
 |
repleis Profissional

Registrado: Segunda-Feira, 5 de Abril de 2010 Mensagens: 582
|
Enviada: Qui Set 11, 2014 5:38 pm Assunto: |
|
|
| imex escreveu: | Ex:
| Código: | with DM.QFornecedor do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * FROM CADASTROFORNECEDOR');
if Edit1.Text = EmptyStr then
SQl.Add('ORDER BY NOMEFORNECEDOR')
else
begin
SQL.Add('WHERE upper(NOMEFORNECEDOR) LIKE :palavra');
SQl.Add('ORDER BY');
SQl.Add('case when NOMEFORNECEDOR like :palavraini then 1 else 2 end,');
SQl.Add('NOMEFORNECEDOR');
ParamByName('palavra').AsString := '%' + UpperCase(Edit1.Text) + '%';
ParamByName('palavraini').AsString := UpperCase(Edit1.Text) + '%';
end;
Open; |
Espero que ajude. |
Olá amigo muito obrigado pela sua ajudar, mais esse codigo não retorna a nenhum resultado, lembrando que uso o Edit onde vou digitando e e vai aparecendo o os registros, aguardo mais alguma alternativa, estou pesquisando muito aqui pra ver se acho algo também, desde já obrigado. |
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Set 11, 2014 5:54 pm Assunto: |
|
|
Acho estranho porque essa sugestão que postei não tem nenhuma alteração no Where ou no seu parâmetro. Só foi alterado o Order By. Pelo menos essa era a intenção...
Você testou a query usando alguma ferramenta de administração do banco de dados (ex: IBExpert para o Firebird) para ver o resultado?
| Código: | SELECT * FROM CADASTROFORNECEDOR
WHERE upper(NOMEFORNECEDOR) LIKE '%MARIA%'
ORDER BY
case when NOMEFORNECEDOR like 'MARIA%' then 1 else 2 end,
NOMEFORNECEDOR |
|
|
| Voltar ao Topo |
|
 |
repleis Profissional

Registrado: Segunda-Feira, 5 de Abril de 2010 Mensagens: 582
|
Enviada: Qui Set 11, 2014 6:23 pm Assunto: |
|
|
| imex escreveu: | Acho estranho porque essa sugestão que postei não tem nenhuma alteração no Where ou no seu parâmetro. Só foi alterado o Order By. Pelo menos essa era a intenção...
Você testou a query usando alguma ferramenta de administração do banco de dados (ex: IBExpert para o Firebird) para ver o resultado?
| Código: | SELECT * FROM CADASTROFORNECEDOR
WHERE upper(NOMEFORNECEDOR) LIKE '%MARIA%'
ORDER BY
case when NOMEFORNECEDOR like 'MARIA%' then 1 else 2 end,
NOMEFORNECEDOR |
|
Testei agora que você falou no no Ibexpert e nele sim trouxe o resultado que queria. Ai fui olhar o código direitinho e foi um vacilo meu esqueci o open no filnal....kkkkk... Muito obrigado meu amigo. Agora ficou certinho. |
|
| Voltar ao Topo |
|
 |
|