Access, Excel, VBA y más

Configurando la conexión al servidor de bases de datos con ADO

¡Vamos a preparar la conexión!

Una vez que hemos visto como instalar el Driver ODBC que nos permitirá comunicarnos con nuestro servidor de Bases de Datos ha llegado el momento de crearnos un módulo en Access que nos permita acceder de forma cómoda a nuestros datos alojados en dicho servidor.

¿Qué conseguiremos con dicho módulo? pues simplemente tenerlo a mano para que, cada vez que necesitemos información del servidor, lo llamemos para que el módulo, que conocerá la dirección del servidor, el usuario y la contraseña, automáticamente nos establezca la conexión con el servidor para,  a continuación, pedirle los datos que necesitemos.

Teniendo claro este concepto vamos a abrir el editor de VBA desde nuestro Access y le damos a crear un nuevo módulo:

Y dentro del módulo pegaremos el siguiente código:

Global CnServer As New ADODB.Connection

Function ConexionSQL() As Boolean
Dim NumReg As Long

    ConexionSQL = False
    '
    ' comprobamos que lea registros aunque este abierta
    '
    If CnServer.State = 1 Then
        On Error GoTo Errores1
        CnServer.Execute "SELECT * FROM TablaCualquiera", NumReg
        ConexionSQL = True
        Exit Function
    End If

SigoConexion:
    gl_var = SysCmd(acSysCmdSetStatus, "Recuperando conexión SQL")
    '
    ' nos aseguramos de que esté cerrada
    '
    On Error Resume Next
    CnServer.Close
    Set CnServer = Nothing
    On Error GoTo 0
    '
    ' y ahora la abrimos
    '
    On Error GoTo Errores
    

   CnServer.ConnectionString = "Provider=SQLNCLI11.1;Integrated Security=;Persist Security Info=False;User ID=Usuario;Pwd=Contraseña;Initial Catalog=BaseDeDatos;Data Source=direccion.database.windows.net;Initial File Name=;Server SPN="
    
    CnServer.Properties("Current Language") = "spanish"
    CnServer.Open
    ConexionSQL = True
    gl_var = SysCmd(acSysCmdClearStatus)
    Exit Function
    
Errores:
    MsgBox "Hay un problema de conexión", vbCritical, TituloMsgbox

Errores1:
    On Error GoTo 0
    GoTo SigoConexion
    
End Function

Una vez lo tengamos pulsamos botón de Guardar y listo.

Vamos a intentar explicar lo que hace cada vez que lo llamemos de forma muy sencilla. Cada vez que llamemos al módulo este comprobará primero si ya existe una conexión abierta, para ello intentará leer una de las tablas que hay en el servidor «CnServer.Execute «SELECT * FROM TablaCualquiera», NumReg». Si tiene acceso al servidor, este devolverá los registros de dicha tabla confirmándonos de que la conexión está abierta. Le decimos a la función que la conexión es correcta y salimos.

Como recomendación diré que la tabla que compruebo suele ser la más pequeña y que menos registros contenga del servidor, incluso, si es necesario, tendremos una tabla con un solo registro sólo para esta comprobación. Recuerda que lo que pretendemos es verificar que hay acceso al servidor, y si lo hay, podremos leer cualquier tabla de las disponibles.

¿Y si no tenemos acceso a la tabla? pues significará que nuestra conexión está cerrada y por tanto vamos a proceder a abrirla. Si sigues leyendo el código verás que en las siguientes líneas lo que hacemos es darle los parámetros de la conexión como la dirección del servidor, el usuario, la contraseña y la  base de datos a la que queremos acceder, y la abrimos:

CnServer.ConnectionString = "Provider=SQLNCLI11.1;Integrated Security=;Persist Security Info=False;User ID=Usuario;Pwd=Contraseña;Initial Catalog=BaseDeDatos;Data Source=direccion.database.windows.net;Initial File Name=;Server SPN="
    
    CnServer.Properties("Current Language") = "spanish"
    CnServer.Open
    ConexionSQL = True

Fíjate que en la línea CnServer.ConextionString, dentro de todos los parámetros que tiene sólo tendremos que sustituir los parámetros:

Si los parámetros son correctos, y tenemos acceso al servidor, nuestro módulo abrirá la conexión y, con ella abierta, podremos pedirle datos, lo que haremos en el siguiente artículo.

Salir de la versión móvil