Fórum Ordenação independente de maiúscula e minúscula #498400

20/10/2014

0

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

Responder

Posts

22/10/2014

Adilson Júnior

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;
Responder

Gostei + 0

22/10/2014

Host Solucões

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;
Responder

Gostei + 0

23/10/2014

Narba Silva

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
Responder

Gostei + 0

23/10/2014

Narba Silva

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
Responder

Gostei + 0

24/10/2014

Raylan Zibel

Tente especificando o campo, se puder:

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

Gostei + 0

24/10/2014

Narba Silva

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]
Responder

Gostei + 0

24/10/2014

Tone Costa.

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar