Ordenação independente de maiúscula e minúscula

Delphi

20/10/2014

Tenho uma RadioGroup de ordenação, mais quando a letra é minuscula, não fica em ordem alfabética .

Há solução fácil?



if RadioGroup_Ordenacao.ItemIndex = 0 then
  begin
  DataModule_01.DataSet_Clientes.Close;
  DataModule_01.DataSet_Clientes.SelectSQL.Clear;
  DataModule_01.DataSet_Clientes.SelectSQL.Add('select * from clientes ' +texto+ 'order by cli_nome') ;
  DataModule_01.DataSet_Clientes.Open;
end;
Narba Silva

Narba Silva

Curtidas 0

Respostas

Adilson Júnior

Adilson Júnior

20/10/2014

Não seu com outros bancos, mas no Firebird realmente ficou doido pedindo para ordernar pelo nome contento letras maiúsculas e minúsculas!
Nunca percebi isso porque sempre forço o usuário a digitar tudo em maiúscula dentro da aplicação!
Uma possível solução é converter tudo para maiúsculas ou então criar uma função que joga a primeira letra de cada palavra do nome para maiúscula antes de gravar no banco


function Tform1.FormataNome(sNome: String): string;
const
excecao: array[0..5] of string = (´ da ´, ´ de ´, ´ do ´, ´ das ´, ´ dos ´, ´ e ´);
var
tamanho, j: integer;
i: byte;
begin
Result := AnsiLowerCase(sNome);
tamanho := Length(Result);

for j := 1 to tamanho do
// Se é a primeira letra ou se o caracter anterior é um espaço
if (j = 1) or ((j>1) and (Result[j-1]=Chr(32))) then
Result[j] := AnsiUpperCase(Result[j])[1];
for i := 0 to Length(excecao)-1 do
result:= StringReplace(result,excecao[i],excecao[i],[rfReplaceAll, rfIgnoreCase]);
end;
GOSTEI 0
Host Solucões

Host Solucões

20/10/2014

Boa noite usar assim

if RadioGroup_Ordenacao.ItemIndex = 0 then
begin
DataModule_01.DataSet_Clientes.Close;
DataModule_01.DataSet_Clientes.SelectSQL.Clear;
DataModule_01.DataSet_Clientes.SelectSQL.Add('select * from clientes ' +texto+ 'order by ' + upper(cli_nome)) ;
DataModule_01.DataSet_Clientes.Open;
end;
GOSTEI 0
Narba Silva

Narba Silva

20/10/2014

Boa noite usar assim

if RadioGroup_Ordenacao.ItemIndex = 0 then
begin
DataModule_01.DataSet_Clientes.Close;
DataModule_01.DataSet_Clientes.SelectSQL.Clear;
DataModule_01.DataSet_Clientes.SelectSQL.Add('select * from clientes ' +texto+ 'order by ' + upper(cli_nome)) ;
DataModule_01.DataSet_Clientes.Open;
end;



Essa tambem nao deu certo
GOSTEI 0
Narba Silva

Narba Silva

20/10/2014

Queria uma solução facil, mais caso não ache a solução, talvez faça entao o que o Adilson Bragança Cápua Júnior postou
GOSTEI 0
Raylan Zibel

Raylan Zibel

20/10/2014

Tente especificando o campo, se puder:

select upper(cli_nome) from clientes ' + texto + ' order by cli_nome
GOSTEI 0
Narba Silva

Narba Silva

20/10/2014

Tente especificando o campo, se puder:

select upper(cli_nome) from clientes ' + texto + ' order by cli_nome


[img]http://arquivo.devmedia.com.br/forum/imagem/387399-20141024-152852.png[/img]
GOSTEI 0
Tone Costa.

Tone Costa.

20/10/2014

Para resolver esse problema fiz o seguinte:

Nos campos referente a nome, descricao eu crio um campo espelho que grava tudo em maiusculo, sem caracter acentuado e em alguns casos gravo até o fonetico do nome para ficar facil a pesquisa: tipo (casa, caza).

Quando eu faço as consultas eu converte o que o usuario digitou para caixa alta e faço a pesquisa pelo campo


Sei que gasta mais espaço, mas hoje em dia, existe gb de sobra
GOSTEI 0
POSTAR