2017-09-13 84 views
1

我想建立一个包含vba代码的“Launcher”数据库,它将打开第二个受密码保护的数据库。 (然后我可以转换发射分贝ACCDE所以不能读取包含密码的VBA)访问VBA - 启动密码保护的数据库并关闭现有的数据库

我有下面的代码到目前为止...

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 

当启动数据库打开一个窗体加载随后触发上述代码。它的工作原理,但问题是只打算关闭启动程序数据库的最后一行,但实际上关闭了两个数据库。我也尝试使用shell打开主数据库,但无法通过这种方式传递密码。

有谁知道我怎么能关闭第一个数据库,同时保持第二个打开?

+0

找到我建议在一个shell脚本命令行选项打开或搜索“接入前端更新”看到他们如何做到这一点(我认为其中一种叫做mdbloader)。 – BitAccesser

+0

或者尝试'acc.Application.Quit'。 – BitAccesser

+0

请注意,访问数据库可以反编译,所以可以读取字符串(通过一些努力)。正如我以前的评论中所说的,我有一个数据库,它存储了一个带有用户密码的加密数据库密码,因此只有具有有效密码的用户才能登录。 –

回答

4

您可以使用以下方法:

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 

相关部分是acc.UserControl = True,迫使DB留察觉,并立即关闭为基准Application对象被销毁停止。

存储与腌用户密码加密的主数据库密码的样本数据库,可以在this answer

+0

谢谢。我之前没有听说过UserControl方法。我一直被困在这个问题上。我试图避免为每个用户提供一个密码,这就是为什么我无法使用其他方法。再次感谢您的帮助 – Leroy

+1

顺便提一下,如果您想将此作为对第一个问题的回答,我很乐意接受这一点。如果不是,我只是自己添加它,所以问题不会公开。只是觉得你应得的信用 – Leroy

+0

_UserControl_ - 这对我来说是新的。从来没有需要,但... – Gustav