Access VBA - Launch password protected database and close existing one

南笙酒味 提交于 2020-01-03 03:02:11

问题


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 actually closes both databases. I have also tried opening the main database using shell but am unable to pass the password this way.

Does anyone know how I can just close the first database while keeping the second one open?


回答1:


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



来源:https://stackoverflow.com/questions/46193339/access-vba-launch-password-protected-database-and-close-existing-one

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!