Query não ordena corretamente por nome

Delphi

21/10/2006

Pessoal tenho uma query que ordena pelo nome, até aqui nada de anormal. O problema é que e tem [u:6b76a2d07c][b:6b76a2d07c]um nome todo em maiúsculo[/b:6b76a2d07c][/u:6b76a2d07c] ele não aparece abaixo do que está em minusculo. Acho que é um erro na query, mas como posso corrigi-lo


Vagner.oliveira

Vagner.oliveira

Curtidas 0

Respostas

Motta

Motta

21/10/2006

Para ordenar em geral os BD´s são case sensitives, vc deve usar uma função de conversão.

ex : P/ Oracle

SELECT NOME,CODIGO
FROM CLIENTES
ORDER BY UPPER(NOME),CODIGO


esta function UPPER converte tudo para maiusculo (aqui somente na ordenação), não sei se funciona em qq bd, creio que não


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

21/10/2006

Não funciona o comando, mas se colocar dessa forma ae só aparece os que estão em maiúsculo.


Select *
From Pecas
where upper (Descricao) = Descricao
Order By Descricao;



GOSTEI 0
Motta

Motta

21/10/2006

Select codigo,upper (Descricao) Descricao
From Pecas
Order By upper (Descricao)


tente assim


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

21/10/2006

Select codigo,upper (Descricao) Descricao From Pecas Order By upper (Descricao) tente assim


Tentei o que me passou só que da erro.

Fiz assim
Select upper (NomeClientes), NomeClientes, OrdemNumero, Fone, Celular, Indice
From OsStatus
Order By NomeClientes



E ele está ordenando primeiro os maiúsculos, depois ele ordena os minúsculos.


GOSTEI 0
Motta

Motta

21/10/2006

tenta :

Select upper (NomeClientes), NomeClientes, OrdemNumero, Fone, Celular, Indice
From OsStatus
Order By 1


GOSTEI 0
Rinez

Rinez

21/10/2006

Qual banco de dados?
Se for Firebird pode ser o DEFAULT CHARACTER SET da criação do Banco, ou ainda o Dialect 1, 2, ou 3. Problema de letras com acento ou cedilha.


GOSTEI 0
Denis

Denis

21/10/2006

Oi Colega,

Olha... é uma gambiarra... mas pode fazer assim. Crie uma view com a conversão para maiusculo.

Create view vwClientes (
NOMEMAIUSCULO,
NOME,
CODIGO) as
SELECT Upper(NOME),NOME,CODIGO
FROM CLIENTES

Depois faça um select na View ordernando pelo campo NOMEMAIUSCULO.

select * from vwcliente order by NOMEMAISCULO.

Assim a ordem vai ficar certinha. Note que vc pode exibir o outro campo nome para aparecer como foi digitado.
Mas aconselho que já converta para maiusculo quando for gravar os dados. Claro que tudo depende de sua aplicação.


GOSTEI 0
Denis

Denis

21/10/2006

Oi Colega,

Olha... é uma gambiarra... mas pode fazer assim. Crie uma view com a conversão para maiusculo.

Create view vwClientes (
NOMEMAIUSCULO,
NOME,
CODIGO) as
SELECT Upper(NOME),NOME,CODIGO
FROM CLIENTES

Depois faça um select na View ordernando pelo campo NOMEMAIUSCULO.

select * from vwcliente order by NOMEMAISCULO.

Assim a ordem vai ficar certinha. Note que vc pode exibir o outro campo nome para aparecer como foi digitado.
Mas aconselho que já converta para maiusculo quando for gravar os dados. Claro que tudo depende de sua aplicação.


GOSTEI 0
Martins

Martins

21/10/2006

Fiz um teste usando uma base Firebird e funcional normalmente, tenho nomes em maiúculo e minúsculo e ele me ordenou corretamente.

SELECT cod_id, upper(Nome)NOMES, Apelido from clientes Order by Upper(Nome)


SELECT cod_id, upper(Nome)NOMES, Apelido from clientes Order by Nome


Boa sorte!


GOSTEI 0
Marco Salles

Marco Salles

