|
|
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 | Argumento | Descripción | | Pwd | Requerido. 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 argumentos | El 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 |
|