Глава 16. Особенности сетевых приложений.

ЧАСТЬ III.

РАЗРАБОТКА и СОПРОВОЖДЕНИЕ ПРИЛОЖЕНИЙ ACCESS 2002

  • Глава 16. Особенности сетевых приложений Access
  • Глава 17. Проекты Microsoft Access 2002
  • Глава 18. Репликация баз данных
  • Глава 19. Миграция приложений
  • Глава 20. Администрирование баз данных

Глава 16.

Особенности сетевых приложений Access

База данных Access может использоваться одним пользователем на локальном компьютере или несколькими пользователями в сети. Использование базы данных в сети имеет ряд особенностей. Чтобы подготовить базу данных для использования в сети, необходимо выполнить специальную настройку среды Access, параметров базы данных и ее объектов и реализовать особенности общего доступа к данным в программном коде приложения. Об этом и пойдет речь в настоящей главе. Чтобы рассказ не был слишком абстрактным, мы рассмотрим основные вопросы на примере сетевого приложения Access "Игра в доминирование". Это приложение есть на компакт-диске с примерами к книгам серии Microsoft Office 2002, который можно приобрести в дополнение к данной книге.

В этой главе обсуждаются и вопросы разработки, и вопросы работы с сетевыми приложениями Access 2002. Среди них:

  • Предоставление общего доступа к данным и объектам базы данных Access
  • Защита совместно используемых баз данных
  • Программный доступ к базам данных с помощью интерфейса DAO
  • Пример сетевого приложения "Игра в доминирование"

Способы совместного использования баз данных

Базы данных Microsoft Access могут использоваться одновременно несколькими пользователями в сети. Предоставить общий доступ к базе данных можно несколькими способами:

  • поместив базу данных в общую папку в сети;
  • опубликовав в сети таблицы базы данных;
  • обеспечив подключение к базе данных через Интернет;
  • с помощью репликации;
  • с помощью SQL Server.

Совместное использование базы данных

Чтобы предоставить совместный доступ к базе данных Access, поместите ее на файловый сервер или в общую папку на рабочей станции. Это самый простой метод обеспечения совместного доступа к базе данных и всем ее объектам: формам, отчетам, запросам, макросам и модулям. Он подходит, если нужно, чтобы все пользователи могли использовать одни и те же объекты базы данных одинаковым способом.

Поместив базу данных в общую папку на файловом сервере или рабочей станции, убедитесь в том, что установлен параметр, определяющий открытие базы данных по умолчанию в режиме совместного доступа. Об установке этого параметра рассказано в разд. "Режимы работы с базой данных в сети" этой главы.

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

Совместное использование только данных

Можно предоставить совместный доступ в сети лишь к таблицам в базе данных Access. Для этого необходимо разделить базу данных на файл объектов данных и файл объектов приложения. Разделение базы данных с помощью мастера описано в гл. 19.

После разделения базы данных поместите файл объектов данных на файловый сервер или в общую папку на рабочей станции, чтобы предоставить общий доступ к таблицам, а файл объектов приложений — на компьютер пользователя в виде локальной копии. В этом случае производительность базы данных будет несколько выше, чем при совместном доступе ко всей базе данных, поскольку по сети будут передаваться только данные из таблиц. При этом отдельный пользователь может настроить формы, отчеты и прочие объекты из файла объектов приложения в соответствии со своими индивидуальными потребностями. Эти изменения не отразятся на остальных пользователях, которые используют свои локальные копии файла объектов приложения.

Совместное использование объектов базы данных через Интернет

Объекты базы данных можно предоставить в совместное использование через Интернет, создав на их основе страницы HTML следующих видов:

  • статические страницы HTML
  • генерируемые сервером страницы HTML
  • страницы доступа к данным
  • документы в формате XML

Страницы HTML можно отобразить в программе просмотра Интернета, такой как Internet Explorer. (О работе с базами данных Access через Интернет см. гл. 12.)

Совместная работа с базой данных с помощью репликации

Портфельная репликация Windows позволяет использовать для работы с файлом (в том числе с базой данных) два компьютера: например, компьютер в офисе и переносной компьютер. Можно создавать реплики (специальные копии) базы данных Access для хранения на разных компьютерах и синхронизировать изменения в них. Аналогично несколько пользователей могут работать со своими копиями — репликами базы данных, которые могут быть синхронизированы по сети, с помощью удаленного доступа к сети или через Интернет. Репликация баз данных Access описана в гл. 18.

Совместный доступ к базе данных с помощью SQL Server

Если в сети организации установлена СУБД SQL Server, ее можно использовать для совместной работы с базой данных Access. Для этого необходимо создать клиент-серверное приложение на основе базы данных Access. В результате станут доступны мощные средства СУБД SQL Server. Можно преобразовать существующую базу данных Access в клиент-серверное приложение с помощью мастера (гл. 19) или создать новое приложение в архитектуре "клиент-сервер" (гл. 17).

Режимы работы с базой данных в сети

База данных может быть открыта пользователем в сети в одном из четырех режимов.

  • Открытие в режиме общего доступа. База данных открывается для чтения и записи. Другие пользователи тоже могут открыть базу данных (в любом режиме).
  • Открытие в режиме монопольного доступа. База данных открывается для чтения и записи. Другие пользователи не смогут открыть базу данных, пока она не будет закрыта пользователем, открывшим ее в режиме-монопольного доступа.
  • Открытие в режиме общего доступа только для чтения. База данных открывается только для чтения. Другие пользователи тоже могут открыть базу данных (в любом режиме).
  • Открытие в режиме монопольного доступа только для чтения. База данных открывается только для чтения. Другие пользователи не смогут открыть базу данных, пока она не будет закрыта пользователем, открывшим ее в режиме монопольного доступа.

Можно указать режим открытия базы данных, используемый по умолчанию:

  1. Откройте базу данных.
  2. Выберите команду Сервис, Параметры (Tools, Options). Появится диалоговое окно Параметры (Options).
  3. Раскройте вкладку Другие (Advanced).
  4. В группе Режим открытия по умолчанию (Default open mode) выберите переключатель общий доступ (Shared) или монопольный доступ (Exclusive).

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

Кроме того, независимо от установленного режима по умолчанию, пользователь может открыть базу данных в любом режиме, указав его следующим способом:

  1. Выберите команду Файл, Открыть (File, Open). Появится диалоговое окно Открытие файла базы данных (Open).
  2. Щелкните по стрелке, находящейся справа от кнопки Открыть (Open). Раскроется список всех возможных режимов открытия базы данных (рис. 16.1).
  3. Выберите в списке элемент, соответствующий требуемому режиму открытия базы данных:
    • Открыть (Open) — режим общего доступа для чтения и записи;
    • Открыть для чтения (Open Read-Only) — режим общего доступа, открыть только для чтения;
    • Монопольно (Open Exclusive) — режим монопольного доступа;
    • Монопольно для чтения (Open Exclusive Read-Only) — режим монопольного доступа, открыть только для чтения.

Рис. 16.1. Список режимов открытия базы данных

Замечание

Можно запретить определенным пользователям сети открывать базу данных, защищенную на уровне пользователей, в монопольном режиме, для чего необходимо удалить права этих пользователей на монопольный доступ к базе данных. (Об установке прав доступа рассказано в гл. 20.)

Если база данных (файл с расширением mdb) открывается в режиме общего доступа, Microsoft Access создает файл блокировок с таким же именем, как база данных, но с расширением Idb, который располагается в той же папке, где хранится файл базы данных. В файле блокировок сохраняется имя компьютера (например, MYCOMP) и регистрационное имя пользователя базы данных (например, Admin) для каждого пользователя, открывшего базу данных для совместного использования. Файл блокировок используется Microsoft Access во время совместной работы пользователей с файлом базы данных. Этот файл автоматически удаляется после того, как последний пользователь закроет базу данных.

Замечание

Иногда в результате сбоев файл блокировок не удаляется автоматически. В этом случае его следует удалить самостоятельно, иначе файл баз данных будет заблокирован и пользователи не смогут открыть базу данных.

Пример сетевого приложения

Рассмотрим в качестве примера сетевого приложения Access приложение "Игра в доминирование". Далее в этой главе на данном примере будут проиллюстрированы основные особенности разработки и использования сетевых приложений. Готовое приложение приложение "Игра в доминирование" находится на компакт-диске с примерами к комплекту книг о Microsoft Office 2002 издательства "БХВ — Петербург". Полное описание приложения, в том числе и руководство по его установке, содержится в приложении 2.

Демонстационный пример сетевого приложения "Игра в доминирование" был разработан нами (конкретно В. Михеевой) еще в предыдущей версии Access 2000, и для иллюстрации этой главы в новом издании книги он был сохранен полностью. Тому есть две причины. Во-первых, в новой версии Access 2002 реализована полноценная поддержка формата баз данных предыдущей версии. Во-вторых, в новой версии Access 2002 не появилось особых новшеств, касающихся совместной работы с приложениями Access в сети. Основным новшеством в этом аспекте является введение широкой поддержки формата XML, в который могут быть преобразованы практически все виды объектов базы данных и проектов Access 2002. Но формат XML не является частью баз данных. Скорее, его можно назвать альтернативным представлением данных в универсальном формате для их использования в Web в масштабах глобальных и корпоративных сетей. (Об XML подробно рассказано в гл. 12.)

Рассмотрим здесь кратко, в чем заключается суть приложения "Игра в доминирование". Общая идея в реализации этого приложения является типичным примером проектирования сетевых приложений.

Правила игры

"Игра в доминирование" — это состязание между несколькими игроками за захват максимальной части игрового поля. Поле состоит из клеток. Каждая клетка может быть занята одним из игроков на некоторых определенных игрой условиях. Чтобы занять некоторый участок поля, игрок делает ход. Ход может быть принят или отвергнут, в зависимости от того, занята ли эта или смежные клетки другим игроком в соответствии с принятыми правилами. Все игроки имеют общий доступ к полю и стремятся занять клетки одновременно. За занятые клетки игроку присуждаются очки. Кто успеет набрать большее число очков, тот и победитель.

Сетевое решение в реализации архитектуры приложения

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

  • у приложения несколько пользователей, работающих с общими данными (игровым полем), т. е. в задаче требуется многопользовательский доступ к общим данным;
  • всю задачу можно разделить на относительно независимые подзадачи (ход игрока, решение о принятии или непринятии хода, ведение счета очков т. п.), которые могут выполняться параллельно или последовательно (по очереди);
  • каждая из выделенных подзадач — это отдельный компонент приложения;
  • каждый компонент может выполняться на отдельном вычислительном узле в сети, при этом некоторые компоненты могут быть объединены на одном узле сети, т. е. приложение может быть распределено по узлам сети.

Таким образом, наше приложение имеет многокомпонентную, или так называемую многоуровневую архитектуру. Для таких задач типичным решением бывает обычно двух- или трехуровневая архитектура, когда приложение состоит из двух или трех типов взаимодействующих компонентов, среди которых выделяются: "обслуживающие" и "потребляющие" компоненты (серверы и клиенты). Серверный компонент может обслуживать от одного до нескольких клиентов одновременно. При необходимости вводят третий тип компонента — "промежуточный" серверный компонент между клиентским компонентом и основным серверным компонентом, чтобы разгрузить слишком нагруженный логикой обработки данных основной серверный компонент.

Замечание

Большее количество уровней встречается реже, обычно в области специализированных сетевых и коммуникационных задач.

Описанную архитектуру называют клиент-серверной. Наше приложение имеет такую архитектуру. Его разделение на компоненты выглядит следующим образом:

  • Серверный компонент — игровое поле, которое является общим ресурсом приложения, вместе с управляющим этим ресурсом звеном игры — сервером игры. Сервер принимает и обрабатывает заявки от клиентов.
  • Клиентский компонент — это отдельный игрок, который посылает серверу заявки на использование общего ресурса (поля игры), и получает ответ.

Access предоставляет две возможности для реализации приложений с такой архитектурой:

  • в виде сетевых баз данных (одна или несколько связанных баз данных, размешенных в сети);
  • в виде проектов баз данных, соединенных с данными на SQL Server (о клиент-серверной архитектуре в приложениях, связанных с SQL Server, см. гл. 17).

Замечание

Сетевое приложение Access может состоять и из одного компонента, не разделенного на части клиент и сервер, — одной базы данных с разрешенным общим доступом. Но это не эффективное решение.

В этой главе мы говорим о первом способе — сетевых базах данных.

Сетевое приложение Access "Игра в доминирование" должно будет обслуживать нескольких игроков — разных пользователей в сети. Предположим, пользователи работают в одноранговой сети. Рабочие станции пользователей, принимающих участие в игре, можно разделить на две категории: клиенты и серверы. На сервере выполняется ядро игры — управляющий компонент приложения. На клиентских рабочих станциях устанавливается компонент, предоставляющий пользователю интерфейс для участия в игре. Таким образом, приложение "Игра в доминирование" представляет собой распределенную базу данных Access с архитектурой "клиент-сервер", которая может быть использована даже в одноранговой сети. Все участники одной игры подключаются к одному серверу по схеме "звезда" (рис. 16.2).

Рис. 16.2. Архитектура приложения "Игра в доминирование"

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

Организация совместного доступа к данным и объектам

В сети доступ к одним и тем же объектам могут одновременно получить сразу несколько пользователей. Общий доступ к данным отличается от монопольного. Например, совместная правка записей в таблице/запросе или изменение структуры объекта базы данных может привести к возникновению конфликтов при сохранении изменений в источнике. В Microsoft Access существуют стандартные механизмы для поддержания совместного доступа к данным и объектам базы данных в сети и разрешения конфликтов, возникающих при сохранении изменений.

Общий доступ к базе данных означает:

  • совместный просмотр и изменение данных,
  • совместный просмотр и изменение объектов.

Совместный просмотр и изменение данных

Предположим, база данных открыта в режиме общего доступа несколькими пользователями в сети. При этом несколько пользователей могут одновременно работать с одним и тем же набором записей. При попытке изменить определенную запись, в то время как ее редактирует другой пользователь или она удалена другим пользователем, возникает конфликт совместного доступа к источнику данных.

При совместном доступе к базе данных Microsoft Access помогает отследить состояние записи во время ее правки и позволяет убедиться в том, что используемые данные были обновлены. В тот момент, когда несколько пользователей пытаются одновременно изменить одну и ту же запись, Access отображает сообщение, позволяющее разрешить возникший конфликт. Например, при попытке сохранить изменения в записи, заблокированной в этот момент другим пользователем, отображается сообщение с именем этого пользователя.

Access помогает отследить состояние записи, отображая специальный символ в области выделения текущей записи. Возможные символы приведены в табл. 16.1.

Таблица 16.1. Значок, обозначающий состояния текущей записи

Символ Значение


Данная запись является текущей и в настоящий момент еще не была изменена.


Данная запись заблокирована другим пользователем. Ее нельзя изменить. При попытке внести изменения выдается звуковой сигнал


Запись изменена, но изменения еще не сохранены в источнике данных. В этом случае другие пользователи не видят текущих изменений в данной записи. Если запись заблокирована, другие пользователи не смогут ее изменить. Для того чтобы освободить запись и сделать ее доступной для других пользователей, следует сохранить или отменить внесенные изменения

Методы управления блокировками записей

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

Существует три параметра блокировки записей в базе данных Access.

  • Отсутствует (No Locks). Изменяемая запись не блокируется. При попытке сохранить измененную запись, которую в это же время изменил другой пользователь, на экране появляется сообщение, предлагающее следующие возможности: сохранить данный вариант записи, уничтожив изменения, внесенные другим пользователем; скопировать свою, измененную запись в буфер обмена; отказаться от собственных изменений. Этот параметр позволяет изменять записи в любое время, но при внесении изменений разными пользователями могут возникать конфликты.
  • Изменяемой записи (Edited Records). Microsoft Access блокирует изменяемую в данный момент запись, не позволяя изменять ее другим пользователям. Заблокированными могут оказаться также записи, расположенные рядом на диске. Если другой пользователь попытается изменить заблокированную запись, в его объекте в режиме Таблицы появится маркер заблокированной записи (перечеркнутый круг— третий значок в табл. 16.1). Данный параметр гарантирует завершение всех начатых изменений. Это хороший выбор, если конфликты совместного доступа к записи с другими пользователями возникают редко.
  • Всех записей (All Records). Microsoft Access блокирует все записи формы или объекта в режиме Таблицы (и базовых таблиц) на весь период их открытия, поэтому другие пользователи не могут изменить или заблокировать записи. Этот параметр накладывает слишком жесткие ограничения. Его следует использовать только в тех случаях, когда есть уверенность, что конкретно вы имеете приоритетное право на изменение записей.

Замечание

При редактировании данных из присоединенных таблиц SQL Server через ODBC применяются параметры блокировки записей этого сервера, а установленный параметр блокировки в Access игнориуется, будто выбран параметр "отсутствие блокировки".

Чтобы установить параметр блокировки записей в сети, используемый по умолчанию:

  1. Выберите команду Сервис, Параметры (Tools, Options). Появится диалоговое окно Параметры (Options).
  2. Раскройте вкладку Другие (Advanced) (рис. 16.3).
  3. В группе Блокировка по умолчанию (Default record locking) выберите необходимый переключатель.

Существует возможность выбора одного из двух уровней блокировки:

  • Блокировка записей. Блокируется только редактируемая запись.
  • Блокировка страниц. Блокируется страница памяти на диске, которая может содержать несколько соседних записей (4 Кбайт памяти на страницу).

Рис. 16.3. Вкладка Другие диалогового окна Параметры

Чтобы задать уровень блокировки, используемый по умолчанию, установите флажок Блокировка записей при открытии БД (Open databases using record-level locking) на вкладке Другие (Advanced) диалогового окна Параметры (Options) если нужна блокировка на уровне записей, или сбросьте этот флажок если нужна блокировка на уровне страниц.

Замечание

Установленный параметр начнет действовать, когда база данных будет открыта заново с помощью команды Файл, Открыть (File, Open), а не с помощью списка последних использованных файлов.

Внимание

Блокировка на уровне записей действует только при доступе к данным через формы, страницы таблиц и запросов или с помощью объекта Recordset. Данный режим не влияет на выполнение запросов и инструкций SQL.

Предотвращение конфликтов при блокировке записей в сети

Следующие четыре параметра помогают избежать конфликтов при блокировке записей в сети:

  • Период обновления (Refresh interval). Этот параметр задает число секунд, по истечении которых Microsoft Access автоматически обновляет записи в объекте в режиме Таблицы или в режиме Формы. При обновлении текущего объекта в режимах Таблицы или Формы отображаются изменения в существующих записях, причем записи не сортируются заново, не добавляются новые и не убираются с экрана удаленные записи. Для того чтобы увидеть эти изменения, необходимо выполнить операцию обновления данных, например с помощью комбинации клавиш <Shift>+<F9>.
  • Период повтора обновления (Update retry interval). Этот параметр задает число миллисекунд, по истечении которых Microsoft Access автоматически пытается сохранить измененную запись, заблокированную другим пользователем.
  • Число повторов обновления (Number of update retries). Этот параметр задает число попыток сохранения измененной записи, заблокированной другим пользователем.
  • Период обновления ODBC (ODBC refresh interval). Этот параметр задает интервал времени в секундах, после которого Microsoft Access автоматически обновляет записи, доступ к которым осуществляется по протоколу ODBC. Для того чтобы увидеть эти изменения, необходимо выполнить операцию обновления данных, например с помощью комбинации клавиш <Shift>+<F9>.

Значения этих параметров устанавливаются в диалоговом окне Параметры (Options) на вкладке Другие (Advanced). Подробное описание этих параметров есть в справочной системе Access.

Отображение обновленных данных

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

