Archive

Posts Tagged ‘ADODB’

Actualización: Exportar de Excel a Access 2007 y 2010 vba

En un post anterior del 14-jun-11, expuse un ejemplo para pasar datos de Excel a Access, pero sólo era para archivos de Access 2003 y anteriores, con extensión .mdb; en esta ocasión les comparto qué modificación hacer para que el mismo ejemplo funcione con bases de datos de Access versión 2007 y 2010, cuya extensión es .accdb.

El cambio será en la línea que dice:

cn.Open "provider=microsoft.jet.oledb.4.0; " & "data source=" & ThisWorkbook.Path & "\Base citas.mdb;"

Y se reemplazará con esta línea:

cn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & "data source=" & ThisWorkbook.Path & "\Base citas.accdb;"

El cambio radica en que la cadena de conexión es diferente para las versiones nuevas de Access.

Referencia:

Exportar de Excel a Access mediante formulario de vba

Ejecutar consulta SQL desde Excel

November 8, 2011 15 comments

Hace algunos días me surgió la necesidad de extraer datos de unas bases de SQL a Excel, a lo cual me di a la tarea de buscar información al respecto. Cuál fue mi sorpresa que no existe mucha información al respecto. Encontré un ejemplo de ejecutar consulta SQL desde Excel del cual tomé el código que realiza la función y adecué un formulario para que sea más amigable la consulta.

Cómo funciona?

El ejemplo funciona si se tiene una cadena de conexión a SQL, y aunque no está probado para MySql no dudo que también funcione, sólo modificando la cadena.

Se muestra un formulario donde se especifica el nombre del servidor, de la base de datos, así como el usuario y la contraseña, además de un espacio para se que introduzca la sentencia SQL a ejecutar.

image

Consideraciones

Se requieren conocimientos básicos de SQL para armar la consulta, así como un servidor SQL local o en red.

Código

Private Sub CommandButton1_Click()
'Llamas la función Ejecutar
Cells.ClearContents
Call Ejecutar(Sheets(2).Range("consulta"), "Hoja1")
End Sub
Function Ejecutar(Sql As String, Hoja As String)
    On Error GoTo ErrorHandler
    Dim cn As Object
    ' crea un objeto Connection
    Set cn = CreateObject("ADODB.Connection")
    ' IMPORTANTE: Indicar la cadena de conexión a usar
    servidor = Sheets(2).Range("servidor")
    base = Sheets(2).Range("base")
    Usuario = Sheets(2).Range("usuario")
    pass = Sheets(2).Range("pass")
    Conexion = "Provider=SQLOLEDB.1;" & _
               "Password=" & pass & ";" & _
               "Persist Security Info=True;" & _
               "User ID=" & Usuario & ";" & _
               "Initial Catalog=" & base & ";" & _
               "Data Source=" & servidor
    'cn.ConnectionString = "Provider=SQLOLEDB.1;Password=s3cr3t0;Persist Security Info=True;User ID=sa;Initial Catalog=Cobranza;Data Source= 192.168.2.6"
    cn.ConnectionString = Conexion
    ' verifica que los parámetros no estén vacios
    If Sql <> vbNullString And Hoja <> vbNullString Then
        ' variable para al rec de ado
        Dim rst As Object
        ' abre la conexión a la base de datos
        cn.Open
        ' crea un nuevo objeto recordset
        Set rst = CreateObject("ADODB.Recordset")
        ' Ejecuta el sql para llenar el recordset
        rst.Open Sql, cn, 1, 3
        ' variables para los indices de las filas y columnas
        c = 0
        f = 0
        ' recorre las columnas, añade el nombre del campo al encabezado
        For i = 0 To rst.Fields.Count - 1
            Sheets(1).Range(Chr(i + 65) & f + 1).Value = rst.Fields(i).Name
        Next
        f = f + 1
        ' recorre todo el recordset hasta el final
        Do While Not rst.EOF
            ' recorre los campos en el registro actual del recordset para recuperar el dato
            For i = 0 To rst.Fields.Count - 1
                ' añade el valor a la celda
                Sheets(1).Range(Chr(c + 65) & _
                                f + 1).Value = rst.Fields(c)
                c = c + 1
            Next
            ' resetea el indice de las columnas
            c = 0
            ' Referencia al registro actual (incrementa )
            f = f + 1
            ' Siguiente registro
            rst.MoveNext
        Loop
        ' cierra y descarga las referencias
        On Error Resume Next
        rst.Close
        cn.Close
        Set cn = Nothing
        Set rst = Nothing
    End If
    Call Macro1
    Exit Function
ErrorHandler:
    MsgBox "Ha ocurrido un error: " & Err.Description, vbExclamation, "EXCELeINFO"
End Function

:: Descargar EXCELeINFO – Ejecutar consulta SQL desde Excel

Categories: Excel, Macros, Trucos, vba Tags: , , , , ,