FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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; |
#2
|
|||
|
|||
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.
__________________
Suerte .: Gydba :. |
#3
|
|||
|
|||
Nunca lo he probado en DBase, pero en interbase/firebird si funciona:
Código:
SELECT * FROM tabla WHERE campo CONTAINING '%cadena%' |
#4
|
|||
|
|||
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)))+'%'; |
|
|
|