« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга


ПнВтСрЧтПтСбВс
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
    Популярное
ГЛАВА 3 Выражения, операторы и управляющие конструкции

Введение в Microsoft Sync Framework. Дмитрий Андреев

Функция AccessResource

Практические решения по использованию файла .htaccess

Функция GetScrollPos

Понимание SOAP

Создание образа установочного диска

8-й час. Полезные средства и приемы программирования

Определение IP-адреса с помощью Perl

Как писать драйвера (часть 1)




    Архив файлов



    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 178
Пользователей: 0

Статьи:: Базы данных :: Учебник по Access 2002 :: Глава 16. Особенности сетевых приложений.



отправить ссылку другу версия для печати  Обсудить на форуме

Глава 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 состоит из четырех частей: имени сервера ресурсов, имени общей папки на сервере, пути к ресурсу и имени ресурса:

\servernamesharepathfilename.

Чтобы изменить путь к странице доступа к данным, указанный в ярлыке страницы в базе данных 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" или "\serverlshareldirldbl". Если пользователь не указывает расширение имени, автоматически добавляется расширение mdb. Данный метод позволяет создавать только файлы mdb.

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

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

Замечание

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

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

Параметр

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

Описание

<источник>

   

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


   

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


   

исто