2015-11-09

Usar un cuadro combinado para buscar al teclear en Access

Title Queremos poder filtrar los registros de un formulario continuo mediante un cuadro combinado. Según tecleemos el formulario se filtrará y permitirá coincidencias parciales en la búsqueda. Utilizaremos como ejemplo la base de datos Neptuno.

Solución

  1. Creamos un formulario continuo basado en la tabla Clientes.
    1. En el panel de navegación, clic en la tabla Clientes.
    2. En la pestaña Crear, clic en Más formularios > Varios elementos.

  2. Insertamos un cuadro combinado independiente y le damos el nombre de Cuadro_combinado
  3. En la Hoja de propiedades del cuadro combinado, en la pestaña Datos modificamos estas tres propiedades
  4. En Origen de fila, introducimos la siguiente consulta o la creamos con el generador de consultas (clic en los 3 puntos suspensivos).

    SELECT Clientes.NombreCompañía FROM Clientes; 
    
  5. En la Hoja de propiedades del cuadro combinado, en la pestaña Eventos, clic en Al cambiar y copiamos el siguiente código:

    Private Sub Cuadro_combinado_Change2()
    ' Elimina el filtro del formulario,
    ' si el cuadro combinado está vacío
    If Nz(Me.Cuadro_combinado.Text) = "" Then
        Me.Form.Filter = ""
        Me.FilterOn = False
    ' Si se filtra un ítem del cuadro combinado,
    ' realiza una búsqueda exacta en el formulario
    ElseIf Me.Cuadro_combinado.ListIndex <> -1 Then
       Me.Form.Filter = "[NombreCompañía] = '" & _
          Replace(Me.Cuadro_combinado.Text, "'", "''") & "'"
       Me.FilterOn = True
    ' Filtra en formulario con una coincidencia parcial
    Else
        Me.Form.Filter = "[NombreCompañía] Like '*" & _
           Replace(Me.Cuadro_combinado.Text, "'", "''") & "*'"
        Me.FilterOn = True
    End If
    ' Mueve el cursor al final del cuadro combinado
    Me.Cuadro_combinado.SetFocus
    Me.Cuadro_combinado.SelStart = Len(Me.Cuadro_combinado.Text)
    End Sub
    

Empleamos la función Replace para reemplazar el apóstrofe simple ' por el doble ''. Pues si no, al buscar compañías con apóstrofe generaría un error.

Resultado

Ahora podemos o bien seleccionar un elemento de la lista del cuadro combinado, o teclear la cadena de texto que deseemos. Como se puede ver en la imagen, realiza una búsqueda parcial de las cadenas de texto: super, comi or chin.

Referencias

Entradas relacionadas

10 comentarios:

  1. Buenas tardes, la idea esta muy buena y quiero ver de Implementarla en mi Access, pero no entiendo los nombres de las variables con respecto a mi access, cuales son las que tengo que cambiar y a que nombres serian de mi access.....
    Gracias

    ResponderEliminar
  2. Buenas tardes!
    Me parece muy bunea idea esto que propones en el access, la pregunta es: Que tengo que cambiar para adaptarlo a mi access? las variables a cambiar cuales serian?

    ResponderEliminar
  3. Pude hacerlo funcionar, te hago otra consulta, si quiero tener 2 combos y que puedan complementarse para hacer esto mismo, como hago? sabrías decirme?
    En tu ejemplo seria.... Nombre de compañia y otro combo box seria por ejemplo cargo del contacto.

    ResponderEliminar
    Respuestas
    1. Tienes que vincular el origen de fila del segundo cuadro combinado con el primer cuadro combinado. Te recomiendo que plantees tu pregunta en un foro de Access detallando con mucha más precisión lo que deseas conseguir. Saludos

      Eliminar
  4. Funciona muy bien para los campos con formato texto. Pero qué tengo que modificar en el código para que me filtre campos con formato númerico?

    ResponderEliminar
    Respuestas
    1. Gracias por el comentario. ¿Qué es lo que has intentado hacer para que funcione? Saludos.

      Eliminar
  5. Hola. Muy bueno!! Te hago una consulta . Tengo una base de datos de venta de electrodomesticos y demas y lo que quiero es buscar el producto ingresando los ultimos 5 o 4 digitos del codigo. Lo que has hecho me viene de 10, solo me faltaria que ingresando los ultimos numeros del codigo me filtre el producto. GRACIASSS

    ResponderEliminar
    Respuestas
    1. Hola Agostina. Lo que describes es una búsqueda de una coincidencia parcial y ya está cubierto en esta entrada. Lee con atención el artículo y adáptalo a tus propósitos. Saludos.

      Eliminar

  6. Muy Buena opción me ha funcionado a la primera y ademas es rapidísimo en las búsquedas estoy buscando entre 60000 registros partes del campo separado por "*" y va de escandalo.
    Muchas Gracias.

    ResponderEliminar
    Respuestas
    1. Da gracias leer comentarios como éste. Muchas gracias y un saludo.

      Eliminar

Nube de datos