Búsqueda en registros en una base de datos de acces

Estoy haciendo una base de datos que es un recetario de cocina. Tengo varias tablas creadas entre ellas una con ingredientes (una sola columna para que los ingredientes salgan en una lista al crear la receta) y otra con las recetas ( con varios campos de varios tipos). La idea es poder crear un formulario que al introducir una palabra la busque en el campo Receta de la tabla Recetas o en el campo Ingrediente de la tabla Ingredientes, y muestre todos los registros que incluyan esa palabra en esos campos...

1 respuesta

Respuesta
1

Una forma para hacerlo serís esta:

Añades un cuadro combinado a tu formulario, lo llamas cboCampo (Pestaña Otras->Nombre), le pones en origen de datos Lista de valores, y en Origen de la fila, le pones: "Ingredientes";"Recetas"

Añades un cuadro de texto y lo llamas txtBusca.

Añades un Botón que llamarás cmdBuscar, y con Etiqueta "Buscar", y le generas este código:

Private Sub cmdBuscar_Click()'Definimos las variablesDim vCamp As String, vText As StringDim miFiltro As String'Cogemos los valores seleccionadosvCamp = Nz(Me.cboCampo.Value, "")vText = Nz(Me.txtBusca.Value, "")'Si no hay valor en el combo o en el textbox sale del procesoIf vCamp = "" Or vText = "" Then Exit SubmiFiltro = "[" & vCamp & "] LIKE '* " & vText & " *' OR"miFiltro = miFiltro & "[" & vCamp & "] LIKE '" & vText & "*' OR "miFiltro = miFiltro & "[" & vCamp & "] LIKE '* " & vText & "*' OR "miFiltro = miFiltro & "[" & vCamp & "] LIKE '" & vText & "*' OR "miFiltro = miFiltro & "[" & vCamp & "] LIKE '* " & vText & "' OR "miFiltro = miFiltro & "[" & vCamp & "]= '" & vText & "'"End If'Aplicamos el filtro al formularioMe.Filter = miFiltro'Activamos el filtroMe.FilterOn = TrueEnd Sub

Y para acabar, añades un Botón que llamarás cmdLimpiar, y con Etiqueta "Quitar Filtro" (o la que quieras), y le generas este código:

Private Sub cmdLimpiar_Click()

With Me.cboCampo.Value = Null.txtBusca.Value = Null.FilterOn = FalseEnd With

End Sub

Un par de comentarios a este código:

1º/ Tal y como está, te servirá si el formulario lo basas en una consulta que te recoja los datos de las dos tablas (que sería lo normal para poder buscar por los dos campos). Si no fuera este el caso, tendrás que modificar la parte del filtro del código para que te busque el campo en la tabla correspondiente)

2º/ Para que quede más "bonito", coloca el cuadro combinado, el cuadro de texto y los dos botones en el encabezado o pie del formulario, pon todos los controles del Detalle del formulario ocultos (Propiedades, Pestaña Formato, Visible: No), y añades en el código de cmdBuscar, después de "Me.FilterOn = True" , tantas lineas como esta necesites, cambiando lo que está en negrita por los nombres que tengan tus controles): Me.NombreControl.Visible=True, y en el código de cmdLimpiar, después de .FilterOn=False, añades tantas veces como necesites: .NombreControl.Visible=False

Creo que me explique mal...

La idea es buscar en una de las dos tablas no en las dos a la vez...

Es que trasteando en los formularios y los diseños de formularios y los botones vi que en el asistente de creación de botones daba la opción "Abrir un formulario y buscar los datos específicos que se van a mostrar"; entonces me pide un formulario que abrir (en mi caso recetas) y donde se va a buscar y que le diga en que cuadro de texto (que ya lo he creado sin ninguna acción ni macro vinculada, un cuadro de texto vacío) donde escribo la palabra a buscar. Pero si escribo "cerdo" y que lo busque en las recetas, me aparece el formulario recetas pero sin ninguna receta, según el no coincide nada con la búsqueda. Pero si pongo Costillas de cerdo al Horno si me muestra esta receta. Lo que quiero es que me muestre cualquier receta donde en el titulo (campo Receta de la tabla recetas) aparezca la palabra cerdo, ya sean costillas o lomo... XD

Te muestro el formulario que he creado para las búsquedas:

Como ves la idea es buscar en las recetas o en los ingredientes.

pues usando el asistente de la creación de los botones esos de las lupitas que ves me ccrea una macro incrustada en el evento hacer clic de cada botón y al entrar a modificarla me aparece esto:

Me podrias decir como se puede modificar lo que hay en la condicion WHERE para que me haga lo que quiero?

Muchisimas gracias otra vez!!!

Ahora te entendí perfectamente... Actualmente no te funciona como quieres porque la condición de búsqueda que tienes (el WHERE) le dice a access que busque el valor exacto que metes en el cuadro de texto (algo así porque en la imagen no lo veo bien...): WHERE "[Ingrediente]=" & "'" & [Texto9] & "'"

Para que te busque por aproximación, tienes que crear el filtro (el WHERE) con el operador LIKE en vez del = y usar el carácter comodín *, para que te quede algo parecido al código que te puse antes:

WHERE "[Ingrediente] LIKE " & "'* " & [Texto9] & " *'" (Por ejemplo, esto te buscaría cualquier cadena que contenga la palabra que escribas en Texto9, lo que no se es si te encontrará las que empiecen por esa palabra y/o acaben con esa).

Si no es el caso, tendrás que ir encadenando condiciones con OR, por ejemplo:

WHERE "[Ingrediente] LIKE " & "'* " & [Texto9] & " *' OR [Ingrediente] LIKE " & "'" & [Texto9] & " *' OR [Ingrediente] LIKE " & "'* " & [Texto9] & "'"

Si quieres complicarlo más, puedes añadir otros OR sin separar los * de [Texto9] (fijate que en los WHERE anteriores estaban separados de las comillas) para que te filtre también por trozos de palabra, por ejemplo, si pones en el cuadro de texto Costi, te saldrían recetas para costillas, costillar...

A ver si ahora funciona.

He probado con el primer código que me das y al darle al botón me aparece un cuadro de dialogo que pone "Introduzca el valor del parámetro Texto9" meto la misma palabra que en el cuadro de texto y se me abre el formulario tal cual sin filtrado ni nada. Con el segundo código tampoco me funciona, me hace lo mismo...

¿Te importa mandarme la BD para verla?

Pûedes subirla a www.filebig.net y me pegas aquí el enlace de descarga.

http://filebig.net/files/wAxsjJfJUM

Aquí la tienes. No te enfades mucho se ves muchas barbaridades hechas en ella... XD

No sé mucho de bases de datos y las hago por el método prueba error... jeje

http://www.filebig.net/files/w2UaQBZgwe

Listo! Al final no conseguí que la macro incrustada funcionara, así que te programé un pequeño código en vba, del estilo del que te decía al principio.

Muchísimas gracias por tu ayuda!!!

Yo es que no tengo ni idea de VBA... Lo único que sé de programación es algo que vi en el ciclo formativo de C++ y C y un poco muy poco de ensamblador para los PIC... Pero fuera de ahí...

Si necesitas alguna ayuda en temas relacionados con electrónica, telecomunicaciones, o algo relacionado... mi correo es [email protected]

Bueno no se si es legal en esta pagina ponerte el correo... Si no pues me gustaría formar parte de esta pagina como experto como tu, explicame como que no lo veo por la pagina... XD

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas