| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
Глава 16. Особенности сетевых приложений.
ЧАСТЬ III. РАЗРАБОТКА и
СОПРОВОЖДЕНИЕ ПРИЛОЖЕНИЙ ACCESS 2002
Особенности сетевых приложений Access База данных
Access может использоваться одним пользователем на локальном компьютере или
несколькими пользователями в сети. Использование базы данных в сети имеет ряд
особенностей. Чтобы подготовить базу данных для использования в сети, необходимо
выполнить специальную настройку среды Access, параметров базы данных и ее
объектов и реализовать особенности общего доступа к данным в программном коде
приложения. Об этом и пойдет речь в настоящей главе. Чтобы рассказ не был
слишком абстрактным, мы рассмотрим основные вопросы на примере сетевого
приложения Access "Игра в доминирование". Это приложение есть на компакт-диске с
примерами к книгам серии Microsoft Office 2002, который можно приобрести в
дополнение к данной книге. В этой главе
обсуждаются и вопросы разработки, и вопросы работы с сетевыми приложениями
Access 2002. Среди них:
Способы совместного использования баз
данных Базы данных
Microsoft Access могут использоваться одновременно несколькими пользователями в
сети. Предоставить общий доступ к базе данных можно несколькими
способами:
Совместное использование базы данных Чтобы
предоставить совместный доступ к базе данных Access, поместите ее на файловый
сервер или в общую папку на рабочей станции. Это самый простой метод обеспечения
совместного доступа к базе данных и всем ее объектам: формам, отчетам, запросам, макросам и модулям.
Он подходит, если нужно, чтобы все пользователи могли использовать одни и те же
объекты базы данных одинаковым способом. Поместив базу
данных в общую папку на файловом сервере или рабочей станции, убедитесь в том,
что установлен параметр, определяющий открытие базы данных по умолчанию в режиме
совместного доступа. Об установке этого параметра рассказано в разд. "Режимы
работы с базой данных в сети" этой главы. Для работы с
базой данных в сети необходимо выполнить локальную или сетевую установку Access
либо установить исполняемую версию Access. Совместное использование только данных Можно
предоставить совместный доступ в сети лишь к таблицам в базе данных Access. Для
этого необходимо разделить базу данных на файл объектов данных и файл объектов
приложения. Разделение базы данных с помощью мастера описано в гл.
19. После разделения
базы данных поместите файл объектов данных на файловый сервер или в общую папку
на рабочей станции, чтобы предоставить общий доступ к таблицам, а файл объектов
приложений — на компьютер пользователя в виде локальной копии. В этом случае
производительность базы данных будет несколько выше, чем при совместном доступе
ко всей базе данных, поскольку по сети будут передаваться только данные из
таблиц. При этом отдельный пользователь может настроить формы, отчеты и прочие
объекты из файла объектов приложения в соответствии со своими индивидуальными
потребностями. Эти изменения не отразятся на остальных пользователях, которые
используют свои локальные копии файла объектов приложения. Совместное использование объектов базы данных через
Интернет Объекты базы
данных можно предоставить в совместное использование через Интернет, создав на
их основе страницы HTML следующих видов:
Страницы HTML
можно отобразить в программе просмотра Интернета, такой как Internet Explorer.
(О работе с базами данных Access через Интернет см. гл.
12.) Совместная работа с базой данных с помощью
репликации Портфельная
репликация Windows позволяет использовать для работы с файлом (в том числе с
базой данных) два компьютера: например, компьютер в офисе и переносной
компьютер. Можно создавать реплики (специальные копии) базы данных Access для
хранения на разных компьютерах и синхронизировать изменения в них. Аналогично
несколько пользователей
могут работать со своими копиями — репликами базы данных, которые могут быть
синхронизированы по сети, с помощью удаленного доступа к сети или через
Интернет. Репликация баз данных Access описана в гл. 18. Совместный доступ к базе данных с помощью SQL
Server Если в сети
организации установлена СУБД SQL Server, ее можно использовать для совместной
работы с базой данных Access. Для этого необходимо создать клиент-серверное
приложение на основе базы данных Access. В результате станут доступны мощные
средства СУБД SQL Server. Можно преобразовать существующую базу данных Access в
клиент-серверное приложение с помощью мастера (гл. 19) или создать новое
приложение в архитектуре "клиент-сервер" (гл. 17). Режимы работы с базой данных в сети База данных
может быть открыта пользователем в сети в одном из четырех
режимов.
Можно указать
режим открытия базы данных, используемый по умолчанию:
Заданный режим
открытия по умолчанию действует только на локальном компьютере и не влияет на
режим, используемый по умолчанию для открытия базы данных пользователями других
компьютеров. Кроме того,
независимо от установленного режима по умолчанию, пользователь может открыть
базу данных в любом режиме, указав его следующим способом:
Рис. 16.1.
Список режимов открытия базы данных Замечание
Если база данных
(файл с расширением 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
предоставляет две возможности для реализации приложений с такой
архитектурой:
Замечание
В этой главе мы
говорим о первом способе — сетевых базах данных. Сетевое
приложение Access "Игра в доминирование" должно будет обслуживать нескольких
игроков — разных пользователей в сети. Предположим, пользователи работают в
одноранговой сети. Рабочие станции пользователей, принимающих участие в игре,
можно разделить на две категории: клиенты и серверы. На сервере выполняется ядро
игры — управляющий компонент приложения. На клиентских рабочих станциях
устанавливается компонент, предоставляющий пользователю интерфейс для участия в
игре. Таким образом, приложение "Игра в доминирование" представляет собой
распределенную базу данных Access с архитектурой "клиент-сервер", которая может
быть использована даже в одноранговой сети. Все участники одной игры
подключаются к одному серверу по схеме "звезда" (рис. 16.2).
Рис. 16.2.
Архитектура приложения "Игра в доминирование" Многопользовательский доступ к данным требует организации распределения
этого доступа между пользователями и обеспечения защиты этих данных в
соответствии.с правами пользователей. Все эти особенности сетевых приложений
реализованы в нашем примере, а методы их реализации описаны в данной
главе. Организация совместного доступа к данным и
объектам В сети доступ к
одним и тем же объектам могут одновременно получить сразу несколько
пользователей. Общий доступ к данным отличается от монопольного. Например,
совместная правка записей в таблице/запросе или изменение структуры объекта базы
данных может привести к возникновению конфликтов при сохранении изменений в
источнике. В Microsoft Access существуют стандартные механизмы для поддержания
совместного доступа к данным и объектам базы данных в сети и разрешения
конфликтов, возникающих при сохранении изменений. Общий доступ к
базе данных означает:
Совместный просмотр и изменение данных Предположим,
база данных открыта в режиме общего доступа несколькими пользователями в сети.
При этом несколько пользователей могут одновременно работать с одним и тем же
набором записей. При попытке изменить определенную запись, в то время как ее
редактирует другой пользователь или она удалена другим пользователем, возникает
конфликт совместного доступа к источнику данных. При совместном
доступе к базе данных Microsoft Access помогает отследить состояние записи во
время ее правки и позволяет убедиться в том, что используемые данные были
обновлены. В тот момент, когда несколько пользователей пытаются одновременно
изменить одну и ту же запись, Access отображает сообщение, позволяющее разрешить
возникший конфликт. Например, при попытке сохранить изменения в записи,
заблокированной в этот момент другим пользователем, отображается сообщение с
именем этого пользователя. Access помогает
отследить состояние записи, отображая специальный символ в области выделения
текущей записи. Возможные символы приведены в табл. 16.1. Таблица
16.1. Значок, обозначающий состояния текущей
записи
Методы управления блокировками записей Пока один
пользователь редактирует запись, Access позволяет автоматически запретить другим
пользователям изменять ее до тех пор, пока первый пользователь не закончит ее
правку. Предоставление одному пользователю исключительного права доступа к
записи называется блокировкой. Существует три
параметра блокировки записей в базе данных Access.
Замечание
Чтобы установить
параметр блокировки записей в сети, используемый по умолчанию:
Существует возможность выбора одного из двух уровней блокировки:
Рис. 16.3.
Вкладка Другие диалогового окна
Параметры Чтобы задать
уровень блокировки, используемый по умолчанию, установите флажок Блокировка
записей при открытии БД (Open databases using record-level locking) на
вкладке Другие (Advanced) диалогового окна Параметры (Options)
если нужна блокировка на уровне записей, или сбросьте этот флажок если нужна
блокировка на уровне страниц. Замечание
Внимание
Предотвращение конфликтов при блокировке записей в
сети Следующие четыре
параметра помогают избежать конфликтов при блокировке записей в
сети:
Значения этих
параметров устанавливаются в диалоговом окне Параметры (Options) на
вкладке Другие (Advanced). Подробное описание этих параметров есть в
справочной системе Access. Отображение обновленных данных Существует
несколько способов отображения на экране обновленных данных, полученных из
источника данных, совместно используемого в сети несколькими пользователями. Эти
способы позволяют увидеть изменения, которые были выполнены другими
пользователями, после того как отображенные на экране данные получены из
источника. Обновление
данных можно выполнить следующими способами.
Внесение
изменений в объекты базы данных при работе в сети характеризуется следующими
особенностями.
Например, при
добавлении полей в форму следует до обновления формы добавить поля в базовый
запрос.
Совместное использование страниц доступа к
данным Со страницами
доступа к данным могут работать несколько пользователей в сети. Страницы могут
быть отображены с помощью программы просмотра Интернета или в сообщении
электронной почты. Для этого источник данных для страницы — базу данных Access
или SQL Server — требуется поместить в общую папку на рабочей станции или на
сервере сети. В приложении
"Игра в доминирование" для отображения текущего состояния игрового поля в момент
инициализации новой игры создается страница доступа к данным "Игровое поле",
которая сохраняется в той же папке, что и приложение "Сервер игры". Эта папка
должна быть доступна в сети, чтобы игроки — пользователи приложения "Клиент
игры" — могли подключиться к игре и просмотреть страницу "Игровое поле" с
помощью программы Internet Explorer. Если база
данных, являющаяся источником данных для страницы, будет перемещена в другое
место, необходимо соответствующим образом изменить параметры соединения страницы
с источником данных. Для этого при работе со страницей в режиме Конструктора в
окне Список полей (Field List) нажмите кнопку Свойства подключения для
страницы (Page connection properties). В появившемся диалоговом окне на
вкладке Соединение (Connection) введите в поле ввода, предназначенное для
указания источника данных, имя и полный путь к базе данных в соответствии с
соглашением об именах UNC. Укажите имя сетевого ресурса, а не имя подключенного
сетевого диска, поскольку оно может измениться. Имя ресурса в
формате UNC состоит из четырех частей: имени сервера ресурсов, имени общей папки
на сервере, пути к ресурсу и имени ресурса: \servernamesharepathfilename. Чтобы изменить
путь к странице доступа к данным, указанный в ярлыке страницы в базе данных
Access, в окне базы данных щелкните по ярлыку страницы доступа к данным правой
кнопкой мыши и в контекстном меню выберите команду Сцойства (Properties).
Откроется окно свойств ярлыка, введите в поле ввода путь к файлу страницы (файлу
HTML). Рекомендуем указывать относительные пути в таких случаях. Например, для
страниц, хранящихся в той же папке, что и база данных, укажите только имя файла страницы без
абсолютного пути к ней. Например: Обзор товapoв.htm Хотя источником
данных для страницы может быть только база данных Access или SQL Server, можно
организовать доступ через страницу к данным других форматов, используя связанные
таблицы в базах данных Access. Замечание
Организация обмена данными между компонентами сетевого
приложения Существует
несколько способов обмена данными между компонентами приложения по
сети:
Использование
запросов и связанных таблиц подробно рассмотрено в других главах этой книги. Мы
остановимся на программном доступе к базам данных с использованием интерфейса
DАО. (06 установлении связи с таблицами см. гл. 3, об использовании запросов
см. гл. 8.) Программирование с использованием интерфейса
DАО Объекты
доступа к данным (DАО, Data Access Object) — это иерархия объектов,
обеспечивающая доступ к структуре базы данных и ее содержимому. В программах
Visual Basic пользователь имеет возможность использовать объектный интерфейс DАО
для выполнения следующих задач:
Интерфейс DАО
использует рабочие области двух видов:
Для рабочей
области Jet и для рабочей области ODBCDirect существуют две разные объектные
модели DАО. Они приведены в гл. 13. Реализация
модулей VBA для обмена данными между компонентами приложения "Игра в
доминирование" основана на применении интерфейса DАО с использованием рабочей
области ядра Jet. Поэтому в дальнейших примерах основное внимание уделено
приемам программирования на DАО, применимым в рабочей области ядра Jet. Сведения
о рабочей области ODBCDirect можно найти в справочной системе Access
2002. В следующих
разделах мы рассмотрим некоторые аспекты программирования с использованием DАО.
Подробную информацию об интерфейсе DАО можно найти в справочной системе
Access. Внимание
Создание и использование рабочей области Обе иерархии
объектов 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
Несколько
рабочих областей разных типов могут быть открыты одновременно. В момент создания
рабочей области начинается сеанс работы с ней. После выполнения всех необходимых
действий в рабочей области нужно завершить сеанс, закрыв рабочую область с
помощью метода 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 объекта DBEngine входит в набор глобальных методов, поэтому при
использовании сокращенной ссылки на этот метод без явного указания объекта
(DBEngine или Workspace) используется метод объекта DBEngine. Метод OpenDatabase
возвращает ссылку на созданный объект Database и имеет следующие параметры
(табл. 16.3): Database OpenDatabase(<имя>, <параметры>,
<режим>, <соединение>) Таблица
16.3. Параметры метода OpenDatabase
Аналогично
создать и открыть новую базу данных можно: D с помощью метода CreateDatabase
объекта Workspace; П с помощью метода CreateDatabase объекта DBEngine.
Глобальным является метод CreateDatabase объекта DBEngine. Метод
CreateDatabase создает новый объект Database, добавляет его в семейство
Databases открытых баз данных в рабочей области, сохраняет базу данных на диске
и возвращает открытый объект Database. Этот метод используется только в рабочей
области ядра Microsoft Jet. Метод CreateDatabase имеет следующие параметры
(табл. 16.4): Database
CreateDatabase (<имя>, <порядок>, <параметры>) Замечание
' Использование
метода объекта DBEngine: Set dbl =
CreateDatabase(...) Set db2 =
DBEngine.CreateDatabase(...) ' Использование метода объекта Workspace: Set db3 =
Workspaces(0).CreateDatabase(...) Таблица
16.4. Параметры метода CreateDatabase
Чтобы получить
доступ к данным в открытой одним из перечисленных способов базе данных,
необходимо открыть набор записей. Набор записей может представлять собой все
записи таблицы или часть записей таблицы, удовлетворяющих указанному условию,
или результат выборки из нескольких таблиц. Чтобы открыть набор записей в базе
данных, используйте метод OpenRecordset объекта Database (см. программу 16.3). Этот метод возвращает
ссылку на созданный объект Recordset и имеет следующие параметры (табл.
16.5): Recordset
OpenRecordset(<источник>,<тип>, <параметры>,
<блокировки>) Замечание
Таблица
16.5. Параметры метода OpenRecordset
|