Обновление данных можно выполнить следующими способами.

  • Работая с таблицей, формой или отчетом в режиме Таблицы, Сводной таблицы или Сводной диаграммы или с формой в режиме Формы, выберите команду Записи, Обновить (Records, Refresh). В результате отображаются изменения в существующих записях. Новые записи не добавляются, удаленные записи с экрана не убираются.
  • Для периодического обновления данных в режиме Таблицы или Формы установите необходимые значения параметра Период обновления (Refresh interval) и прочих параметров, описанных в разд. "Предотвращение конфликтов при блокировке записей в сети" этой главы.
  • Чтобы выполнить повторную загрузку данных из источника (работая с объектом базы данных в режиме Таблицы, Сводной таблицы, Сводной диаграммы или Формы), нажмите комбинацию клавиш <Shift>+<F9>.
  • Для отображения обновленных данных в форме можно создать кнопку, вызывающую макрос, содержащий макрокоманду ОбновитьОбъект (Refresh), или процедуру VBA, вызывающую метод Refresh объекта Form.
  • Для повторной загрузки данных, отображаемых в элементе управления, создайте макрос, содержащий макрокоманду Обновление (Requery), в качестве значения аргумента Имя элемента (Control Name) укажите имя обновляемого элемента управления. Чтобы обновить данные в форме, оставьте поле, задающее значение аргумента Имя элемента (Control Name), пустым.
  • Для повторной загрузки записей, отображаемых в форме или элементе управления, добавьте в процедуру VBA, назначенную форме или элементу управления, вызов метода Requery объекта Form или Control.
  • Для обновления данных, отображаемых в режиме Просмотра страницы, щелкните по странице доступа к данным правой кнопкой мыши и в контекстном меню выберите команду Обновить (Refresh) или нажмите клавишу <F5>. Если при этом не были сохранены изменения, появится сообщение о том, что внесенные изменения будут утеряны. Чтобы предотвратить потерю изменений в текущей записи, нажмите кнопку Отмена (Cancel). Если загрузка обновленных данных продолжается длительное время, нажмите клавишу <Esc>. На странице может быть расположен элемент управления Сводная таблица (PivotTable). Этот элемент имеет собственный метод Refresh.
  • Чтобы обновить данные в объекте базы данных, открытом в режиме Сводной таблицы или Сводной диаграммы, нажмите кнопку Обновить (Refresh) на панели инструментов Сводные таблицы (PivotTable) или Сводная диаграмма (PivotChart).

Совместное изменение объектов

Внесение изменений в объекты базы данных при работе в сети характеризуется следующими особенностями.

  • Хотя допускается изменение базы данных во время работы с ней других пользователей, лучше создать макеты большинства объектов до того, как другие пользователи получат возможность открыть базу данных в сети. Для того чтобы при внесении серьезных изменений в структуру базы данных запретить другим пользователям доступ к этой базе данных, следует при открытии базы данных выбрать режим Монопольно (Open Exclusive) в диалоговом окне Открытие файла базы данных (Open). Если же вы открыли базу данных в режиме общего доступа и начинаете изменять структуру данных, то при условии, что в этот момент вы — единственный пользователь этой базы данных, Access 2002 автоматически временно переведет вашу базу данных в монопольный режим. Так что другие пользователи не смогут открыть эту базу данных, пока вы не закончите работу с изменениями структуры объектов. После этого база данных автоматически возвращается в режим общего доступа. Но если в такой момент вы — не единственный пользователь базы данных, то Access разрешит внести лишь незначительные изменения в дизайн объектов, например настройки печати.
  • Если другой пользователь открыл таблицу или просматривает данные в запросах, формах или отчетах, для которых эта таблица является источником данных, изменять структуру этой таблицы нельзя. Появляется сообщение, что таблица доступна только для чтения.
  • Если объекты зависят друг от друга, обновляйте их все одновременно, чтобы другие пользователи не начали работать с несогласованными версиями объектов.

Например, при добавлении полей в форму следует до обновления формы добавить поля в базовый запрос.

  • Если вы внесли изменения в запрос, форму или отчет, открытый другими пользователями, им придется закрыть и снова открыть измененный объект, чтобы получить его обновленную версию. В модулях VBA другие пользователи не могут выполнить измененные процедуры Function или Sub, пока не закроют и снова не откроют базу данных.
  • Страницы доступа к данным при изменении ведут себя по-другому. Хотя для создания, переименования, перемещения и удаления страниц доступа к данным требуется открыть базу данных в режиме монопольного доступа (поскольку это затрагивает содержимое базы данных), изменение самой страницы не потребует этого, т. к. сама страница хранится отдельно от базы данных в файле HTML.

Совместное использование страниц доступа к данным

Со страницами доступа к данным могут работать несколько пользователей в сети. Страницы могут быть отображены с помощью программы просмотра Интернета или в сообщении электронной почты. Для этого источник данных для страницы — базу данных Access или SQL Server — требуется поместить в общую папку на рабочей станции или на сервере сети.

В приложении "Игра в доминирование" для отображения текущего состояния игрового поля в момент инициализации новой игры создается страница доступа к данным "Игровое поле", которая сохраняется в той же папке, что и приложение "Сервер игры". Эта папка должна быть доступна в сети, чтобы игроки — пользователи приложения "Клиент игры" — могли подключиться к игре и просмотреть страницу "Игровое поле" с помощью программы Internet Explorer.

Если база данных, являющаяся источником данных для страницы, будет перемещена в другое место, необходимо соответствующим образом изменить параметры соединения страницы с источником данных. Для этого при работе со страницей в режиме Конструктора в окне Список полей (Field List) нажмите кнопку Свойства подключения для страницы (Page connection properties). В появившемся диалоговом окне на вкладке Соединение (Connection) введите в поле ввода, предназначенное для указания источника данных, имя и полный путь к базе данных в соответствии с соглашением об именах UNC. Укажите имя сетевого ресурса, а не имя подключенного сетевого диска, поскольку оно может измениться.

Имя ресурса в формате UNC состоит из четырех частей: имени сервера ресурсов, имени общей папки на сервере, пути к ресурсу и имени ресурса:

\\servername\share\path\filename.

Чтобы изменить путь к странице доступа к данным, указанный в ярлыке страницы в базе данных Access, в окне базы данных щелкните по ярлыку страницы доступа к данным правой кнопкой мыши и в контекстном меню выберите команду Сцойства (Properties). Откроется окно свойств ярлыка, введите в поле ввода путь к файлу страницы (файлу HTML). Рекомендуем указывать относительные пути в таких случаях. Например, для страниц, хранящихся в той же папке, что и база данных, укажите только имя файла страницы без абсолютного пути к ней. Например: Обзор товapoв.htm

Хотя источником данных для страницы может быть только база данных Access или SQL Server, можно организовать доступ через страницу к данным других форматов, используя связанные таблицы в базах данных Access.

Замечание

Защита совместно используемых страниц доступа к данным описана в справочной системе Access. Для максимальной защиты страницы доступа к данным поместите базу данных, которая является источником данных для нее, на тот же Web-сервер, на котором хранится эта страница.

Организация обмена данными между компонентами сетевого приложения

Существует несколько способов обмена данными между компонентами приложения по сети:

  • с помощью связанных таблиц;
  • с помощью запросов;
  • с помощью программирования на VBA.

Использование запросов и связанных таблиц подробно рассмотрено в других главах этой книги. Мы остановимся на программном доступе к базам данных с использованием интерфейса DАО. (06 установлении связи с таблицами см. гл. 3, об использовании запросов см. гл. 8.)

Программирование с использованием интерфейса DАО

Объекты доступа к данным (DАО, Data Access Object) — это иерархия объектов, обеспечивающая доступ к структуре базы данных и ее содержимому. В программах Visual Basic пользователь имеет возможность использовать объектный интерфейс DАО для выполнения следующих задач:

  • осуществления доступа к данным в локальных и удаленных базах данных Access и внешних источниках;
  • управления базой данных и ее объектами;
  • изменения структуры таблиц и схемы данных;
  • управления системой защиты;
  • создания, настройки и синхронизации реплик.

Интерфейс DАО использует рабочие области двух видов:

  • Рабочая область ядра Jet. Обеспечивает доступ к базам данных процессора обработки данных Jet, источникам данных ODBC и источникам данных ISAM для % доступа к базам данных в других форматах (например, к базам данных Lotus 1-2-3). Рабочая область Jet используется для доступа к источникам данных с помощью процессора Jet.
  • Рабочая область ODBCDirect. Обеспечивает доступ к источникам данных ODBC напрямую, не используя процессор Jet.

Для рабочей области Jet и для рабочей области ODBCDirect существуют две разные объектные модели DАО. Они приведены в гл. 13.

Реализация модулей VBA для обмена данными между компонентами приложения "Игра в доминирование" основана на применении интерфейса DАО с использованием рабочей области ядра Jet. Поэтому в дальнейших примерах основное внимание уделено приемам программирования на DАО, применимым в рабочей области ядра Jet. Сведения о рабочей области ODBCDirect можно найти в справочной системе Access 2002.

В следующих разделах мы рассмотрим некоторые аспекты программирования с использованием DАО. Подробную информацию об интерфейсе DАО можно найти в справочной системе Access.

Внимание

В Access 2002 по умолчанию к программному проекту базы данных подключена библиотека Microsoft ActiveX Data Objects 2.1 Library. Чтобы использовать в процедурах VBA объекты доступа к данным, нужно обязательно отключить эту библиотеку и подключить библиотеку Microsoft DАО 3.6 Object Library. О подключении библиотек к программному проекту рассказано в гл. 13.

Создание и использование рабочей области

Обе иерархии объектов DАО: для рабочей области Jet и для рабочей области ODBCDirect — начинаются с объекта DBEngine. Этот объект содержит свойства и методы, позволяющие управлять рабочими областями. Свойство DefaultType объекта DBEngine позволяет определять или устанавливать тип рабочей области, создаваемой по умолчанию.

