【问题标题】:How can Microsoft Access be restarted with VBA...from within Microsoft Access..?如何使用 VBA...从 Microsoft Access 中重新启动 Microsoft Access..?
【发布时间】:2018-01-14 05:35:06
【问题描述】:

如何使用 VBA 从同一个 DB 文件中重新启动 Microsoft Access 2007..??

我正在开发一个最终将与运行时一起打包和分发的数据库。为了开发,我正在更改各种 UI 设置,并在 *.accdb 和 *.accdr 之间来回重命名文件。但我想使用完全编程的方法,然后我会将其分配给按钮或按键。

但任何尝试过的人都可以告诉您,无法轻松地使用 VBA 从同一个数据库中重新启动 Access。我在这里尝试了代码:MS Access: how to compact current database in VBA,但收到错误消息“您无法通过运行宏或 Visual Basic 代码来压缩打开的数据库。”

我有各种半生不熟的想法,如何从 VBS 脚本、CMD 文件或其他 Accdb 文件“反弹”重新启动,但我想问还有谁可能成功地做到了这一点..??

其他人通过哪些方式成功地做到了这一点..??

【问题讨论】:

  • 当我需要定期压缩我的数据库时,我将主表放在一个数据库中,然后只使用第二个作为前端,包括宏(这显然可以压缩“数据" 数据库)。
  • 你为什么用2007?
  • 2007 年是我们所拥有的,预算不允许为新版本花费大量资金,而 2007 年足以满足我们的需求。

标签: ms-access vba ms-access-2007


【解决方案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

【讨论】:

    【解决方案2】:

    我使用这里提供的实用程序:http://blog.nkadesign.com/2008/ms-access-restarting-the-database-programmatically/

    简而言之,当您运行此程序时,Access 将退出。但是,在它退出之前,它将在与数据库相同的文件夹中创建一个小批处理文件,其中包含几个命令。Access 然后退出,然后批处理文件将等待删除锁定文件(laccdb 文件)。删除后(如果您是数据库中的唯一用户,则应该如此),然后批处理文件会重新启动应用程序。

    还有一个选项可以在关闭时压缩数据库。它在我的环境中非常适合我,而且我已经成功使用它大概有 5 年了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多