如何使用VBA从同一个DB文件中重新启动Microsoft Access 2007 .. ??
我正在开发一个最终将被打包的数据库&随运行时分发。对于开发,我改变了各种UI设置,并将文件重命名为&介于* .accdb和* .accdr之间。但我想使用一个完全编程的方法,然后我将其分配给一个按钮或按键。
但是,正如任何尝试过的人都可以告诉你的那样,人们不能轻易地使用VBA从同一个数据库中重启Access。我在这里尝试了代码:MS Access: how to compact current database in VBA,但是我收到了错误消息"您无法通过运行宏或Visual Basic代码来压缩打开的数据库。"
我有各种半生不熟的想法如何"弹跳"重新启动VBS脚本,CMD文件或其他Accdb文件,但我想问其他人可能已成功完成此操作.. ??
其他人通过多种方式成功完成了这项工作...... ??
答案 0 :(得分:1)
我有以下程序复制新版本的前端然后打开。不幸的是,当IT收紧安全性并且无法再以编程方式复制文件时,不得不放弃。不要问我为什么它有效,它被发现代码。以前,我让VBA调用VBScript来复制并重新打开。
Private Sub Form_Load()
'Check for updates to the program on start up - if values don't match then there is a later version
If Me.tbxVersion <> Me.lblVersion.Caption Then
'because administrator opens the master development copy, only run this for non-administrator users
If DLookup("Permissions", "Users", "UserNetworkID='" & Environ("UserName") & "'") <> "admin" Then
'copy Access file
CreateObject("Scripting.FileSystemObject").CopyFile _
gstrBasePath & "Program\Install\MaterialsDatabase.accdb", "c:\", True
'allow enough time for file to completely copy before opening
Dim Start As Double
Start = Timer
While Timer < Start + 3
DoEvents
Wend
'load new version - SysCmd function gets the Access executable file path
'Shell function requires literal quote marks in the target filename string argument, apostrophe delimiters fail, hence the quadrupled quote marks
Shell SysCmd(acSysCmdAccessDir) & "MSAccess.exe " & """" & CurrentProject.FullName & """", vbNormalFocus
'close current file
DoCmd.Quit
End If Else
'tbxVersion available only to administrator to update version number in Updates table
Me.tbxVersion.Visible = False
Call UserLogin End If
End Sub
答案 1 :(得分:0)
我使用此处提供的实用程序:http://blog.nkadesign.com/2008/ms-access-restarting-the-database-programmatically/
简而言之,当您运行此命令时,Access将退出。但是,在退出之前,它将在与数据库相同的文件夹中创建一个小批处理文件,其中包含几个命令。然后退出然后批处理文件将等待删除锁定文件(laccdb文件)。一旦删除(如果您是数据库中唯一的用户,应该是这样),批处理文件然后重新启动应用程序。
还有一个选项可以在关闭时压缩数据库。它在我的环境中对我来说非常好用,并且我已经成功地将它用于5年的某个地方。