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 : PwdTransferDatabase
Autor/es:
Juan M Afán de Ribera
Pregunta : Hasta ahora había utilizado sin problemas el método TransferDatabase para importar, exportar o vincular objetos desde una base de datos a otra. Pero ahora me encuentro con la dificultad de hacerlo con una base de datos que posee contraseña. Cada vez que ejecuto el método TransferDatabase me aparece un cuadro de diálogo pidiéndome esa contraseña. La contraseña la conozco, pues yo mismo la he puesto, pero me gustaría que todo el proceso se hiciera de manera transparente para el usuario y no apareciera ese cuadro de diálogo.

¿Hay alguna manera de hacer esto?
Respuesta : Sí, se puede hacer empleando un pequeño truco y encapsulando el método TransferDatabase en una función personalizada llamada PwdTransferDatabase y que constará de los siguientes

Argumentos

ArgumentoDescripción
PwdRequerido. Cadena con la contraseña de la base de datos desde la que se quiere importar o vincular y hacia la que se quiera exportar
Resto de argumentosEl resto de argumentos son exactamente igual a los que aparecen en el método TransferDatabase del objeto DoCmd. Consultar en la ayuda sobre VBA de Access.
Si la función tiene éxito devuelve -1. En caso contrario devuelve el número de error que se haya producido.

Ejemplo de uso:
' con este código importaríamos la tabla "MiTabla" desde la base de datos
' "C.\MiBd.mdb", que tiene asignada la contraseña "123456"
Dim ret As Long

    ret = PwdTransferDatabase( _
                               "123456", _
                               acImport, _
                               "Microsoft Access", _
                               "c:\MiBd.mdb", _
                               acTable, _
                               "MiTabla", _
                               "MiTabla")
    
    If ret = -1 Then
        MsgBox "La tabla 'MiTabla' se importó correctamente"
    Else
        MsgBox "Se ha producido el error " & ret _
        & " al intentar importar la tabla 'MiTabla'"
    End If
'---------------------------------------------------------
'
' PwdTransferDatabase
'
' 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 PwdTransferDatabase( _
                Pwd As String, _
                Optional TransferType _
                         As AcDataTransferType = acImport, _
                Optional DatabaseType, _
                Optional DatabaseName, _
                Optional ObjectType As AcObjectType = acTable, _
                Optional Source, _
                Optional Destination, _
                Optional StructureOnly, _
                Optional StoreLogin) As Long
                            
Dim db As Object 'DAO.Database

    On Error GoTo err_PwdTransferDatabase
    Set db = DBEngine.OpenDatabase( _
                                   DatabaseName, _
                                   True, _
                                   False, _
                                   ";PWD=" & Pwd)
 
   DoCmd.TransferDatabase _
                          TransferType, _
                          DatabaseType, _
                          DatabaseName, _
                          ObjectType, _
                          Source, _
                          Destination, _
                          StructureOnly, _
                          StoreLogin
    
    PwdTransferDatabase = -1
    
exit_Function:
    
    If Not db Is Nothing Then
        db.Close
        Set db = Nothing
    End If
    
    Exit Function
    
err_PwdTransferDatabase:

    PwdTransferDatabase = Err.Number
    Resume exit_Function

End Function
'---------------------------------------------------------
Si estamos trabajando con Access 97, entonces el formato de la función debería ser este otro (cambia la declaración de la función, pues en esa versión no se reconocen las variables declaradas por usuario tipo enumeración)
'---------------------------------------------------------
'
' PwdTransferDatabase
'
' 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 PwdTransferDatabase( _
                  Pwd As String, _
                  Optional TransferType As Long, _
                  Optional DatabaseType, _
                  Optional DatabaseName, _
                  Optional ObjectType As Long, _
                  Optional Source, _
                  Optional Destination, _
                  Optional StructureOnly, _
                  Optional StoreLogin) As Long
                            
Dim db As Object 'DAO.Database

    On Error GoTo err_PwdTransferDatabase
    Set db = DBEngine.OpenDatabase( _
                                   DatabaseName, _
                                   True, _
                                   False, _
                                   ";PWD=" & Pwd)
 
   DoCmd.TransferDatabase _
                          TransferType, _
                          DatabaseType, _
                          DatabaseName, _
                          ObjectType, _
                          Source, _
                          Destination, _
                          StructureOnly, _
                          StoreLogin
    
    PwdTransferDatabase = -1
    
exit_Function:
    
    If Not db Is Nothing Then
        db.Close
        Set db = Nothing
    End If
    
    Exit Function
    
err_PwdTransferDatabase:

    PwdTransferDatabase = Err.Number
    Resume exit_Function

End Function
'---------------------------------------------------------

Ejemplos:

 

Temas relacionados:

PwdOpenCurrentDatabase

Abrir un objeto Database con contraseña

 

Última actualización: 19/12/2004