如何远程关闭自定义 Access 应用程序

高级:需要专家编码、互操作性和多用户技能。

本文仅适用于 Microsoft Access 数据库(.mdb 或 .accdb)。

摘要

有时,可能需要对 Microsoft Access 数据库执行维护任务,例如压缩或修复、创建备份副本或进行设计修改。 其中许多操作要求所有用户退出数据库。 但是,没有强制用户退出 Microsoft Access 的内置方式。 不一个好主意是将用户与网络解决方案断开连接。 这可能会导致数据库损坏。

本文介绍一种可用于正常关闭前端 Access 数据库应用程序的方法。 还可以使用其中许多概念来压缩或修复数据库、创建备份副本等。

Microsoft 提供的编程示例仅用于进行说明,而不提供明示或默示担保。 这包括但不限于适销性或对特定用途的适用性的默示担保。 本文假设您熟悉正在演示的编程语言和用于创建和调试过程的工具。 Microsoft 支持工程师可以帮助解释特定过程的功能,但他们不会修改这些示例以提供新增功能或构建步骤以满足你的特定需要。

更多信息

解决方案的工作原理

解决方案的工作原理如下。 在服务器上,文件夹中有一个文件。 此文件可以命名为任何内容。 对于此解决方案,使用名为 chkfile.ozx 的文件。 重命名或删除此文件时,它会通知前端 Access 应用程序它必须关闭。

在用户启动前端数据库应用程序时会生成一个窗体。 此表单按设定的时间间隔检查服务器上是否存在文件。 它使用 TimerInterval 属性和 OnTimer 事件来执行此操作。

如果找到该文件,则不会发生任何操作。 如果未找到该文件,则窗体将显示另一个窗体,以警告用户数据库将在指定的时间内自动关闭。

注意

此解决方案不使用 MsgBox 函数来警告用户。 在运行任何代码之前,MsgBox 函数将等待用户输入。 这将违背解决方案的目的。

为了正常关闭客户端会话,此解决方案将重命名正在检查的文件。 完成必须完成的所有操作后,此解决方案会将文件重命名回原始名称。 这让用户知道他们可以再次启动前端数据库。

此过程还可以自动化,通过在服务器上使用在指定时间重命名 chkfile.ozx 的计划服务来提供无人参与的操作。

创建示例方案的步骤

若要演示此解决方案的工作原理,必须具备以下各项:

  • 硬盘上路径为 C:\MyData 的文件夹。
  • 空文件。 此解决方案将检查是否存在此文件。
  • 使用后端数据库文件中的表并链接到前端数据库中该表的拆分数据库设计。 前端数据库将包含代码,用于按设定的时间间隔检查文件是否存在,然后警告用户。

为示例应用程序创建文件夹

在驱动器 C 的根目录中创建一个文件夹,并将其命名为 MyData。

创建空文本文件

  1. 在 MyData 文件夹中创建新的文本文件,并将其命名为 chkfile.txt。
  2. 重命名文本文件,使其具有 ozx (chkfile.ozx) 的扩展名。 出现提示时,确认要更改文件扩展名。

创建后端数据库

  1. 在 C:\MyData 文件夹中创建一个新数据库,并将其命名为Northwind_Be.mdb。
  2. 将“客户”表从 Northwind 示例数据库导入到 Northwind_Be.mdb 数据库中。 (默认情况下,Northwind 位于 C:\Program Files\Microsoft Office\Office10\Samples.)
  3. 关闭数据库。

创建前端数据库

  1. 创建另一个新数据库,并将其命名为Northwind_Fe.mdb。
  2. 将“客户”表从Northwind_Be.mdb数据库链接到新Northwind_Fe.mdb
  3. 基于链接的 Customers 表创建自动窗体,并将其另存为 frmCustomers。 关闭此窗体。

使用检查文件是否存在的代码创建表单

  1. 创建一个未绑定的窗体,并使用名称 frmAppShutDown 保存它。 在生产数据库中,此窗体通常始终处于打开状态,但不可见。 对于此示例,它可以像往常一样保持打开状态。
  2. 将窗体的 TimerInterval 属性设置为 60000 毫秒。 这等于一分钟。 (对于自己的解决方案,可以增加或减少此时间间隔。)
  3. 在 Microsoft Office Access 2003 或早期版本的 Access 中,在 frmAppShutDown 窗体的设计视图中,单击“视图”菜单上的“代码”。 在 Microsoft Office Access 2007 中,在 frmAppShutDown 窗体的设计视图中,单击“设计”选项卡,然后单击“工具”组中的“查看代码”。 键入或粘贴以下代码:
Option Explicit
Dim boolCountDown As Boolean
Dim intCountDownMinutes As Integer

Private Sub Form_Open(Cancel As Integer)
    ' Set Count Down variable to false
    ' on the initial opening of the form.
    boolCountDown = False
End Sub

Private Sub Form_Timer()
On Error GoTo Err_Form_Timer
    Dim strFileName As String
    strFileName = Dir("c:\MyData\chkfile.ozx")
    If boolCountDown = False Then
        ' Do nothing unless the check file is missing.
        If strFileName <> "chkfile.ozx" Then
            ' The check file is not found so 
            ' set the count down variable to true and
            ' number of minutes until this session
            ' of Access will be shut down.
            boolCountDown = True
            intCountDownMinutes = 2
        End If
    Else
        ' Count down variable is true so warn
        ' the user that the application will be shut down
        ' in X number of minutes.  The number of minutes
        ' will be 1 less than the initial value of the
        ' intCountDownMinutes variable because the form timer
        ' event is set to fire every 60 seconds
        intCountDownMinutes = intCountDownMinutes - 1
        DoCmd.OpenForm "frmAppShutDownWarn"
        Forms!frmAppShutDownWarn!txtWarning = "This application will be shut down in approximately " & intCountDownMinutes & " minute(s).  Please save all work."
        If intCountDownMinutes < 1 Then
            ' Shut down Access if the countdown is zero,
            ' saving all work by default.
            Application.Quit acQuitSaveAll
        End If
    End If

Exit_Form_Timer:
    Exit Sub

Err_Form_Timer:
    Resume Next
End Sub

  1. 保存并关闭窗体。

创建用于警告用户的表单

注意

不要使用 MsgBox 函数警告用户。 在运行任何代码之前,MsgBox 函数将等待用户输入。 这将违背解决方案的目的。

  1. 创建一个未绑定的窗体,并将其命名为 frmAppShutDownWarn。 添加以下文本框控件:

    Name: txtWarning
    Type: Textbox
    
  2. 保存并关闭窗体。

  3. 创建将在启动时打开 frmCustomer 窗体和 frmAppShutDown 窗体的宏。 将宏命名为 autoexec。

  4. 关闭并重新打开数据库。

  5. 将 chkfile.ozx 重命名为 chkfile.old。

解决方案事件的计时

注意

以下所有时间都是近似值,它们从 chkfile.ozx 重命名后开始。

  • 一分钟或更短时间:Northwind_FE.mdb会注意到正在检查的文件缺失。
  • 两分钟:将在 Northwind_FE.mdb 打开窗体,通知数据库将在一分钟内关闭。
  • 三分钟:Northwind_FE.mdb将自动关闭并保存所有工作。