Объект DBEngine в качестве свойства содержит семейство Workspaces всех открытых рабочих областей. Можно выбрать элемент этого семейства, указав индекс или имя, чтобы получить доступ к конкретной рабочей области (программа 16.1).

Чтобы создать новую рабочую область ядра Jet или рабочую область ODBCDirect, используют метод CreateWorkspace (программа 16.2) объекта DBEngine с соответствующим параметром. Метод CreateWorkspace возвращает ссылку на объект типа workspace и имеет следующие параметры (табл. 16.2):

Workspace CreateWorkspace(<имя>, <пользователь>, <пароль>, <тип>)

Таблица 16.2. Параметры метода CreateWorkspace

Параметр

Тип

Описание

<пользователь> String Имя пользователя, который будет владельцем создаваемой рабочей области. Определяет значение свойства UserName объекта Workspace
<пароль> String Пароль пользователя. Он необходим для создания рабочей области. Пароль может включать до 14 символов. Это могут быть любые символы, кроме символа ASCII с кодом 0 (Null). Определяет значение свойства Password объекта Workspace
<тип> <константа> Необязательный параметр. Задает тип создаваемой рабочей области. В качестве значения можно использовать константу dbUseJet для создания рабочей области ядра Jet или константу dbUseODBC для создания рабочей области ODBCDirect. По умолчанию создается рабочая область того типа, который задан значением свойства DefaultType объекта DBEngine

<имя>


String

Уникальное имя создаваемой рабочей области. Определяет значение свойства Name объекта Workspace

Несколько рабочих областей разных типов могут быть открыты одновременно. В момент создания рабочей области начинается сеанс работы с ней. После выполнения всех необходимых действий в рабочей области нужно завершить сеанс, закрыв рабочую область с помощью метода Close объекта Workspace.

Программа 16.1. Использование рабочей области Jet, открытой по умолчанию

Dim ws As Workspace

Dim db As Database

Set ws = DBEngine.Workspaces(0)

' Выбрали рабочую область

' Открываем базу данных:

Set db = ws.OpenDatabase ("DominationGameServer.mdb")

' Код использования базы данных ...

db.Close ' Закрыли базу данных

Set db = Nothing

' Очистили объектную переменную

' (!) Плохой код:

' рабочая область, открытая по умолчанию, будет закрыта

' ws.Close

' Set ws = Nothing

Программа 16.2. Создание рабочей области Jet

Dim ws As Workspace

Dim db As Database

' Создаем рабочую область:

Set ws = CreateWorkspace("", "Флинт", "пиастры", dbUseJet)

' Открываем базу данных:

Set db = ws.OpenDatabase("DominationGameServer.mdb")

' Код использования базы данных ...

db.Close ' Закрыли базу данных

ws. Close "':' ' Закрыли рабочую область

Set db = Nothing " ' Очищаем объектные

Set ws = Nothing ' переменные

Открытие источника данных

Чтобы открыть базу данных, используйте существующий объект Database или создайте новый. Объект Database представляет собой базу данных Jet (файл MDB), базу данных ISAM или источник данных ODBC, подключенный через Jet.

Доступ к текущей базе данных осуществляется с помощью объекта типа Database, возвращаемого методом CurrentDb объекта Application (который представляет приложение Access). Метод CurrentDb входит в набор глобальных методов, поэтому для его вызова можно использовать сокращенную ссылку без префикса Application с точкой (программа 16.3).

Открыть существующую базу данных можно двумя способами:

  • с помощью метода OpenDatabase объекта Workspace. В этом случае база данных будет открыта в заданной рабочей области;
  • с помощью метода OpenDatabase объекта DBEngine. В этом случае база данных будет открыта в рабочей области, используемой по умолчанию.

Метод OpenDatabase объекта DBEngine входит в набор глобальных методов, поэтому при использовании сокращенной ссылки на этот метод без явного указания объекта (DBEngine или Workspace) используется метод объекта DBEngine. Метод OpenDatabase возвращает ссылку на созданный объект Database и имеет следующие параметры (табл. 16.3): Database OpenDatabase(<имя>, <параметры>, <режим>, <соединение>)

Таблица 16.3. Параметры метода OpenDatabase

Параметр

Тип

Обязательный или нет

Описание

<имя>

String

Обязательный

Имя файла существующей базы



 

данных (возможно, включая полный



 

путь с указанием имени диска или



 

сетевого ресурса) или имя источни-



 

ка данных ODBC (DSN)

<параметры>

Variant

Необязательный

Используется для задания специаль-



 

ных параметров базы данных. Напри-



 

мер, в рабочей области Jet применяет-



 

ся значение True, если нужно открыть



 

базу данных в режиме монопольного



 

доступа, или значение False, если



 

нужно открыть базу данных в режиме



 

общего доступа. Значение False



 

устанавливается по умолчанию. Пара-



 

метры, используемые в рабочей об-



 

ласти ODBCDirect, описаны в справоч-



 

ной системе Access

<режим>

Variant

Необязательный

Задается значение True, если нуж-


(подтип

 

но открыть базу данных только для


Boolean)

 

чтения, или значение False, если



 

нужно открыть базу данных для чте-



 

ния и записи. По умолчанию исполь-



 

зуется значение False

<соединение>

Variant

Необязательный

Строка соединения (connection


(подтип

 

string). Используется для указания


String)

 

параметров соединения с источни-



 

ком данных, включая пароль

Аналогично создать и открыть новую базу данных можно: D с помощью метода CreateDatabase объекта Workspace; П с помощью метода CreateDatabase объекта DBEngine. Глобальным является метод CreateDatabase объекта DBEngine.

Метод CreateDatabase создает новый объект Database, добавляет его в семейство Databases открытых баз данных в рабочей области, сохраняет базу данных на диске и возвращает открытый объект Database. Этот метод используется только в рабочей области ядра Microsoft Jet. Метод CreateDatabase имеет следующие параметры (табл. 16.4):

Database CreateDatabase (<имя>, <порядок>, <параметры>)

Замечание

В программе на VBA для ссылки на метод CreateDatabase объекта DBEngine можно использовать сокращенную ссылку или указать префикс DBEngine с точкой. А для ссылки на метод объекта Workspace необходимо указать конкретную рабочую область, например:

' Использование метода объекта DBEngine:

Set dbl = CreateDatabase(...)

Set db2 = DBEngine.CreateDatabase(...)

' Использование метода объекта Workspace:

Set db3 = Workspaces(0).CreateDatabase(...)

Таблица 16.4. Параметры метода CreateDatabase

Параметр

Тип Обязательный или нет

Описание

<порядок> Variant

Обязательный

Строковое выражение, опреде-(подтип ляющее порядок символов, кото-String) рый будет использоваться в операциях сравнения и сортировки в создаваемой базе данных. Допускается также создание пароля для нового объекта Database путем слияния строки пароля (начинающейся с символов ";pwd=") с константой в аргументе <порядок>, например:

DbLangCyrillic & " ; р\»го>=МойПароль "

<параметры> <константы> Необязательный Константа или комбинация констант, которая определяет один или несколько параметров: версию формата данных и режим шифрования или дешифрования базы данных во время сжатия. Константы приведены в справке Access
<имя> String Обязательный Имя файла создаваемой базы данных. Следует указать полный путь и имя файла, например "С: \dbl .mdb" или "\\serverl\sharel\dirl\dbl". Если пользователь не указывает расширение имени, автоматически добавляется расширение mdb. Данный метод позволяет создавать только файлы mdb.

Чтобы получить доступ к данным в открытой одним из перечисленных способов базе данных, необходимо открыть набор записей. Набор записей может представлять собой все записи таблицы или часть записей таблицы, удовлетворяющих указанному условию, или результат выборки из нескольких таблиц. Чтобы открыть набор записей в базе данных, используйте метод OpenRecordset объекта Database (см. программу 16.3). Этот метод возвращает ссылку на созданный объект Recordset и имеет следующие параметры (табл. 16.5):

Recordset OpenRecordset(<источник>,<тип>, <параметры>, <блокировки>)

Замечание

С помощью метода OpenRecordset в базе данных можно открыть связанную таблицу (точно так же, как и таблицу, хранящуюся в базе данных), указав ее имя.

Таблица 16.5. Параметры метода OpenRecordset

Параметр

Тип Обязательный или нет

Описание

<источник>

   

String Обязательный Источник записей для нового


   

объекта Recordset. В качестве


   

источника записей можно ука-


   

зать имя таблицы или запроса, а


   

также инструкцию SQL, которая


   

возвращает записи

<тип>

<константа> Необязательный

Константа, указывающая тип от-


   

крываемого объекта Recordset.


   

Эти константы приведены в


   

табл. 16.6

<параметры>

<константы> Необязательный

Произвольная комбинация определенных констант, задающих


   

характеристики нового объекта


   

Recordset. Эти константы при-


   

ведены в справочной системе


   

Access

<блокировки>

<константа> Необязательный

Константа, определяющая тип


   

блокировки объекта Recordset.


   

Возможные константы перечис-


   

лены в справке Access

Таблица 16.6. Константы, определяющие тип набора записей

Константа

Тип набора записей

DbOpenTable


Открытие табличного обьекта Recordset (только в рабочей области ядра Microsoft Jet)

DbOpenDynaset Открытие объекта Recordset типа динамического набора записей, аналогичного указателю ключевого набора записей ODBC
DbOpenDynamic Открытие обьекта Recordset динамического типа, аналогичного динамическому указателю ODBC (только в рабочей области ODBCDirect)

 

Константа

Тип набора записей

DbOpenSnapshot

Открытие объекта Recordset типа статического набора записей, аналогичного указателю статического набора записей ODBC

DbOpenForwardOnly Открытие объекта Recordset типа статического набора записей с последовательным доступом

Далее приведен пример открытия таблицы, взятый из программного кода сервера приложения "Игра в доминирование" (программа 16.3).

Программа 16.3. Открытие таблицы в текущей базе данных

Dim db As Database

Dim rs As Recordset

