Access & VBA FAQ
| | | |
Indice de temas
Tablas
Consultas
Formularios
Informes
Macros
Módulos
Base de datos
Miscelánea
API
Utilidades
Problemas
Cadenas
Fechas
Todos los temas
Base de datos : PwdOpenCurrentDatabase
Autor/es:
Juan M Afán de Ribera
Pregunta : ¿Cómo puedo, mediante automatización, abrir una instancia de una base de datos que tenga contraseña ?
Respuesta : Si estás trabajando con Access XP o superior sólo tienes que emplear el método Application.OpenCurrentDatabase y en el último de sus argumentos indicarle la contraseña.

Si en cambio, estás trabajando con alguna versión inferior a ésta, deberías emplear un pequeño truco y encapsular el método OpenCurrentDatabase en una función. Aquí tienes ya una hecha llamada PwdOpenCurrentDatabase y que contiene los siguientes

Argumentos

ArgumentoDescripción
bstrPasswordRequerido. Contraseña de la base de datos que se quiere abrir
FilePathRequerido. Ruta completa de la base de datos que se quiere abrir
ErrNumberRequerido. Variable en la que se almacenará un número de error, en el caso de que la función falle
ExclusiveOpcional. Abre la base de datos en modo uso exclusivo (True) o en modo uso compartido (False) (valor predeterminado)
VisibleOpcional. Hace visible la nueva instancia de la base de datos (True) o invisible (False) (valor predeterminado)
Si la función tiene éxito, devuelve una varible objeto tipo Access.Application, que apuntará a la instancia de la base de datos que se haya abierto. En caso contrario, devolverá Nothing y el argumento ErrNumber contendrá el número de error que se haya producido

Ejemplo de uso:
' El siguiente código abre la base "C:\MiBd.mdb" que tiene como contraseña
' "123456", en modo compartido y haciendola visible
'
Sub AbrirBDContraseña()
Dim oApp As Access.Application
Dim NumeroError As Long

    Set oApp = PwdOpenCurrentDatabase( _
                             "123456", _
                             "c:\MiBd.mdb", _
                             NumeroError, _
                             False, _
                             True)

    If oApp Is Nothing Then
        MsgBox "Error: " & NumeroError _
              & vbCr & Error(NumeroError)
              Exit Sub
    Else
        ' aquí tu código
    End If

    If Not oApp Is Nothing Then oApp.Quit
    Set oApp = Nothing

 End Sub
'---------------------------------------------------------
'
' PwdOpenCurrentDatabase
'
' Código escrito originalmente por Juan M Afán de Ribera.
' Estás autorizado a utilizarlo dentro de una aplicación
' siempre que esta nota de autor permanezca inalterada.
' En el caso de querer publicarlo en una página Web,
' por favor, contactar con el autor en
'
'     accessvbafaq@ya.com
'
' Este código se brinda por cortesía de
' Juan M. Afán de Ribera
'
Function PwdOpenCurrentDatabase( _
                        bstrPassword As String, _
                        FilePath As String, _
                        ErrNumber As Long, _
                        Optional Exclusive As Boolean, _
                        Optional Visible As Boolean) _
                        As Access.Application
            
Dim db As Object 'DAO.Database
Dim oApp As Access.Application

    On Error GoTo err_PwdOpenCurrentdatabase
    Set oApp = New Access.Application
    
    Set db = oApp.DBEngine.OpenDatabase( _
                           FilePath, _
                           True, False, _
                           ";PWD=" & bstrPassword)
             
    oApp.OpenCurrentDatabase FilePath, Exclusive
    oApp.Visible = Visible
    
    Set PwdOpenCurrentDatabase = oApp
    ErrNumber = 0
    
exit_Function:
    
    If Not db Is Nothing Then
        db.Close
        Set db = Nothing
    End If
    Set oApp = Nothing
    
    Exit Function
    
err_PwdOpenCurrentdatabase:
    
    ErrNumber = Err.Number
    Set PwdOpenCurrentDatabase = Nothing
    Resume exit_Function
    
End Function
'---------------------------------------------------------

Ejemplos:

 

Temas relacionados:

PwdTransferDatabase

Abrir un objeto Database con contraseña

 

Última actualización: 19/12/2004