Search code examples
ms-accessvbams-access-2010

Launch password protected database and close existing one


I am trying to set up a "Launcher" database which contains VBA code that will open a second database which is password protected. I can then convert the launcher db to accde so the VBA containing the password cannot be read.

I have the following code so far.

Private Sub Form_Load()
 Dim acc As Access.Application
 Dim db As DAO.Database
 Dim strDbName As String

 strDbName = "C:\database Folder\secureDB.accdb"
 Set acc = New Access.Application
 acc.Visible = True
 Set db = acc.DBEngine.OpenDatabase(strDbName, False, False, ";PWD=swordfish")

 acc.OpenCurrentDatabase (strDbName)
 
 Application.Quit
  
End Sub

When the launcher db is opened a form loads which subsequently fires the above code. It works but the problem is the last line which is intended to close the launcher db only but closes both databases. I have also tried opening the main database using Shell but am unable to pass the password this way.

How can I close the first database while keeping the second open?


Solution

  • You can use the following:

    Private Sub Form_Load()
     Dim acc As Access.Application
     Dim db As DAO.Database
     Dim strDbName As String
    
     strDbName = "C:\database Folder\secureDB.accdb"
     Set acc = New Access.Application
     acc.Visible = True
     acc.OpenCurrentDatabase strDbName, False, "swordfish"
     Set db = acc.CurrentDb() 'Don't know why you want a reference to the db
     acc.UserControl = True
     Application.Quit
    End Sub
    

    The relevant part is acc.UserControl = True, that forces the DB to stay visible and stops it from closing as soon as the reference to the Application object gets destroyed.

    A sample database that stores the main database password encrypted with a salted user password can be found in this answer