' Получаем доступ к текущей базе данных:

Set db = CurrentDb

' Открываем таблицу сообщений для игрока (это связанная таблица):

Set rs = db.OpenRecordset("Сообщения", dbOpenDynaset)

' Код использования таблицы ... .

rs.Close ' Закрыли таблицу

Set rs = Nothing ' Очистили объектные переменные

Set db = Nothing

Программное изменение структуры и схемы данных

Для изменения схемы данных создан язык определения данных (DDL, Data-Definition Language). Инструкции на языке DDL позволяют выполнять действия по изменению схемы данных и структуры объектов данных, например:

  • создавать и удалять таблицы;
  • добавлять и удалять из таблиц поля и индексы;
  • создавать и удалять связи между таблицами.

В интерфейсе DАО имеется набор специальных объектов, который является интерфейсом для доступа к средствам DDL. Таким образом, с помощью объектов DАО можно управлять структурой таблиц и схемой данных, не составляя самих инструкций на языке DDL.

Следующий пример программного кода (программа 16.4) взят из процедуры initGame сервера приложения "Игра в доминирование". Этот пример иллюстрирует использование инструкций на языке DDL для удаления таблицы со старой структурой и создания новой таблицы с заданной структурой. Аналогичные действия можно выполнить, пользуясь объектно-ориентированным интерфейсом DАО. Целью этой процедуры является изменение структуры таблицы "ПолеИгрок", поэтому, вообще говоря, можно было бы изменить набор полей этой таблицы с помощью инструкции DDL ALTER TABLE. Эта инструкция позволяет удалить или добавить в таблицу поле или составной индекс. Удаление и добавление полей в таблицу средствами DDL через интерфейс DАО представлено в программе 16.5.

Замечание

Необходимо помнить о том, что изменение структуры связанных таблиц запрещено. Поэтому в примере (программы 16.4 и 16.5) для доступа к таблице "ПолеИгрок" открывается база данных DominationGame.mdb, в которой сохранена эта таблица, а не используется текущая база данных DominationGameServer.mdb, в которой установлена связь с этой таблицей.

Программа 16.4. Удаление и создание таблицы с помощью инструкций DDL

Dim db As Database

Dim fieldSize As Long, i As Long

Dim strDDL As String

' Узнаем линейный размер игрового поля, выраженный в клетках

fieldSize = CLng(get_parameter("РазмерПоля"))

' Открываем базу данных, в которой хранится нужная таблица

Set db = OpenDatabase(CurrentProject.Path & "\DominationGame.mdb")

' Удалить старую таблицу "ПолеИгрок" strDDL = "DROP TABLE ПолеИгрок;"

' Если таблица не существует, удаление вызовет ошибку

On Error GoTo the_next_2

db.Execute strDDL the_next_2:

On Error GoTo 0

' Создать новую таблицу "ПолеИгрок"

strDDL = "CREATE TABLE ПолеИгрок ("

For i = 1 To fieldSize - 1

strDDL = strDDL & get_column_name(i) & " TEXT(20), "

Next i

strDDL = strDDL & get_column_name(fieldSize) & " TEXT(20) );"

db.Execute strDDL

' Прочие действия ... db.Close

Программа 16.5. Изменение структуры таблицы с помощью интерфейса DАО

Dim db As Database

Dim fieldSize As Long, i As Long

Dim strSQL As String

Dim fid As Field

' Узнаем линейный размер игрового поля, выраженный в клетках

fieldSize = CLng(get_parameter("РазмерПоля"))

' Открываем базу данных, в которой хранится нужная таблица

Set db = OpenDatabase(CurrentProject.Path & "\DominationGame.mdb")

' Удалить старые записи в таблице "ПолеИгрок"

StrSQL = "DELETE * FROM ПолеИгрок;" db.Execute strSQL

' Удалить старые поля в таблице "ПолеИгрок"

For i = 1 То db.TableDefs("ПолеИгрок").Fields.Count

db.TableDefs("ПолеИгрок").Fields.Delete

get_column_name(i) Next i

' 'Создать новые поля в таблице "ПолеИгрок"

For i = 1 То fieldSize

Set fid = db.TableDefs("ПолеИгрок").CreateField( _

get_column_name(i), dbText, 20)

db.TableDefs("ПолеИгрок").Fields.Append fid

Next I

' Прочие действия ...

db.Close

В программе 16.5 проиллюстрировано удаление и добавление полей в таблицу "ПолеИгрок" средствами DDL с использованием интерфейса DАО. Удаление поля производится с помощью метода Delete, в качестве параметра которого указывается имя удаляемого поля. Добавление нового поля производится следующим образом. Создается новый объект Field, обладающий необходимыми характеристиками — заданным именем поля, типом и размером данных. После этого с помощью метода Append созданный объект Field добавляется в семейство Fields объекта TableDef, содержащее все поля таблицы "ПолеИгрок". Аналогично (с помощью DАО) можно выполнить создание и удаление таблиц и индексов.

Выполнение операций с данными

Для изменения данных в источнике создан язык структурированных запросов (SQL, Structure Query Language). Инструкции на языке SQL позволяют выполнять действия по изменению данных, например — добавлять, изменять или удалять записи в таблице или запросе, выбирать набор записей из источника, удовлетворяющий заданному условию.

C помощью объектов DАО можно осуществлять всевозможные манипуляции с данными. Например, такие как:
  • получение набора записей из таблицы;
  • выполнение запроса SQL для получения набора записей;
  • использование запроса, сохраненного в базе данных в виде объекта;
  • использование набора методов объекта Recordset, предоставляющего широкие возможности по обработке данных: чтение, анализ и изменение данных без составления инструкций на языке SQL.

В следующих примерах приведены приемы программного изменения данных в открытом наборе записей (программы 16.6—16.8). Переменная rs соответствует открытому набору записей — объекту типа Recordset.

Программа 16.6. Добавление записи в таблицу

' Добавляем сообщение в таблицу сообщений клиента

rs.AddNew ' Создание новой записи

rs!ИмяИгрока = playerName ' Запись значения в поле ИмяИгрока

rs!Сообщение = message ' Запись значения в поле Сообщение

rs.Update ' Сохранение изменений в источнике

rs.Bookmark = rs.LastModified ' Перемещение курсора на новую запись

Программа 16.7. Изменение текущей записи в таблице

' Увеличиваем счет игрока, сделавшего ход

' Делаем текущей запись, содержащую данные для нужного игрока

rs.FindFirst "[ИмяИгрока] = '" & newPlayer & "'"

rs.Edit ' Переводим запись в режим правки

rs!Счет = rs!Счет + newCount ' Изменяем значение поля Счет

rs.Update ' Сохраняем изменения

rs.Bookmark = rs.LastModified ' Делаем измененную запись текущей

Программа 16.8. Удаление текущей записи в таблице

playerQueryCode = rs!КодЗаявки ' Сохраняем параметры заявки

playerTrial = rs!Значение ' во временных переменных

rs.Delete ' и удаляем заявку из таблицы

Для перемещения по записям используются методы Move, MoveFirst, MoveNext, MovePrev, MoveLast объекта Recordset. Метод MoveLast перемещает курсор на последнюю запись в наборе, что приводит к загрузке в набор всех записей. После этого можно прочитать значение свойства Count объекта Recordset. Оно будет соответствовать общему количеству записей в наборе.

Замечание

Удаление записей и объектов из базы данных приводит к тому, что файл базы данных становится фрагментированным и место, занимаемое им на диске, используется нерационально. Чтобы дефрагментировать файл базы данных, используют процедуру сжатия. Ее можно выполнить с помощью команды Сервис, Служебные программы, Сжать и восстановить базу данных (Tools, Database Utilities, Compact and Repair Database) или программно — с помощью метода CompactDatabase объекта DBEngine. Можно также установить флажок Сжимать при закрытии (Compact on Close) в диалоговом окне Параметры (Options) (команда Сервис, Параметры (Tools, Options), вкладка Общие (General)), чтобы сжатие базы данных проводилось автоматически при ее закрытии. Подробнее процедура сжатия описана в гл. 20.

Программная синхронизация доступа к данным

При одновременном доступе нескольких пользователей к одной и той же записи в источнике данных могут возникнуть конфликты. Например, конфликты могут возникать при выполнении метода Update или Delete объекта Recordset и метода OpenDatabase объекта Workspace или DBEngine. Предотвращение конфликтов зависит от настройки Access, касающейся методов блокировки записей, режима доступа к базе данных, периодов обновления данных. Об установке этих параметров мы уже говорили в разд. "Организация совместного доступа к данным и объектам" этой главы. Более подробную информацию можно найти в справочной системе Access.

При программном доступе к совместно используемым базам данных необходимо организовать собственную обработку ошибок, появляющихся при попытке выполнить операции, которые могут привести к возникновению конфликтов. В приложении "Игра в доминирование" используется метод блокировки на уровне записей, блокируются изменяемые записи. В этом случае при возникновении конфликта самым простым решением является ожидание момента, когда заблокированная запись будет освобождена другим пользователем. Этот подход достаточно просто реализовать в процедуре на VBA, используя оператор Resume для повторного выполнения действия через некоторый интервал времени (сделав паузу). Назовем этот способ синхронизацией доступа к данным.

Рассмотрим в качестве примера синхронизации функцию отправки сервером сообщения одному из игроков (программа 16.9). Вспомогательная функция doPause, позволяющая сделать паузу в работе приложения на заданное количество секунд, приведена в программе 16.10.

Программа 16.9. Синхронизация записи изменений в источнике данных

' Послать сообщение подключенному игроку

Public Sub SendMessage(message As String, playerName As String) .

' Объявления локальных объектных переменных:

Dim db As Database

Dim rs As Recordset

Dim counter As Integer

' Определяем собственную обработку ошибок:

On Error GoTo errHandler

Set db = CurrentDb

' Открываем таблицу сообщений для игрока:

Set rs = db.OpenRecordset("Сообщения", dbOpenDynaset)

On Error GoTo 0

