Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Buscar una palabra en una BaseDAtos en un Campo tipo MEMO (https://www.clubdelphi.com/foros/showthread.php?t=82408)

Daniel10 04-03-2013 20:33:31

Buscar una palabra en una BaseDAtos en un Campo tipo MEMO
 
HOLA, OTRA CONSULTA TENGO...

Tengo una base datos, con 4 tablas, una de ellas para ejemplo la llamare Tabla_ConMemo, esta contendra 3 campos (campos1, campos2) dos de tipo string y uno de tipo memo (campoMemo).

Este campo memo contendrá un resumen, tal ves media carilla de una hoja A4, no mas de 300 palabras.
Esta tabla contendra50 registros, en cada registro el memo este con 300 palabras, no se si seria demasiado grande, creo que no.

Pero la base datos iría creciendo, esta tabla 50 registro por año.
La idea seria tener por varios años esta tabla con el resumen o comentario de cada registro, por que justamente este campo lo utilizaría para filtrar los registros.

Ahora viene mi problema.. el de realizar la consulta al campo CampoMemo, en un edit se escribiría una palabra, luego presionar el boton se deberia realizar una busqueda en los campos CampoMemo de la tabla en cuestión (Tabla_ConMemo)

y presentarme en un dbgrid el resultado, por lo menos que me muestre el numero de registro o el numero que identifique a este registro, asi luego de boble click en ese registro me mostraría en otra ventana todo el contenido de ese registro en edit y memo.



El el campo memo contendría un texto resumen seria algo similar asi.

Esto es el contenido de 5 registros del campo memo
Registro1 """""jose MARIA se domicilia en paraje Tobogan al costado de la RUTA asfaltada, cerca del PUEBLO , ella tiene un toro y un gato"""""""""
Registro2"""""MARIA vive al costado de la calle, cerca del PUEBLO , la calle es de tierra, ella tiene un PERRO y un GATO"""""""""
Registro3"""""mauro vive con su PERRO, cerca del puente madera sobre CALLE 126, cerca del cruce de RUTA 1 y RUTA 2, tiene en su granja un PERRO y un GATO"""""""""
Registro4"""""elias vive con MARIA en la ciudad, sobre la AVENIDA lOS Corrales, tiene un AUTO, es MECANICO, juega frecuentemente futbol en la cancha de TIERRA, el tiene un PERRO"""""""""
Registro5"""""rosita vive con MAURO, tiene un AUTO, es enfermera, el tiene un conejo"""""""""

Como veran este seria la base datos exclusivamente el campoMemo. Las Palabras en mayúsculas serian las coincidencias entre los registros, las puse para que identifiquen facil las coincidencias.


Por ejemplo en un edit escribo MARIA click en boton buscar y me deberia mostrar en un DBGRID los registros que contienen estas palabras.
Si escribo MARIA me debira mostrar los registros 1, 2 y 4 o si escribo AUTO me mostraría registros 4 y 5.

Algo asi seria el código de búsqueda...

Query1.CLOSE;
Query1.SQL.CLEAR;
Query1.SQL.Add('SELECT *');
Query1.SQL.ADD('FROM Tabla_ConMemo');
Query1.SQL.ADD('WHERE CampoMemo LIKE '+QuotedStr('%'+Edit1.Text+'%');
Query1.OPEN;

Por ahora es solo como encontrar un determinado campo, luego veré como haré para mostrar el contenido.

Gracias


me olvidaba...



Delphi 5
Base datos acces 2000





Tambien se me ocurrio, que en la ventana donde se cargue el memo, luego que escriba todo el texto que se quiera almacenar, y por medio de un codigo yo vaya seleccionando las palabras que yo piense que seria las CLAVES para realizar futuras busquedas, por ejemplo podria seleccionar como palabras CLAVE o LLAVE en este ejemplo palabras que sean NOMBRES, CALLES, VEHICULOS, ANIMALES,…… y muchas palabras mas.

Seria un trabajo medio largo, pero tal ves mas facil realizar este codigo para la búsqueda.
Pienso asi.. luego de cargar todo el resumen en el memo selecciono una palabra clic en boton AGREGAR y este me agregaría a una variable tipo string, luego selecciono otra palabra y clic en boton AGREGAR, y asi sucesivamente, iría agregando a una variable las palabras que considere una PALABRA CLAVE, PALABRA LLAVE o PALABRA IDENTIFICATORIA, y después seria simple para mi hacer una búsqueda en la base datos en el campo tipo string de una palabra.


Que recomentacion me podrian dar....

roman 04-03-2013 20:42:39

Yo te haría tres preguntas:

1. ¿Por qué este hilo está en el foro Delphi/Web?
2. ¿Qué base de datos usas?
3. ¿Cuál es el problema? Al parecer ¡ya lo tienes resuelto!

// Saludos

Casimiro Notevi 04-03-2013 20:58:04

Cita:

Empezado por Daniel10 (Mensaje 455976)
HOLA, OTRA CONSULTA TENGO...
Que recomentacion me podrian dar....

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)

Recuerda poner los tags al código fuente, ejemplo:



Gracias :)

