如何從遠端關閉自定義 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. 重新命名文本檔,使其擴展名為 chkfile. (chkfile.) 。 當系統提示您時,請確認您想要變更擴展名。

建立後端資料庫

  1. 在 C:\MyData 資料夾中建立新的資料庫,並將它命名為Northwind_Be.mdb。
  2. 從 Northwind 範例資料庫將 Customers 數據表匯入Northwind_Be.mdb資料庫。 (根據預設,Northwind 位於 C:\Program Files\Microsoft Office\Office10\Samples.)
  3. 關閉資料庫。

建立前端資料庫

  1. 建立另一個新的資料庫,並將它命名為Northwind_Fe.mdb。
  2. 將 Customers 數據表從 Northwind_Be.mdb 資料庫連結到新的Northwind_Fe.mdb
  3. 根據連結的 Customers 數據表建立 AutoForm,並將其儲存為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會自動關閉,並儲存所有工作。