Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Buscar texto indistintamente en Mayusculas o minusculas (https://www.clubdelphi.com/foros/showthread.php?t=9424)

Jose Manuel 22-04-2004 22:55:17

Buscar texto indistintamente en Mayusculas o minusculas
 
Hola, quisiera saber como puedo indicar que en una busqueda de datos no distinga entre Mayúsculas o Minúsculas, en un campo Memo.

En el ejemplo siguiente trabaja bien con un campo texto como es "RESUMEN", pero como puedo hacer para que en el campo TEXTO que es un "memo", la busqueda de datos no distinta mayusculas o minusculas, ya que si pongo
fDatabase.q_pre.SQL.add('or UPPER(TEXTO) LIKE :buscar') me da un error del tipo Mismatch.

Estoy trabajando con Dbase, Delphi 6.

Un saludo
Jose Manuel
...................................................................................
procedure TfRegistro.buscar_por_textoClick(Sender: TObject);
var
aBuscar: string;
ClickedOK: Boolean;
begin
aBuscar := 'escriba texto a buscar';
ClickedOK := InputQuery('Texto a Buscar', 'texto:', aBuscar);
if ClickedOK then
begin
aBuscar:=UPPERCASE(aBuscar);
fDatabase.q_pre.active:=false;
fDatabase.q_pre.SQL.clear;
fDatabase.q_pre.SQL.add('Select * from PREGUNTA');
fDatabase.q_pre.SQL.add('where UPPER(RESUMEN) LIKE :buscar'); // BIEN
->fDatabase.q_pre.SQL.add('or TEXTO LIKE :buscar'); // <-- CAMPO MEMO
fDatabase.q_pre.SQL.add('order by ID');
fDatabase.q_pre.Params[0].AsString := '%'+abuscar+'%';
fDatabase.q_pre.active:=true;
end;
end;

Gydba 23-04-2004 14:20:35

Bunas,

En primer lugar realizar una búsqueda por campo tipo memo no es de lo mas óptimo ni aconsejable.

Alguna solución sería castear (aunque no sé si el motor lo soporta) el campo y luego realizar la búsqueda donde deberías utilizar un uppercase tanto para el contenido del campo como para el parámetro que le estás pasando.

Hay otros métodos mucho más complejos de realizar este tipo de búsquedas que realmente bien utilizados dan extraordinarios resultados, pero son utilizados para desarrollos muy puntuales.

Debo indicar también que Dbase lo conozco muy por encima por lo que mis comentarios son de por sí vagos.

gendelphi 24-04-2004 08:44:57

Nunca lo he probado en DBase, pero en interbase/firebird si funciona:

Código:

SELECT *
FROM tabla
WHERE campo CONTAINING '%cadena%'

CONTAINING a diferencia de LIKE no es sensible a mayusculas y minusculas.

Jose Manuel 24-04-2004 09:57:43

La instrucción CONTAINING parece que no esta soportada en Dbase.

De momento, he solucionado el problema con las siguientes instrucciones, no sé si habrá otra solución para buscar una "string" no sensible a Mayusculas o Minusculas en un campo memo, de una base de datos DBASE.

q_pre.SQL.add('Select * from PREGUNTA');
q_pre.SQL.add('where TIPO = :cTipo');
* q_pre.SQL.add('or TEXTO LIKE :buscar0'); // minusculas
* q_pre.SQL.add('or TEXTO LIKE :buscar1'); // mayusculas
* q_pre.SQL.add('or TEXTO LIKE :buscar2)');// la 1ª en Mayusculas

* q_pre.Params[0].AsString := '%'+UPPERCASE (Buscar.text) +'%';
* q_pre.Params[1].AsString := '%'+LOWERCASE(Buscar.text) +'%';
* q_pre.Params[2].AsString := '%'+UPPERCASE (copy(Buscar.text,1,1))+
LOWERCASE(copy(buscar.text,2,length(Buscar.text)))+'%';


La franja horaria es GMT +2. Ahora son las 22:21:23.

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