Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Rejilla de registros de tabla filtrados por una condición (https://www.clubdelphi.com/foros/showthread.php?t=78596)

jocaro 02-05-2012 20:43:48

Rejilla de registros de tabla filtrados por una condición
 
Hola.

Quiero presentar una rejilla con los registros de un ttable que cumplan la siguiente condición.

Que un determinado substring exista en un campo de tipo blobfield, que contiene texto enriquecido formateado por el componente TDBRichViewEdit (parecido al TDBRichEdit). Para buscar el substring en ese campo necesito utilizar un método (SearchText) del componente.

¿Esto podría hacerlo mediante un ttable que cargue un TDBGrid? Si es así, donde y como tendría que definir la condición para que se produzca el filtrado (entiendo que el filtro del ttable es sólo para código SQL).

Si este planteamiento no es correcto, cual sería la alternativa para implementar la rejilla con filtro.

De antemano, muchas gracias por vuestro tiempo.

Ñuño Martínez 08-05-2012 13:19:06

Personalmente, en estos casos en los que busco una cadena dentro de otra, uso "LIKE", así:
Código SQL [-]
SELECT *
FROM tabla
WHERE tabla.campo LIKE '%subcadena%'
Los caracteres "%" indican que la subcadena puede estar precedida y/o seguida por otra cualquiera. Si hubiera usado, por ejemplo, "subcadena%", entonces indica que busco aquellos registros que comiencen por "subcadena".

De todas formas, aquí veo el problema de que es un texto con formato.

Casimiro Notevi 08-05-2012 13:37:06

No se ha informado sobre la base de datos que se está usando, si es firebird, y si el campo blob está declarado como texto, entonces se puede hacer una búsqueda "normal".
En lugar de usar like, tengo la costumbre de usar containing
La direferencia es con containing busca mayúsculas y minúsculas, y encualquier parte del texto.
El ejemplo de Ñuño quedaría así:
Código SQL [-]
SELECT * 
FROM tabla 
WHERE tabla.campo containing 'subcadena'

jocaro 08-05-2012 13:56:49

Cita:

Empezado por Casimiro Notevi (Mensaje 432100)
No se ha informado sobre la base de datos que se está usando, si es firebird, y si el campo blob está declarado como texto, entonces se puede hacer una búsqueda "normal".
En lugar de usar like, tengo la costumbre de usar containing
La direferencia es con containing busca mayúsculas y minúsculas, y encualquier parte del texto.
El ejemplo de Ñuño quedaría así:
Código SQL [-]SELECT * FROM tabla WHERE tabla.campo containing 'subcadena'

Hola y muchas gracias a ambos.

La base de datos es sqlite (no la he citado anteriormente para no complicar la explicación), el campo blob está declarado como tal.

Necesito buscar a traves de un método del componente de texto enriquecido y es aquí donde surge mi duda ¿la propiedad filter del dbgrid es sólo para código sql o puedo meter la búsqueda que necesito?, en caso contrario ¿existe alguna otra propiedad donde se pueda definir dicha búsqueda?, ¿tendría que utilizar otro componente?, etc.

En última instancia, que enfoque me aconsejáis a partir de vuestra experiencia.

Un saludo.

Ñuño Martínez 10-05-2012 18:07:09

Cita:

Empezado por jocaro (Mensaje 432102)
¿la propiedad filter del dbgrid es sólo para código sql o puedo meter la búsqueda que necesito?

El código SQL hay que usarlo en componentes SQL, que son los que hacen la búsqueda. La propiedad "filter" del "dbgrid" lo que hace es filtrar lo que obtiene del TDataSet (o del componente que uses para obtener los datos de la base de datos). Por mi experiencia, suele ser más rápido hacer la consulta SQL que devuelva los datos que queremos en lugar de usar "filter".


La franja horaria es GMT +2. Ahora son las 18:54:42.

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