カスタム Access アプリケーションをリモートでシャットダウンする方法

高度な機能: 高度なコーディング、相互運用性、マルチユーザー スキルが必要です。

この資料は、Microsoft Access データベース (.mdb または .accdb) にのみ適用されます。

概要

場合によっては、圧縮や修復、バックアップ コピーの作成、設計の変更など、Microsoft Access データベースでメンテナンス タスクを実行しなければならない場合があります。 これらの操作の多くは、すべてのユーザーがデータベースを終了する必要があります。 ただし、ユーザーに Microsoft Access の終了を強制する組み込みの方法はありません。 また、ユーザーをネットワーク ソリューションから切断するだけでは良い考えではありません。 これにより、データベースが破損する可能性があります。

この記事では、フロントエンド Access データベース アプリケーションを正常にシャットダウンするために使用できる 1 つの方法について説明します。 これらの概念の多くを使用して、データベースを圧縮または修復したり、バックアップ コピーを作成したりすることもできます。

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 データベースに Customers テーブルをインポートします。 (既定では、Northwind は C:\Program Files\Microsoft Office\Office10\Samples にあります。
  3. データベースを閉じます。

フロントエンド データベースの作成

  1. 別の新しいデータベースを作成し、Northwind_Fe.mdbという名前を付けます。
  2. Northwind_Be.mdb データベースから新しいNorthwind_Fe.mdbに Customers テーブルをリンクする
  3. リンクされた Customers テーブルに基づいて AutoForm を作成し、frmCustomers として保存します。 このフォームを閉じます。

ファイルの存在を確認するコードを使用してフォームを作成する

  1. バインドされていないフォームを作成し、frmAppShutDown という名前で保存します。 運用データベースでは、通常、このフォームは常に開きますが、表示されません。 このサンプルでは、通常どおりに開いたままにすることができます。
  2. フォームの TimerInterval プロパティを 60000 ミリ秒に設定します。 これは 1 分に等しくなります。 (独自のソリューションの場合は、この時間間隔を増減できます)。
  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 の名前変更後に開始されます。

  • 1 分以下: Northwind_FE.mdb、確認中のファイルが見つからないことがわかります。
  • 2 分: Northwind_FE.mdbでフォームが開き、データベースが 1 分で閉じることを通知します。
  • 3 分: Northwind_FE.mdbは自動的に閉じ、すべての作業を保存します。