' Добавляем сообщение в таблицу сообщений клиента:

rs.AddNew

rs!ИмяИгрока = playerName

rs!Сообщение = message

' Обработка ошибок, возникающих при совместном доступе

' к источнику данных:

On Error GoTo tryAgain

rs.Update

On Error GoTo 0

rs.Bookmark = rs.LastModified

' Закрываем открытые объекты:

closeAHHandler:

rs.Close

endHandler:

' Очищаем объектные переменные, т. к. они больше не используются:

Set rs = Nothing

Set db = Nothing

' Завершаем работу:

Exit Sub

' Синхронизация: tryAgain:

counter = counter + 1 If counter < 400 Then

doPause 5 Resume

End If

Обработка ошибок: errHandler:

Dim errMsg As String

errMsg = "Ошибка: " & Err.Number & vbCrLf & _

"Источник: " & Err.Source & vbCrLf & _ vbCrLf & Err.Description

MsgBox errMsg, vbCritical, ERR_TITLE Resume endHandler

End Sub

Программа 16.10. Сделать паузу на заданное количество секунд в работе приложения

Public Sub doPause(seconds As Integer)

Dim var_timeStart, var_timeCurrent

Dim ftimeOut As Boolean

var_timeStart = Time() ' Время начала паузы Do

' Передать управление другим процессам операционной системы

DoEvents

var_timeCurrent = Time() ' Текущее системное время

ftimeOut = _

CDate(var timeCurrent - var timeStart) >=

CDate(TimeSerial(0, 0, seconds))

Loop Until ftimeOut End Sub

Выполнение транзакций

Транзакцией называется операция обмена данными между клиентом и сервером. Методы объекта Workspace, использующиеся для выполнения транзакций, представлены в табл. 16.7.

Таблица 16.7. Методы объекта Workspace для выполнения транзакций

Метод

Описание

BeginTrans

Обозначает начало транзакции. Транзакции могут быть вложенными

CommitTrans Обозначает конец транзакции. В этот момент все изменения сохраняются в источнике без возможности их отмены
RollBack Завершение транзакции и отмена результата ее выполнения. Записи в источнике возвращаются в прежнее состояние, отмеченное командой BeginTrans

Все базы данных, открытые в рабочей области, имеют общую область действия транзакций. Это значит, что действие методов BeginTrans, CommitTrans и RollBack объекта Workspace распространяется на все базы данных в семействе Databases объекта Workspace.

Рассмотрим пример программы на VBA с использованием механизма выполнения транзакций (программа 16.11). В приложении "Игра в доминирование" механизм транзакций не используется.

Программа 16.11. Применение механизма транзакций

Sub ResetCount ()

Dim ws As Workspace

Dim db As Database

Dim rs As Recordset

Dim flnTrans As Boolean

On Error GoTo errHandler ;..

flnTrans = False ' Транзакция еще не началась

Set ws = DBEngine.Workspaces(0)

Set db = CurrentDb

Set rs = db.OpenRecordset("Игроки", dbOpenTable)

ws.BeginTrans ' Начало транзакции

flnTrans = True ' ' Транзакция началась

rs.MoveFirst

Do Until rs.EOF

rs.Edit

rs!Счет = 0

rs.Update

rs.MoveNext

Loop If

MsgBox("Сохранить сделанные изменения?", _

vbQuestion + vbYesNo, "Вопрос") = vbYes Then

ws.CommitTrans ' Сохранить изменения Else

ws.Rollback ' Отменить изменения

End If

exitHandle: rs.Close

Set db = Nothing

Set ws = Nothing

Exit Sub errHandler:

MsgBox "Ошибка!"

' Если ошибка возникла в процессе выполнения транзакции,

' отменяем сделанные изменения

If flnTrans Then

ws.Rollback End If

Resume exitHandle

End Sub

Защита сетевого приложения Access

Выбор политики защиты и установка защиты — предмет разработки приложения. А настройка схемы защиты приложения в соответствии с текущими потребностями в процессе использования приложения — задача администрирования. Администратор управляет составом пользователей и групп пользователей приложения и предоставляет им необходимые права доступа к объектам приложения по мере необходимости. Разработчик приложения предварительно определяет политику защиты приложения, выполняет установку защиты приложения и подготавливает приложение к использованию — определяет начальный состав пользователей и групп пользователей приложения и выполняет начальное распределение между ними прав доступа к объектам приложения. Таким образом, в процессе установки защиты приложения разработчик, помимо прочих действий, в определенный момент выполняет функции администратора.

Действия, которые выполняет администратор защищенного приложения, описаны в гл. 20. В этой главе мы расскажем о действиях, выполняемых разработчиком, связанных с установкой защиты и определением политики защиты приложения.

Определение политики защиты включает решение следующих вопросов:

  • какова степень защиты приложения;
  • по какому принципу производится выделение групп пользователей;
  • по какому принципу организуется разграничение прав доступа между отдельными пользователями и группами;
  • какие права доступа необходимо задать по умолчанию.

Например, разработчик может решить, предоставить ли разрешение другим пользователям просматривать или выполнять запрос без изменения данных или структуры запроса, задать ли права по умолчанию для всех запросов.

Администратор приложения обладает всеми необходимыми правами для изменения политики защиты приложения, но необходимости в этом не должно возникать. Ведь в задачу разработчика приложения входить выбор наиболее подходящей политики защиты, которая удовлетворяет требованиям, предъявляемым к приложению, и упрощает процесс администрирования.

Защита базы данных на уровне пользователей

Защита на уровне пользователей предназначена для предоставления разным пользователям разного уровня доступа к объектам приложения. Пользователи могут объединяться в группы внутри рабочей группы. Группам, как и пользователям, могут быть назначены определенные права доступа к объектам базы данных.

Существует два типа прав доступа, предоставляемых пользователю: явные и неявные. Явные права доступа — те, что назначены непосредственной учетной записи пользователя. Неявные права доступа — те, что назначены учетной записи группы, в которую входит этот пользователь. Добавление пользователя в группу приводит к предоставлению пользователю прав, назначенных группе. Удаление пользователя из группы лишает пользователя этих прав.

Права пользователя на доступ к объекту складываются из его явных и неявных прав. В системе защиты на уровне пользователей Microsoft Access, в отличие от системы защиты на уровне пользователей файловой системы NTFS, применяется политика "наименьших ограничений". Это означает следующее: если пользователю (который может входить в разные группы, обладающие различными правами доступа) назначены и разрешающие и запрещающие права к некоторому объекту базы данных Access, то доступ к объекту пользователю предоставляется.

Группы пользователей делают управление правами доступа более удобным. Вместо того чтобы каждый раз при введении нового пользователя в рабочую группу прелоетавлять ему все необходимые права к объектам базы данных, можно назначить эти права группе. Тогда процесс предоставления заданных прав доступа сведется к добавлению нового пользователя в эту группу.

Рабочая группа пользователей базы данных

Рабочей группой в Access называется группа пользователей сети, совместно использующих одну или несколько баз данных Access. Если база данных защищена на уровне пользователей, в файл рабочей группы (файл с расширением mdw) записываются учетные записи пользователей и групп, входящих в рабочую группу. Пароли пользователей также хранятся в файле рабочей группы. Учетным записям в рабочей группе могут быть назначены права доступа к базе данных и ее объектам — таблицам, запросам, формам, отчетам и макросам. Права доступа сохраняются в защищенной базе данных.

Замечание

В ранней версии Access 97 в файле рабочей группы сохранялась также информация о настройках Access, заданных пользователем в окне Параметры (Options). В Access 2000 и Access 2002 эти настройки сохраняются в реестре Windows, в разделах:

\HKEY_CURRENT_USER\Software\Microsoft:\0ffice\9.0\Access\Settings, \HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Access\Settings.

По умолчанию используется стандартный файл рабочей группы SYSTEM.MDW, автоматически созданный при установке Access. Этот файл находится в папке, соответствующей языку локализации Access. Для американской версии используется папка с названием \1033, для русской — \1049, она находится в папке \Program Files\Microsoft Office\Office. Создание нового файла рабочей группы и его подключение выполняются с помощью служебной программы Администратор рабочих групп (Workgroup Administrator) (см. гл. 20).

При установке защиты на уровне пользователей, прежде чем создавать учетные записи пользователей и групп и назначать им права доступа к объектам базы данных, следует подключить соответствующий файл рабочей группы. Можно использовать стандартный файл рабочей группы или создать новый. Не рекомендуется использовать стандартный файл рабочей группы, поскольку любой другой пользователь сможет использовать собственный стандартный файл рабочей группы для доступа к базе данных. Чтобы обеспечить уникальность рабочей группы, необходимо создать с помощью программы Администратор рабочих групп (Workgroup Administrator) новый файл рабочей группы и указать уникальный идентификатор рабочей группы (см. гя. 20).

Встроенные учетные записи Access

В любой рабочей группе пользователей базы данных Microsoft Access существуют стандартные учетные записи:

  • пользователь Admin;
  • группа Admins;
  • группа Users.

Их нельзя удалить, но можно изменить права доступа, назначенные им по умолчанию.

Пользователь Admin по умолчанию включен и в группу Users, и в группу Admins. Любой добавляемый в рабочую группу пользователь автоматически включается в группу Users. Эта группа представляет собой всех пользователей Access. Никакой пользователь не может быть удален из группы Users.

Группа Admins представляет собой группу администраторов всех баз данных, используемых рабочей группой. Этой группе автоматически предоставляются полные права на доступ к этим базам данных. В каждый момент времени группа Admins должна содержать, по крайней мере, одну учетную запись пользователя.

Пользователь Admin представляет собой администратора всех баз данных Access. Однако, используя конкретный файл рабочей группы для защиты конкретной базы данных, пользователя Admin можно удалить из группы Admins и назначить ему и группе Users ограниченные права доступа к объектам защищаемой базы данных. Таким образом, база данных становится защищенной от доступа с помощью учетной записи Admin, используемой по умолчанию.

