Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   UPPER, UpperCase con eñes, tildes ... (https://www.clubdelphi.com/foros/showthread.php?t=6607)

Tomás 14-01-2004 19:35:05

UPPER, UpperCase con eñes, tildes ...
 
Hola:

Tengo esta consulta en una tabla InterBase (Caracter Set ISO8859_1, Collate ES_ES)

sNom := '%'+Trim(eNombre.Text)+'%';
sApe := '%'+Trim(eApellidos.Text)+'%';
DM.IBDSNada.SelectSQL.Text := 'SELECT * FROM NADADORES where UPPER(APELLIDOS) LIKE UPPER('+QuotedStr(sApe)+') AND UPPER(NOMBRE) LIKE UPPER('+QuotedStr(sNom)+') order by APELLIDOS, NOMBRE';

Funciona bien excepto cuando hay alguna ñ, ç o vocal con tilde que no las transforma a mayúsculas.
Supongo que pasará lo mismo con LOWER.

¿Cómo se puede solucionar esto?

Un saludo. Tomás.

P.D.
Tampoco la función UpperCase las transforma.

delphi.com.ar 14-01-2004 20:22:42

Yo me he armado estas dos funciones basadas en las de Delphi, no se si en las últimas versiones, con la aparición de StrUtils ha aparecido algo similar
Código:

function UCase(const S: string): string;
var
  Ch: Char;
  L: Integer;
  Source, Dest: PChar;
begin
  L := Length(S);
  SetLength(Result, L);
  Source := Pointer(S);
  Dest := Pointer(Result);
  while L <> 0 do begin
    Ch := Source^;
    if ((Ch >= 'a') and (Ch <= 'z')) or ((Ch >= 'à') and (Ch <= 'þ')) then Dec(Ch, 32);
    Dest^ := Ch;
    Inc(Source);
    Inc(Dest);
    Dec(L);
  end;
end;

function LCase(const S: string): string;
var
  Ch: Char;
  L: Integer;
  Source, Dest: PChar;
begin
  L := Length(S);
  SetLength(Result, L);
  Source := Pointer(S);
  Dest := Pointer(Result);
  while L <> 0 do
  begin
    Ch := Source^;
    if ((Ch >= 'A') and (Ch <= 'Z')) or ((Ch >= 'À') and (Ch <= 'Þ')) then Inc(Ch, 32);
    Dest^ := Ch;
    Inc(Source);
    Inc(Dest);
    Dec(L);
  end;
end;

Saludos!

Julià T. 14-01-2004 21:39:17

existe una función de ls unidad sysutils para realizar dicha tarea:

Ansiuppercase

ignoro a partir de que version se introdujo

Tomás 15-01-2004 18:24:24

Muchas gracias a los dos por vuestra ayuda. Voy a ponerme manos a la obra.

Un saludo. Tomás.


La franja horaria es GMT +2. Ahora son las 16:08:08.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi