Buscar registros en tabla de Access desde Excel usando SQL Query, VBA y ADO

Buscar registros en tabla de Access desde Excel usando SQL Query, VBA y ADO

TipVer curso completo Conectar Excel a Access usando VBA y ADO

En este tutorial voy a mostrarte una macro para buscar registros en una Tabla de Access, usando una consulta de tipo SQL. En nuestro tutorial anterior vimos cómo dar de Alta registros a una Tabla de Access. Ahora vamos a buscar esos registros que dimos de alta.

Utilizaremos los mismo conceptos de ADO y Recordset.

Microsoft ActiveX Data Objects (ADO)

ADO es uno de los mecanismos que habilita a las aplicaciones cliente para conectarse a distintos orígenes de datos y acceder y manipular la información o los datos. La conexión de las aplicaciones hacia los orígenes de de datos se hace mediante proveedores OLEDB, que para nuestro tutorial usaremos un proveedor para conectarnos a una Base de datos de Access.

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Qué es un Recordset

Es importante conocer el concepto de Recordset, ya que siempre que nos comunicamos con una Base de datos, sea Oracle, SQL, MySQL o Microsft Access, este concento siempre estará presente.

Un Recordset es una estructura de datos que se usa para almacenar información en una Tabla de una Base de datos o lo que devuelve una consulta o Query. El término Recordset se una en infinidad de lenguajes de programación y prácticamente sirve para dar de alta registros, así como eliminar y actualizar los mismos.

Activar Referencia en el IDE de Visual Basic para aplicaciones

Antes de escribir cualquier código para conectarnos a una base de datos mediante ADO es importante activar la referencia a la librería de ADO.

  • Abrimos el IDE de VBA usando Alt + F11.
  • Abrimos el menú Herramientas > Referencias.
  • Marcamos Microsoft ActiveX Data Objects 6.1 Library.

Activamos la referencia a Microsoft ActiveX Data Objects 6.1 Library (ADO).

Figura 1. Activamos la referencia a Microsoft ActiveX Data Objects 6.1 Library (ADO).

Base de datos de Access

Le hemos realizados algunas modificaciones a la Tabla de Access, añadiéndole una columna de Fecha, para posteriormente, en otro tutorial, aprender a realizar reportes en Excel desde data de Access.

Base de datos y Tabla de Access.

Figura 2. Base de datos y Tabla de Access.

Formulario de búsqueda

Tenemos un UserForm donde buscaremos la información almacenada en nuestra Base de datos de Access. La búsqueda se hará mediante una consulta SQL usando el comodín LIKE que nos buscará valores donde un texto se encuentre dentro de valores completos. En nuestro ejemplo buscaremos todas las filas donde los valores de la columna nombre contengan la letra “s”.

SELECT * FROM MiTabla WHERE nombre LIKE ‘%s%’

Formulario UserForm para buscar data en Tabla de Access usando Query SQL.

Figura 3. Formulario UserForm para buscar data en Tabla de Access usando Query SQL.

Código VBA de la macro

El siguiente código será llamado desde el botón Buscar que se llama CommandButton1.

Nota: Es importante que la base de datos de Access se encuentre en la misma ruta de este archivo para que funcione esta macro. La base de datos tiene como nombre MiBase.accdb.

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Private Sub CommandButton1_Click()
Dim Conn As ADODB.Connection
Dim MiConexion
Dim Rs As ADODB.Recordset
Dim MiBase As String
Dim Query As String
Dim i, j

MiBase = "MiBase.accdb"

Set Conn = New ADODB.Connection
MiConexion = Application.ThisWorkbook.Path & Application.PathSeparator & MiBase

With Conn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .Open MiConexion
End With

Query = "SELECT * FROM MiTabla WHERE nombre LIKE '%" & Me.TextBox1.Value & "%'"

Set Rs = New ADODB.Recordset
Rs.CursorLocation = adUseServer
Rs.Open Source:=Query, _
ActiveConnection:=Conn

'Valir si la consulta devuelve resultados
If Rs.EOF And Rs.BOF Then
    'Borrar la conexión al Recordset
    Rs.Close
    Conn.Close
    'Borrar la memoria
    Set Rs = Nothing
    Set Conn = Nothing
    
    MsgBox "No hay resultados para la consulta", vbInformation, "EXCELeINFO"
    Me.ListBox1.Clear
    Exit Sub
End If

'Asignar número de columnas
With Me.ListBox1
    .ColumnCount = Rs.Fields.Count
End With

'Recorrer el Recordset
Rs.MoveFirst
i = 1

With Me.ListBox1
    .Clear
    
    'Asignar los encabezados
    .AddItem
    
    For j = 0 To 4
        .List(0, j) = Rs.Fields(j).Name
    Next j
    
    Do
        .AddItem
        .List(i, 0) = Rs![ID]
        .List(i, 1) = Rs![Fecha]
        .List(i, 2) = Rs![Nombre]
        .List(i, 3) = Rs![Ventas]
        .List(i, 4) = Rs![Comentarios]
        i = i + 1
        Rs.MoveNext
        
    Loop Until Rs.EOF
End With

'Cerrar la conexión
Rs.Close
Conn.Close
Set Rs = Nothing
Set Conn = Nothing

End Sub

Descargar el archivo de ejemplo

Alta y búsqueda de registros en Tabla de Access desde Excel con VBA.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

You may also like...