La Web del Programador: Comunidad de Programadores
 
    Pregunta:  51346 - BUSCAR EN CAMPOS MEMO
Autor:  Miguel Angel Pérez
En mi programa tengo varios campos memo que es donde está la información principal. Tengo un botón de búsqueda para poder buscar en los campos memos de la presente ficha o cualquier otra, pero no funciona. En algún sitio de ayuda leí que lo de findrecord, o la instrucción

DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70

que es la que crea el asistente de access (con botón de prismáticos), no funciona bien con campos memos.

Como alternativa he creado una búsquea con ventana de input y con filtros que va bien, pero eso me busca datos en todas las fichas del programa y simplemente me da un listado con las fichas en las que aparece la palabra o frase buscada. Pero luego, dentro de la ficha, un campo memo puede tener muchos párrafos y habría que leerlo todo para encontrar manualmente la palabra buscada.

¿Hay alguna manera efectiva de buscar una palabra en campos memos?

gracias

  Respuesta:  Nicolás Pailhé
Hola Miguel.. la solución es así.. por lo que comentaste creaste una "ventana de input" no se si lo has hecho directamente desde la consulta (por parámetro) o desde un formulario con un único campo en donde ingresas la palabra que deseas encontrar.
Yo lo probé desde este último caso, cree un formulario con un único campo en donde introduzco la palabra que deseo buscar. Luego creo una consulta llamando a la tabla donde guardo toda la información (en donde estan los campos memos) y en el campo memo pongo como criterio lo siguiente =[Forms]![busqueda memo].[Form]![memo]"
Aca lo que le estoy diciendo es que al ejecutar la consulta me devuelva todos los registros en donde coincida con la palabra ingresada en el campo "memo" del formulario "busqueda memo".
Finalmente creamos un formulario que tome sus datos (Origen del registro) de esta última consulta.
Entonces el proceso sería así: abro el formulario "BUSCAR" e ingreso la palabra "Presupuesto" y hago un click en el botón "Ejecutar", este botón debe abrir el formulario "RESULTADOS DE LA BUSQUEDA" que tiene el origen de los registros la consulta. Al abrirse este formulario nos mostraría todos los registros en los que se encontró la palabra "Presupuesto", hasta aquí es mas o menos a lo que vos habías llegado, ahora sólo debes crear dos botones, uno para desplazarte al registro anterior y otro al registro siguiente, para poder "navegar" por los registros devueltos en la consulta. Y para que te muestre donde esta la palabra "Presupuesto" dentro de todo el campo memo le debes agregar al código de estos botones lo siguiente:

Me.campo_memo.SetFocus
DoCmd.FindRecord "=[Forms]![busqueda memo].[Form]![memo]", acAnywhere, False, , True, , False

En la primera línea le pedimos que el cursor se sitúe en "campo_memo" (nombre de mi campo, que se podría llamar de cualquier manera", es necesario situar el cursor en el campo memo porque la búsqueda se hace sobre el campo activo.
La segunda línea (DoCmd.blablabla) es la búsqueda en cuestión dentro del campo.. con esto logramos que al desplazarse por los registros me ubique la palabra "Presupuesto" en cada registro, sin necesidad de buscarlo "manualmente".

Para que quede un poco más claro el código de los botones de desplazamiento, sería así:

DoCmd.GoToRecord , , acNext
Me.campo_memo.SetFocus
DoCmd.FindRecord "=[Forms]![busqueda memo].[Form]![memo]", acAnywhere, False, , True, , False

Para ir a un registro anterior es el mismo código pero con DoCmd.GoToRecord , , acPrevious

Si no he sido claro en la explicación envíame un mail y te mando un ejemplo.
Saludos.. Nicolás