Twitter Flickr Pinterest LinkedIn YouTube Google Maps E-mail RSS
formats

Conexión desde Excel con una Base de datos.

Publicado en 21 marzo, 2017, por en Excel.

Es esta entrada os mostraré cómo conectar a una base de datos desde Microsoft Excel nada mas abrir el documento o libro. Os dejo el código fuente necesario para funcionar y una base de datos de ejemplo.

Es necesario disponer como mínimo de Excel 2007 en adelante.

La base de datos es en formato Access 2007 y/o superiores. Posee una password de entrada (demo). Cuando se abre la hoja de cálculo Excel, tiene asociado un evento Workopen con las rutinas necesarias para conectar con la base sin necesidad de realizar un DSN. Podría aplicarse cambiando la cadena de conexión a otras bases. Gracias a ello, tenemos la posibilidad de realizar procesamiento de datos en la base sobre la hoja de cálculo. Posibles tareas como calcular datos con formulación en función de los datos de la base.

Para ver el código fuente tendremos que usar la contraseña demo.

En función del nivel asignado en Access, colocado en la variable Global_Nivel, podremos hacer ciertas cosas como mostrar controles, fórmulas, etc…

Cuando activemos las macros al iniciar, se nos solicitará introducir un usuario y una password.

Una vez validados, nos mostrará los datos y cambiará de color la celda.

Para activar la pestaña del ribbon «Programador», es necesario cambiar las opciones de Excel.

El fichero Excel es una libro con macros, dentro, en sus opciones, se han activado las siguientes referencias. Es interesante conocerlas y ver sus posibilidades en caso de conectar con otro tipo de gestores o sistemas.

Para ver el código generado en el IDE, es preciso usar la password, demo. Mediante esta técnica protegemos todo el código del libro, ya que a diferencia de Access, en Excel no se puede compilar las hojas para compilar el código.

Muestro un fragmento del código que valida usuarios (ejemplo).

Private Sub Workbook_Open()
'Procedimiento creado por Oscar de la Cuesta Campillo
' www.palentino.es

On Error Resume Next
 mbMacrosEnabled = True
'Pedir el usuario y password
login = InputBox("Introduzca el usuario (demo):", "Aviso Seguridad de Excel")
Pass = InputBox("Introduzca la password (demo):", "Aviso Seguridad de Excel")

Set cnn = New ADODB.Connection
ruta_base = Application.ActiveWorkbook.Path & "\usuarios.accdb"
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & _
     "Data Source=" & ruta_base & ";" & _
     "Jet OLEDB:Database Password=demo"

Set registro = New ADODB.Recordset
Set registro_log = New ADODB.Recordset

cSQL = "select count(*) as cuenta from usuarios where login ='" & LCase(login) & "' and password = '" & LCase(Pass) & "';"
registro.Open cSQL, cnn, adOpenDynamic, adLockOptimistic
registro_log.CursorType = adOpenOptimistic
registro_log.LockType = adLockOptimistic
registro_log.Open "log", cnn

'Nos preparamos para la gestión del log
registro_log.AddNew
registro_log!Fecha = Date
registro_log!hora = Time
usuario = login
registro_log!login = login

registro_log!Password = Pass
If registro!cuenta = 0 Then
    MsgBox "Acceso no válido, compruebe sus credenciales. ", vbCritical, "Aviso Seguridad"
    registro_log!fallido = "SI"
    registro_log.Update
    registro_log.Close
    registro.Close
    cnn.Close
    Application.Quit
    
Else
'Mostramos la barra de menus si se poseen los permisos adecuados
    registro_log!fallido = "NO"
    registro_log.Update
    registro_log.Close
    registro.Close

'Establecemos las variables globales
Global_usuario = LCase(usuario)
Global_Password = LCase(Pass)

Set registro = New ADODB.Recordset
cSQL = "select nivel from usuarios where login ='" & LCase(login) & "' and password = '" & LCase(Pass) & "';"
registro.Open cSQL, cnn, adOpenDynamic, adLockOptimistic

'Se establece el nivel de acceso a la entrada
global_nivel = registro!Nivel
registro.Close
cnn.Close
DoCmd.Close
MsgBox "Entrada válida a Excel."

  Range("B10").Select
    ActiveCell.FormulaR1C1 = "El usuario " & login & ", posee un nivel " & global_nivel
    Range("B11").Select
    Selection.Interior.Color = 5287936
    
  Range("B11").Select
  ActiveCell.FormulaR1C1 = global_nivel


End If
End Sub

 

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Home Excel Conexión desde Excel con una Base de datos.
© www.palentino.es, desde el 2012 - Un Blog para compartir conocimientos ...

Uso de cookies en mi sitio palentino.es

Este sitio web utiliza cookies para que tengamos la mejor experiencia de usuario. Si continúas navegando estás dando tu consentimiento para la aceptación de las mencionadas cookies y la aceptación de la política de cookies

ACEPTAR
Aviso de cookies