No consigo activar una macro de password de acceso a la BD

Hola, tengo una BD y he insertado una macro de acceso a la base de datos mediante contraseña. También he incluido el dialogo correspondiente pero no se activa al abrir el programa. He comprobado el nombre del dialogo por si me hubiera equivocado pero es correcto. No se si tengo que hacer algo mas o, eso es todo. El texto “txtContraseña” es el nombre del campo del dialogo donde se introduce la contraseña. Esta macro la he cogido de ejemplo de otra base de datos en la que si funciona. Podríais ayudarme por favor. Gracias.
Esta es la macro:
Sub Password ()
Dim oDlg As Object
Dim Res As Integer
Dim Control as Object
oDlg = CargarDialogo( “Standard”, “Dialog1” )
Do
Res = oDlg.execute()
If Res = 1 Then
If Not (oDlg.getControl(“txtContraseña”).Text = “1234”) Then 'AQUI SE CAMBIA LA CONTRASEÑA
Res = 0
co1 = co1 + 1
oDlg.getControl(“txtContraseña”).Text = “”
End If
If co1 > 3 Then
Res = 1
End If
Else
oDlg.dispose()
Control = ThisDatabaseDocument.CurrentController
If Not Control.IsConnected Then Control.Connect
co1 = 5
End If
Loop While Res = 0
oDlg.dispose()
Control = ThisDatabaseDocument.CurrentController
If Not Control.IsConnected Then Control.Connect
ThisDatabaseDocument.FormDocuments.GetByName(“form_menu_principal”).Open
End Sub

Sub ActivarDocumento()
If co1 > 3 Then
ThisDatabaseDocument.close( True )
Else
co1 = 0
End If
End Sub

'Funcion para cargar un cuadro de dialogo en memoria
'y regresa el cuadro de dialogo
Function CargarDialogo(Libreria As String, Nombre As String)

Dim oLibreria as Object
DialogLibraries.LoadLibrary( Libreria )
oLibreria = DialogLibraries.GetByName( Libreria )
CargarDialogo = CreateUnoDialog( oLibreria.getByName( Nombre ) )
End Function

¡Puff! ¡Qué bueno sería si cuando comenzamos a hacer macros primero aprendiéramos a indentar, me he comido los ojos intentando ver esas macros, pero me ha sido imposible…

En cualquier caso, para que alguna de esas funciones o procedimientos se ejecute al abrir Base, deben estar asociadas a algún evento, por ejemplo, en este caso parece que lo adecuado sería asociarla al evento Abrir documento del archivo .odb. ¿Eso lo has hecho?. Porque ninguna macro se ejecuta si no se llama de alguna manera…

De todas las formas, creo que esa macro (y probablemente ninguna otra) no resuelve el problema.
Por ejemplo, en el archivo que te anexo tienes una macro que presenta un diálogo (no importa la contraseña que pongas siempre cierra la base de datos.

Si al abrir no ejecutas las macros (yo lo tengo configurado para que pregunte, es decir, seguridad de macros = medio), no se ejecuta la macro que muestra el diálogo y por tanto tienes acceso libre a la base de datos. Esto se puede solucionar, pero es muy laborios.

Por otro lado, ese archivo (la macro) tiene un error (que no se muestra en ningún momento) al cerrar la base de datos , pero que hace que la base de datos se quede abierta (conectada) y depende en qué circunstancias se pueda burlar la petición de contraseñas. Por ejemplo, ábrela con macro, acepta y se cerrará, vuelve a abrirla y no te pedirá la contraseña… (si ahora cierras todo ordenadamente, la siguiente vez pedirá la contraseña)

Un error de este tipo es muy fácil tener en cualquier macro y nos dejará la base de datos abierta.

Bueno, si persistes en la intención de continuar con tus macros, en la base de datos adjunta puedes ver como activar la macro:

  • Ábrela sin macros
  • Ve al menú Herramientas > Personalizar > Eventos

Ahí se ve el la macro que se ejecuta al abrir el archivo.

Luego puedes ir a editar Macros y ver la macro. Si descubres el error me lo dices, que yo no lo he descubierto…

Por cierto, si realmente tienes necesidad de una base de datos segura ve pensando en una base de datos de servidor, pero en ese caso hay que estudiar un poco más…

concatenate.odb (6,1 KB)

Muchas Gracias. Lo miraré y si descubro algo te digo.
Un saludo