Права доступа к объектам конкретной базы данных, назначенные пользователю Admin и группе Users, остаются прежними при подключении любого файла рабочей группы. А права доступа, назначенные группе Admins, зависят от файла рабочей группы, подключенного к базе данных в данный момент. Например, защита базы данных сервера приложения "Игра в доминирование" проведена при подключении специально созданного для этого файла рабочей группы Domination.mdw. Группе Admins назначены максимальные права доступа ко всем объектам этой базы данных. Если открыть названную базу данных с использованием стандартного файла рабочей группы System.mdw, у группы Admins не будет никаких прав на объекты этой базы данных.

Внимание

При установке защиты необходимо помнить о сохранении прав доступа, назначенных встроенным учетным записям Admin и Users при подключении стандартного файла рабочей группы Access, чтобы сделать систему защиты базы данных неуязвимой.

Административные права доступа

Административные права предоставляют полный доступ к объектам и/или базе данных, а также разрешение на изменение прав доступа других пользователей и групп. Административными правами обладают:

  • все пользователи группы Admins;
  • владельцы объектов;
  • пользователи, которым явно предоставлены административные права доступа.

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

Только пользователи группы Admins рабочей группы базы данных могут изменять параметры защиты с помощью команд меню Сервис, Защита (Tools, Security) или с помощью Мастера защиты на уровне пользователей.

Право на владение объектами базы данных

Владельцем называется учетная запись пользователя, имеющего контроль над базой данных или ее объектом. По умолчанию владельцем объекта или базы данных является пользователь, создавший их (то есть пользователь, зарегистрированный при открытии базы данных). Учетная запись группы не может быть владельцем базы данных, но может быть владельцем ее объекта. В этом случае все пользователи данной группы являются владельцами этого объекта. Владелец объекта или базы данных обладает исключительными правами, которых его нельзя лишить. Даже если ему не предоставлены определенные права доступа, он может их вернуть, изменив права доступа к объекту или базе данных для себя и других пользователей. Владелец базы данных всегда может открыть ее.

Пользователи, которые имеют разрешение на изменение прав доступа к объекту, могут изменить его владельца с помощью диалогового окна Разрешения (User and Group Permissions), как описано в гл. 20, или воссоздав данный объект его копированием, импортом или экспортом в другую базу данных (см. разд. "Предоставление права на владение объектами базы данных" гл. 20).

Замечание

Копирование, импорт и экспорт запросов, у которых для свойства При запуске предоставляются права (Run Permissions) установлено значение Владельцы (Owner's), не приводит к изменению их владельцев. Изменение владельца запроса возможно только в том случае, если это свойство имеет значение Пользователи (User's).

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

Установка системы защиты на уровне пользователей

Рассмотрим систему защиты приложения "Игра в доминирование". Напомним, что приложение "Игра в доминирование" состоит из клиентской и серверной частей, реализованных в виде отдельных баз данных Access. В серверной базе данных хранится информация о текущем состоянии игры. Игроки, обращающиеся к серверу через клиентские приложения, имеют ограниченные права доступа к объектам серверной базы данных. Эти ограничения необходимы, чтобы игроки имели равные возможности в игре и не могли повлиять на состояние игры недопустимым образом. Поэтому необходима специальная защита серверной части приложения по схеме защиты на уровне пользователей. В то же время, нет особой необходимости в специальной защите клиентской части приложения. Можно разрешить любому пользователю сети- воспользоваться приложением-клиентом, чтобы подключиться к приложению "Игра в доминирование". Однако, чтобы пользователь клиентского приложения мог зарегистрироваться на сервере, он должен иметь учетную запись Р единой рабочей группе пользователей приложения. Таким образом, необходимо создать один файл . рабочей группы, содержащий информацию обо всех участниках Игры в доминирование, который необходимо использовать для работы как с серверной, так и с клиентской частью приложения. Так мы и поступили — создали файл Domination.mdw.

Рассмотрим основные этапы установки защиты сетевого приложения Access на примере защиты приложения "Игра в доминирование".

Замечание

Прежде чем приступить к защите собственного приложения Access, сделайте копию системного файла SYSTEM.MDW и копию пока не защищенного приложения. Это необходимо, поскольку удивительно легко заблокировать приложение от себя самого. Системный файл рабочих групп, использующийся в Access 2002 по умолчанию, находится в папке, относительный путь к которой указан в реестре Windows, в разделах:

HKEY_CURRENT_USER\Software\Microsoft\0fficeUO.0\Access\Jet\ 4.0\Engines\SystemDB

HKEY_USERS\.DEFAULT\Software\Microsof t:\0ffice\10.0\Access\Jet\ 4.0\Engines\SystemDB

Процесс установки защиты на уровне пользователей для любой базы данных Access можно разделить на следующие этапы:

  • создание файла рабочей группы и подключение его к приложению Access;
  • назначение владельца базы данных и его объектов;
  • создание учетных записей групп и пользователей в рабочей группе;
  • назначение прав доступа к объектам базы данных пользователям и группам.

Для защиты очередного приложения необязательно требуется создание нового файла рабочей группы. Хорошим стилем является создание и использование одного файла рабочей группы для ряда приложений Access, с которыми работает одна и та же группа пользователей, например сотрудники одного отдела.

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

Использование Мастера защиты

Процедура установки защиты базы данных Access на уровне пользователей автоматизирована, ее можно выполнить с помощью Мастера защиты базы данных, однако воспользоваться им смогут только пользователи группы Admins.

Чтобы защитить базу данных на уровне пользователей с помощью мастера:

  1. Откройте базу данных, которую требуется защитить.
  2. Выберите команду Сервис, Защита, Мастер (Tools, Security, User-Level Security Wizard).
  3. Следуйте инструкциям мастера.

Мастер защиты базы данных на уровне пользователей позволяет создать или изменить существующий файл рабочей группы (рис. 16.4). Рекомендуется создать новый файл рабочей группы и не использовать системный файл рабочей группы System, mdw. Для того чтобы изменить существующий файл рабочей группы (для защиты базы данных), необходимо зарегистрироваться с именем любого пользователя (кроме пользователя Admin), обладающего административными правами доступа к базе данных. Если зарегистрироваться с именем пользователя Admin, который по умолчанию включен в группу Admins и обладает административными правами, с помощью Мастера защиты можно будет только создать новый файл рабочей группы и нельзя будет изменить существующий.

Рис. 16.4. Первое диалоговое окно Мастера защиты базы данных

Мастер защиты позволяет:

  • выбрать объекты базы данных, которые требуется защитить;
  • указать пароль для защиты программного кода на VBA;
  • выбрать группы из списка групп с типичными правами доступа;
  • предоставить ограниченные права доступа группе Users;
  • создать учетные записи пользователей;
  • определить вхождение пользователей в группы..

Мастер создает новую защищенную базу данных и импортирует в нее все объекты исходной базы данных, сохраняя резервную копию незащищенной базы данных с прежним именем (по умолчанию), но с расширением bak вместо mdb. После завершения работы мастера на экране отображается отчет о защите базы данных, содержащий всю указанную в окнах мастера информацию, необходимую для восстановления файла рабочей группы. Этот отчет рекомендуется распечатать или сохранить в формате снимка отчета, чтобы по сохраненной информации потом можно было восстановить файл рабочей группы в случае его повреждения (см. разд. "Создание и восстановление файла рабочей группы" гл. 20 и разд. "Снимки отчетов" гл. 6).С помощью мастера в файл рабочей группы Domination.mdw, созданный для "Игры в доминирование", были добавлены учетные записи пользователей, перечисленные в табл. 16.8.

Таблица 16.8. Пользователи приложения "Игра в доминирование"

Имя пользователя

Пароль

Код пользователя

Группы, в которые входит пользователь

Флинт

пиастры

Adk j 7uLn61 8 4 FTAwopW

Admins, Users

Джим

без пароля

jAv06BLSS2d6KnN5X80

Users

Ливси

без пароля

4yF3yNprLXhlzmS3iBC

Users

Треллони

без пароля

QfnFceqtWpVTbWRnSOq

Users

Admin

game

<уже существовал>

Users

Мастер защищает все выбранные на определенном этапе объекты базы данных, отбирает у группы Users все разрешения на доступ к этим объектам либо оставляет данной группе заданные ограниченные права доступа, а затем зашифровывает базу данных. Межтабличные связи и любые связанные таблицы воссоздаются в защищенной базе данных.

С этого момента только пользователи, входящие в группу Admins, учетные записи которых сохранены в файле рабочей группы, созданном или присоединенном с помощью мастера, будут иметь полный доступ к защищенным объектам в базе данных. А текущий пользователь, обладающий административными правами, становится владельцем базы данных и всех ее объектов. Для того чтобы управлять доступом к защищенным объектам, следует предоставить соответствующие разрешения учетным записям пользователей и/или групп.

Если понадобится изменить параметры защиты, Мастер защиты можно использовать неоднократно. Еще раз отметим, что для применения Мастера защиты необходимо обладать административными правами доступа к базе данных.

Создание и подключение файла рабочей группы

Подключение файла рабочей группы Domination.mdw можно провести двумя способами: с помощью программы Администратор рабочих групп (Workgroup Administrator) или с помощью параметра командной строки /wrkgrp. В первом случае файл рабочей группы присоединяется к Access и используется для всех баз данных, открывавмых в нем. Во втором случае файл рабочей группы присоединяется к конкретной базе данных и не используется для других баз данных, открываемых в Access. Второй способ намного удобнее, если требуется параллельно работать и с защищенными, и с незащищенными базами данных на одном компьютере или если используются разные файлы рабочих групп для разных защищенных баз данных. Создание и подключение файла рабочей группы Domination. mdw описано в разд. "Использование файла рабочей группы " гл. 20.

Снятие защиты на уровне пользователей

Бывают ситуации, когда необходимо снять защиту базы данных на уровне пользователей. Это требуется, например, чтобы сделать базу данных доступной всем или если администрирование базы данных с течением времени стало затруднительным из-за резкого увеличения числа пользователей и возникла необходимость перераспределить пользователей по группам, назначив им права доступа по новой схеме.