21/10/2006

Qual banco de dados? Se for Firebird pode ser o DEFAULT CHARACTER SET da criação do Banco, ou ainda o Dialect 1, 2, ou 3. Problema de letras com acento ou cedilha.


Acho pertinente a colocação .. Na realidade não se trata de um erro na query , conforme fora colocado pelo Wagner , mas sim caracteristicas especificas do proprio banco.. Dentre as colocaçoes a possibilidade de alterar na criaçao do banco conforme sugerido pelo Zenir ou utilizar a função Upper , conforme fora colocado pelo martins e também pelo motta.. As duas me parecem iguias

[b:50a9ca2a21]citação de motta[/b:50a9ca2a21]
Select codigo,upper (Descricao) Descricao From Pecas Order By upper (Descricao)



[b:50a9ca2a21]citação de martins[/b:50a9ca2a21]
SELECT cod_id, upper(Nome)NOMES, Apelido from clientes Order by Upper(Nome)


Não vejo erro em nenhuma das duas.. Mas voce disse que :
[b:50a9ca2a21]Citação de Wagbner se referindo ao motta[/b:50a9ca2a21]
Tentei o que me passou só que da erro.

erro aonde ?? Qual o erro ??? Na compilação ?? Qual o banco que voce esta usando ??


GOSTEI 0
Rinez

Rinez

21/10/2006

Eu normalmente faço com que os campos de pesquisa sejam gravados em maiúscula e os caracteres acentuados sejam convertidos em maiúsculas na hora da gravação. ç para Ç, ã para Ã, á para Á e assim por diante. Tive problemas quando fazia programas em clipper e DBaseIII em MSDOS isso a 30 anos. Após esse procedimento não tive mais problemas.
Mais qualquer coisa estamos aí para trocarmos idéia.
Abraços Zenir CTBA.


GOSTEI 0
Martins

Martins

21/10/2006

Fazendo um teste rápido com Interbase e Firebird no Delphi usando Ibx não tive problemas.

  IbCli.Close;
  IbCli.SQL.Text:=´SELECT COD_ID, UPPER( NOME) NOME, APELIDO FROM CLIENTES ORDER BY NOME´;
  IbCli.Open;


Os banco no Ib/FB estão com Dialect 3 e Character Set = win1252 (lc_ctype=WIN1252).

Qualquer coisa estamos aqui para tentar ajudar.

Boa sorte!


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

21/10/2006

Meus amigos, uso o PARADOX, e Marco, meu nome é [size=24:309888a7cf][b:309888a7cf]V[/b:309888a7cf][/size:309888a7cf]agner. não está escrito errado no forum não :lol: :D .

Sobre o erro fiz algumas alterações e não ocorreu mais, só que ele ordena os maiusculos primeiro, depois os minusculos:

EX:
CD-RW
CD-R
Cabo de rede

o código que uso é esse:
Select indice, marca, quantidade, custo, venda, upper (Descricao), Descricao 
From Pecas 
Order By Descricao



GOSTEI 0
Martins

Martins

21/10/2006

Vagner, vamos tentar o código abaixo Ok! :)

Seu código postado foi:

Select indice, marca, quantidade, custo, venda, upper (Descricao), Descricao 
From Pecas 
Order By Descricao 


Mudei para este:
Select indice, marca, quantidade, custo, venda, upper (Descricao) Descricao 
From Pecas 
Order By Descricao 


vc estava especificando Descricao 2 vezes, então eu removi a virgula dando um Upper no campo Descricao e passando o mesmo nome como pseudonimo. Teste.

begin
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add( ´Select indice, marca, quantidade, custo, venda, upper (Descricao) Descricao´+
                 ´ From TabTeste Order By Descricao´ );
  Query1.Open;
end;


Boa sorte!! :wink:


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

21/10/2006

funcionou perfeitamente. obrigado :lol:


GOSTEI 0
Martins

Martins

21/10/2006

funcionou perfeitamente. obrigado :lol:


:D
Blz, precisando é só postar que tentaremos ajudar da melhor maneira possível.

boa sorte!


GOSTEI 0
POSTAR