【问题标题】:Multiple instances of same access database are open on 1 machine - problem同一访问数据库的多个实例在一台机器上打开 - 问题
【发布时间】:2010-12-06 20:14:03
【问题描述】:

我在使用 Windows Server 2008 任务调度程序执行计划任务时遇到了 ms access 2007 accdb 问题。问题是任务计划程序正在打开的文件正在正确打开/关闭,但在数据库关闭后“锁定”文件 (.laccdb) 仍然可见,这表明访问数据库认为它仍然处于打开状态。每次运行新任务时,都会打开一个新的访问实例。我打开了 Schema 以显示数据库中所有用户的名册,它显示了 3 个重复的服务器名称/管理员帐户。以下是访问中的即时窗口示例:

COMPUTER_NAME LOGIN_NAME CONNECTED SUSPECT_STATE 服务器管理员真空 服务器管理员真空 SERVER Admin True Null

我希望其他人遇到过这个问题并且知道 1)如何轻松关闭所有打开的访问实例,以及 2)如何在运行任务时防止这种情况发生。我在任务的“设置”选项卡下设置了“不启动新实例”,但这无关紧要,因为没有任务同时运行。提前感谢您的任何帮助。

【问题讨论】:

  • 您正在运行的任务是什么?可能是它没有正确清理,或者没有正确退出。但在我们知道任务是什么之前,我们无法猜测。这也可能是权限问题(即,数据库所在文件夹的 DELETE 权限被拒绝),但这不太可能,因为它是非标准权限,必须明确设置。

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


【解决方案1】:

要关闭所有打开的 Access 实例(您不能从 Access 运行它,因为您不能保证正在运行的实例将是您检索的最后一个引用):

Sub CloseAllAccessInstances()
    Dim acc As Access.Application

    Do
        Set acc = GetObject(, "Access.Application")

        If IsNull(acc) Then Exit Do

        acc.Quit
    Loop
End Sub

运行上述程序后,检查任务管理器。如果您看到 msaccess.exe,那么您很可能有一个循环对象引用。这将阻止 Access 关闭。欲了解更多信息,请查看http://msdn.microsoft.com/en-us/library/aa716190(VS.60).aspx

【讨论】:

  • 在我看来这是不可取的,因为如果在记录被锁定以进行编辑时强制退出 Access,它可能会损坏数据文件。
  • Access.Application.Quit() 什么都不做。这与通过用户界面关闭应用程序相同,因此应用程序会在退出之前进行清理。此外,可选的 AcQuitOption 参数让您可以稍微控制应用程序如何处理清理工作(特别是它如何处理未保存的对象)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-30
  • 1970-01-01
相关资源
最近更新 更多