Снятие защиты на уровне пользователей может выполнить только пользователь, обладающий административными правами. Процедура снятия защиты на уровне пользователей включает в себя два этапа.

  • Предоставление группе Users полных прав на доступ к объектам базы данных.
  • Изменение владельца базы данных — предоставление права владения пользователю Admin.

Итак, чтобы снять защиту базы данных на уровне пользователей:

  1. Откройте защищенную базу данных.
  2. Зарегистрируйтесь с именем пользователя, являющегося администратором рабочей группы (администраторы рабочей группы входят в группу Admins).
  3. Предоставьте группе Users полные права на доступ ко всем объектам базы данных.
  4. Закройте базу данных и Access. На этом первый этап заканчивается.
  5. Запустите Access.
  6. Создайте новую базу данных и зарегистрируйтесь как пользователь Admin.
  7. Импортируйте в новую базу данных все объекты из защищенной базы данных.
  8. Если текущий файл рабочей группы будет использоваться в дальнейшем, удалите пароль пользователя Admin. В этом нет необходимости, если в дальнейшем будет применяться стандартный файл рабочей группы System. mdw, созданный при установке Access.

Замечание

Теперь защита базы данных полностью снята. Любой пользователь Access сможет использовать базу данных и получить полный доступ к ее объектам: таблицам, запросам, формам, отчетам и макросам. Эти права доступа действуют для любого файла рабочей группы, поскольку учетная запись Admin везде одинаковая. Текущий файл рабочей группы, подключенный к Access в момент создания новой базы данных (шаг 6), определяет группу Admins администраторов новой базы данных.

Создание учетных записей

Управление учетными записями, как и назначение прав доступа, является задачей администрирования защищенной базы данных, хотя, помимо управления учетными записями, существует достаточно широкий спектр других задач, за выполнение которых отвечает администратор. О задачах администрирования рассказано в гл. 20.

Назначение прав доступа

С помощью системы защиты на уровне пользователя можно ограничить доступ к базе данных и отдельным ее объектам (таблицам, запросам, формам, отчетам и макросам).

В Access 97 можно было назначить также права для доступа к модулям VBA. В Access 2000 и Access 2002 защита модулей не входит в систему защиты на уровне пользователей. Защита программного проекта VBA выполняется отдельно. О том, как это сделать, рассказывается в разд. "Защита программного кода на VBA" данной главы (а о защите страниц доступа к данным — в разд. "Защита совместно используемых страниц доступа к данным"этой же главы).

Способ установки прав доступа к базе данных (и ее объектам), защищенной на уровне пользователей, описан в разд. "Назначение прав доступа к объектам базы данных" гл. 20, поскольку это является не только задачей разработки, но и задачей администрирования.

Права доступа в приложении "Игра в доминирование"

Обратимся к системе защиты приложения "Игра в доминирование". Серверная база данных содержит объекты, которые будут совместно использоваться в сети несколькими игроками. Необходимо обеспечить защищенность этих объектов в такой степени, которая позволит игрокам принять участие в игре и при этом не вмешиваться в ход игры. Клиентская база данных содержит объекты, которые будут использоваться одним игроком, имеющим собственную копию этой базы данных или открывшим базу данных клиента в режиме общего доступа. Взаимодействие с серверной базой данных осуществляется через интерфейс DАО с помощью процедур на VBA. Поэтому в клиентской базе данных имеет смысл защитить код на VBA и предоставить всем пользователям права, достаточные для использования объектов базы данных на уровне игрока. Таким образом, необходимо предоставить необходимые права группе Users и защитить проект VBA, как описано в разд. "Защита программного кода на VBA" данной главы. Параметры системы защиты приложения "Игра в доминирование" приведены в приложении 2.

Замечание

В примере приложения "Игра в доминирование" на компакт-диске программный проект не защищен и может быть просмотрен любым пользователем.

Ограничение разрешений для встроенных учетных записей Access

Чтобы закрыть доступ к объектам базы данных посторонним пользователям, зарегистрированным с помощью стандартной учетной записи Admin:

  1. Подключите необходимый файл рабочей группы или создайте новый, как описано в разд. "Использование файла рабочей группы" в гл. 20.

Замечание

Для того чтобы обеспечить полную защиту вашей базы данных, не используйте стандартный файл рабочей группы System. mdw, создаваемый при установке Microsoft Access. Следует удостовериться, что файл рабочей группы, определяющий рабочую группу, к которой вы присоединяетесь, был создан с уникальным кодом рабочей группы, или, если это не так, следует создать новую рабочую группу.

  1. Активизируйте диалоговое окно Вход (Logon), предназначенное для регистрации пользователя. Это диалоговое окно появляется в момент открытия базы данных, если регистрация пользователя требует ввода непустого пароля. В Microsoft Access по умолчанию для регистрации пользователя используется стандартная учетная запись Admin. Поэтому, чтобы активизировать диалоговое окно Вход (Logon), необходимо задать непустой пароль для учетной записи пользователя Admin. Установка пароля пользователя описана в разд. "Управление учетными записями" гл. 20.
  2. Создайте учетную запись пользователя-администратора. Необходимо добавить эту учетную запись в стандартную группу Admins. Создание учетной записи пользователя описано в разд. "Управление учетными записями" гл. 20.
  3. Закройте Microsoft Access и откройте базу данных снова. Когда появится диалоговое окно Вход (Logon), зарегистрируйтесь с именем нового администратора.
  4. Удалите пользователя Admin из группы Admins.

Замечание

Если владельцем объектов в защищаемой базе данных должен быть пользователь, не входящий в группу администраторов, создайте для него учетную запись, снова перезапустите Access и зарегистрируйтесь с именем этого пользователя при открытии базы данных. Этот пользователь должен, по крайней мере, обладать правами Чтение данных (Read data) и Чтение макета (Read design) для всех объектов базы данных, которые требуется защитить.

Защита программного кода на VBA

Защитить программный проект VBA можно с помощью пароля:

  1. Откройте окно редактора Visual Basic, например с помощью комбинации клавиш <Alt>+<Fll>.
  2. Выберите команду Сервис, Свойства <Имя программного проекта> (Tools, <Project name> Properties). Появится диалоговое окно свойств программного проекта.
  3. Откройте вкладку Защита (Protection) и введите пароль в поле Пароль (Password) и Подтверждение пароля (Confirm password). Этот пароль будет требоваться при попытке отобразить диалоговое окно свойств проекта.
  4. Если необходимо защитить проект от просмотра, установите флажок Запретить просмотр программного кода (Lock project for viewing). Это значит, что введенный пароль будет также использован для защиты программного проекта от просмотра.
  5. Нажмите кнопку ОК.

Установленные параметры начнут действовать только при следующем открытии базы данных.

Есть другой способ защиты программного кода приложения Access — можно создать файл, содержащий откомпилированную версию программного проекта и всех объектов базы данных (файл с расширением mde) или проекта Access (файл с расширением ade). Открыв этот файл, пользователи могут использовать все созданные в нем объекты, изменять данные и выполнять макросы и процедуры VBA, но не будут иметь возможности изменить структуру объектов или программный код. Такой файл имеет намного меньший размер по сравнению с исходным файлом базы данных или проекта. Права доступа и прочие обстоятельства, необходимые пользователю для возможности создания файла mde или ade, приведены в справочной системе Access 2002.

Внимание

Создать файл МОЕ или ADE можно только на основе базы данных или проекта Access в формате Access 2002. Если ваша база данных (или проект) сохранена в формате Access 2000, потребуется сначала преобразовать ее в формат Access 2002 (см. гл. 19).

Чтобы создать файл МDЕ на основе базы данных в формате Access 2002:

  1. Откройте Access 2002, но не открывайте базу данных или проект Access.
  2. Выберите команду Сервис, Служебные программы, Создать MDE-файл (Tools, Database Utilities, Make MDE File).
  3. Появится диалоговое окно База данных для сохранения как MDE (Database to Save as MDE). В раскрывающемся списке Тип файлов (Files of type) выберите элемент Базы данных Microsoft Access (Microsoft Access Databases). Затем укажите папку и имя файла исходной базы данных (файла с расширением mdb) и нажмите кнопку Создать MDE (Make MDE).
  4. Появится диалоговое окно Сохранение файла MDE под именем (Save MDE As). Укажите папку и введите имя целевого файла в формате MDE. ;
  5. Нажмите кнопку Сохранить (Save).

Чтобы создать файл ADE на основе проекта в формате Access 2002:

  1. Откройте Access 2002, но не открывайте базу данных или проект Access.
  2. Выберите команду Сервис, Служебные программы, Создать MDE-файл (Tools, Database Utilities, Make MDE File).
  3. Появится диалоговое окно База данных для сохранения как MDE (Database to Save as MDE). В раскрывающемся списке Тип файлов (Files of type) выберите элемент Проекты Access (Microsoft Access Projects). Затем укажите папку и имя файла исходного проекта Access 2002 (файла с расширением adp) и нажмите кнопку Создать MDE (Make MDE).
  4. Появится диалоговое окно Сохранение файла ADE под именем (Save ADE As). Укажите папку и введите имя целевого файла в формате ADE.
  5. Нажмите кнопку Сохранить (Save).

Выводы

В этой главе были рассмотрены особенности совместной работы с базами данных Access в сети. Было рассказано о том, чем общий доступ отличается от монопольного, как настроить параметры среды Access и базы данных для предотвращения конфликтов, возникающих при совместном изменении данных, каковы особенности изменения структуры объектов сетевой базы данных, как предоставить данные и объекты в совместное использование и, вместе с тем, обеспечить безопасность приложения, в частности описано использование системы защиты на уровне пользователей. Многие вопросы были рассмотрены на примере сетевого многопользовательского приложения Access "Игра в доминирование".



Опубликовал admin
1 Сен, Среда 2004г.



Программирование для чайников.