ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Order by Pelo Começo da Palavra

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
repleis
Profissional
Profissional


Registrado: Segunda-Feira, 5 de Abril de 2010
Mensagens: 582

MensagemEnviada: Qui Set 11, 2014 2:48 pm    Assunto: Order by Pelo Começo da Palavra Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
rique_neves
Mestre
Mestre


Registrado: Sexta-Feira, 17 de Fevereiro de 2012
Mensagens: 873

MensagemEnviada: Qui Set 11, 2014 3:13 pm    Assunto: Re: Order by Pelo Começo da Palavra Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
repleis
Profissional
Profissional


Registrado: Segunda-Feira, 5 de Abril de 2010
Mensagens: 582

MensagemEnviada: Qui Set 11, 2014 3:19 pm    Assunto: Re: Order by Pelo Começo da Palavra Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
rique_neves
Mestre
Mestre


Registrado: Sexta-Feira, 17 de Fevereiro de 2012
Mensagens: 873

MensagemEnviada: Qui Set 11, 2014 4:00 pm    Assunto: Re: Order by Pelo Começo da Palavra Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Set 11, 2014 4:34 pm    Assunto: Responder com Citação

Boa tarde,

Experimente mais ou menos dessa forma:

Código:
order by
    case when NOMEFORNECEDOR like 'MARIA%' then 1 else 2 end,
    NOMEFORNECEDOR


Espero que ajude.

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imobiliarias-em-guarulhos
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
repleis
Profissional
Profissional


Registrado: Segunda-Feira, 5 de Abril de 2010
Mensagens: 582

MensagemEnviada: Qui Set 11, 2014 4:44 pm    Assunto: Re: Order by Pelo Começo da Palavra Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
repleis
Profissional
Profissional


Registrado: Segunda-Feira, 5 de Abril de 2010
Mensagens: 582

MensagemEnviada: Qui Set 11, 2014 4:46 pm    Assunto: Responder com Citação

imex escreveu:
Boa tarde,

Experimente mais ou menos dessa forma:

Código:
order by
    case when NOMEFORNECEDOR like 'MARIA%' then 1 else 2 end,
    NOMEFORNECEDOR


Espero que ajude.

_________________
Assinatura: http://www.imoveisemexposicao.com.br/imobiliarias-em-guarulhos


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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Set 11, 2014 5:28 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
repleis
Profissional
Profissional


Registrado: Segunda-Feira, 5 de Abril de 2010
Mensagens: 582

MensagemEnviada: Qui Set 11, 2014 5:38 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Set 11, 2014 5:54 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
repleis
Profissional
Profissional


Registrado: Segunda-Feira, 5 de Abril de 2010
Mensagens: 582

MensagemEnviada: Qui Set 11, 2014 6:23 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB