Удаленное завершение работы пользовательского приложения Access

Дополнительно: требуются экспертные навыки программирования, взаимодействия и многопользовательских навыков.

Эта статья относится только к базе данных Microsoft Access (.mdb или .accdb).

Аннотация

Иногда может потребоваться выполнить задачи обслуживания в базе данных Microsoft Access, такие как сжатие или восстановление, создание резервных копий или внесение изменений в конструкцию. Для многих из этих операций требуется, чтобы все пользователи вышли из базы данных. Тем не менее, нет встроенного способа, чтобы заставить пользователей выйти из Microsoft Access. И не рекомендуется просто отключать пользователя от сетевых решений. Это может привести к повреждению базы данных.

В этой статье описан один из подходов, которые можно использовать для корректного завершения работы интерфейсного приложения базы данных Access. Многие из этих понятий также можно использовать для сжатия или восстановления базы данных, создания резервных копий и т. д.

Корпорация Майкрософт предоставляет примеры программирования только в целях демонстрации без явной или подразумеваемой гарантии. Данное положение включает, но не ограничивается этим, подразумеваемые гарантии товарной пригодности или соответствия отдельной задаче. Эта статья предполагает, что пользователь знаком с представленным языком программирования и средствами, используемыми для создания и отладки процедур. Специалисты технической поддержки Майкрософт могут пояснить работу той или иной процедуры, но модификация примеров и их адаптация к задачам разработчика не предусмотрена.

Дополнительная информация

Принцип работы решения

Решение работает следующим образом. На сервере в папке есть файл. Этот файл можно назвать любым именем. Для этого решения используется файл 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. Импортируйте таблицу Customers из примера базы данных Northwind в базу данных 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 и сохраните ее как frmCustomers. Закройте эту форму.

Создание формы с кодом, проверяющим наличие файла

  1. Создайте форму без ограничений и сохраните ее с именем frmAppShutDown. В рабочей базе данных эта форма обычно всегда открыта, но невидимая. Для этого примера его можно оставить открытым как обычно.
  2. Задайте для свойства TimerInterval формы значение 60 000 миллисекунда. Это равно одной минуте. (Для собственного решения этот интервал времени можно увеличить или замереть.)
  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 автоматически закроется и сохранит все работы.