Neftali [Germán.Estévez] 05-03-2013 08:59:52

Cita:

Empezado por Daniel10 (Mensaje 455976)
HOLA, OTRA CONSULTA TENGO...

Joer, hablas como una maestro JEDI... :D:D:D

Ya he movido el tema al foro correspondiente. Para la próxima vez revisalo antes de dar de alta la pregunta nueva.
A mi, al leer la pregunta me ha pasado igual que a Román, me ha dado la sensación de que ya la tenías resuelta.

¿Funciona la consulta que has puesto en Access? Es decir, ¿Puedes buscar palabras dentro de un campo memo utilizando SQL?
Si te funciona en Access (que tengo mis dudas), ya tienes el problema resulto para buscar palabras. Si así no funciona deberás hacer un recorrido por toda la tabla y realizar la búsqueda en el campo memo desde código, pero está claro que no va a ser tan eficiente.

La segunda solución que comentas sería la más "elegante" y "eficiente" y la que utilizan otros sistemas cuando hay que buscar en grandes cantidades de información. Se trata de hacer una selección de palabras claves o TAGs que pueden ser interesantes para búsquedas futuras. De esta forma, en este segundo campo (de tipo string) puedes realizar una búsqueda muy rápida sin tener que recorrer los campos MEMO. Esta implica que además del campo MEMO debes tener un campo de tipo STRING con las claves.

Si vamos un poco más allá en el diseño, en lugar de un segundo campo clave, lo que podrías tener es otra tabla dónde almacenas registros con palabras y el memo donde se encuentran. Sería la tablas de INDICE y la que utilizarías para hacer las búsquedas.

* Si en la primera frase quieres guardar las palabras: GATO,CASA, PERRO, COCHE, crearías 4 registros:
GATO, 1
CASA, 1
PERRO,1
COCHE,1

* Si en la segunda frase quieres guaradar las palabras: PERRO, CAMIÓN, OREJA y VINO crearías 4 registros más...
PERRO,2
CAMIÓN,2
OREJA,2
VINO,2

Y así sucesivamente...

Ahora con esta tabla INDICE son mucho más eficientes y sencillas.

Un saludo.

ElDioni 05-03-2013 12:16:15

Hola, yo lo que he entendido es que quieres saber que registros de la tabla principal son los que han tenido coincidencia en su campo memo que está separado en otra tabla, si es así podrías hacer la misma consulta pero uniendo las dos tablas.
Código Delphi [-]
Query1.CLOSE;
  Query1.SQL.CLEAR;
  Query1.SQL.Add('SELECT *');
  Query1.SQL.ADD('FROM Tabla_ConMemo,Tabla_SinMemo');
  Query1.SQL.ADD('WHERE Tabla_ConMemo.ClavePrincipal=Tabla_SinMemo.ClavePrincipal AND CampoMemo  LIKE '+QuotedStr('%'+Edit1.Text+'%');
  Query1.OPEN

Saludos.

Daniel10 09-03-2013 03:23:50

gracias
 
volvi de nuevo

bien.. gracias por responder.....

la verdad que si la tenia, pero.. tenia un par de errores en el codigo que no me andaban... y cuando escribi el mensage al foro lo escribi de memoria y lo hice bien, pero en mi compu en el codigo lo tenia mal.

Y.. perdon por la forma de escribir, de no usar los tags de codigo.. se me paso.. es que escribi apurado, por que me conecto de ciber, y el tiempo en un ciber es dinero.. jaja...


La franja horaria es GMT +2. Ahora son las 03:05:57.

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