Вы находитесь на странице: 1из 271

Вием П.

ля
Дубнов П. Ю.

Access 2 0 0 0
Проектирование баз данных

Москва, 2000
ББК 32.973.26-018.2
Д79
Дубнов П. Ю.
Д79 Access 2000. Проектирование баз данных. - М.: ДМК, 2000. - 272 с : ил.

ISBN 5-89818-091-5

В книге рассматривается широкий круг вопросов, связанных с использо­


ванием программной среды Access 2000, которая является составной час­
тью пакета Office 2000 и предназначена для создания банка данных.
Предлагается формализованный подход к определению структуры тех­
нико-экономических показателей, посредством которых описываются лю­
бые процессы управления, и на основе этого подхода дается обоснование
выбора первичных файлов (таблиц) в базах данных.
Детально обсуждаются вопросы создания интегрированной базы данных
в среде Access 2000: формирование БД с нуля, конвертирование в программ­
ную среду баз данных, созданных в ином программном окружении - Clarion,
FoxPro.
Представлены возможности формирования разнообразных запросов к ин­
тегрированной базе данных Access 2000 с использованием языка SQL и мак­
росов.
Книга может быть полезна специалистам, занимающимся практической
разработкой банков данных и приложений на их основе, а также студентам
соответствующих специальностей.

ББК 32.973.26-018.2

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

© Дубнов П. Ю., 2000


ISBN 5-89818-091-5 ©ДМК, 2000
Содержание
Введение 9

Глава I
Постановка проблемы 11
Режимы функционирования банка данных
в производственных условиях 11
Пользовательские запросы к банку данных 12
Проблемы, связанные с выбором СУБД 12
Вопросы, рассмотренные в настоящей книге 15
Резюме 15

Глава II
Предпроектная структуризация информации 16
Состав информации 17
Что понимать под структуризацией информации 17
Показатели 18
Необходимость структуризации 19
Технология структуризации 20
Пример структуризации данных 21
Проектирование логической структуры.бозы данных 23
Распределение полей по файлам 24
Файлы и связи между ними 24
Резюме 26

Глава III
Создание таблиц новой базы данных 27
Варианты создания таблиц 27
Формирование таблицы в режиме ввода 29
Ввод данных 29
4 Access 2000

Создание таблицы в режиме конструктора 31


Окно конструктора таблиц 31
Типы данных и их свойства 32
Свойства полей 35
Установка значений свойств Input Mask и Format 35
Создание и использование полей подстановки 41
Подстановка в режиме конструктора таблиц 42
Подстановка в режиме таблицы 45
Организация связей между таблицами 46
Создание связей между таблицами 46
Вложенные таблицы данных 50
Мастер печати связей 52
Резюме 54

Глава IV
Создание форм новой базы д а н н ы х 55
Использование автоформы 56
Создание формы с помощью мастера форм 58
Работа в режиме конструктора 64
Заголовок формы 66
Командные кнопки 69
Начальная форма при открытии базы данных или приложения 75
Построение запросов для отбора нужных данных 75
Ввод и корректировка данных 79
Использование гиперссылок 82
Access и географические карты 82
Поиск карты 83
Установка гиперссылок в базе данных 84
Установка гиперссылки из карты в базу данных 86
Резюме 90

Глава V
Создание отчетов новой базы д а н н ы х 91
Использование функции автоотчета 92
Включение подчиненного отчета 92
Группировка записей 95
Содержание 5

Статическая копия отчета 99


Инструменты для работы с копией 100
Преимущества использования 100
Создание статической копии отчета 101
Резюме' 103

Глава V I
Создание страниц доступа к д а н н ы м 105
Свойства страниц доступа к данным 105

Страницы доступа к сгруппированным данным 107


Использование страниц доступа к данным 108
Страница доступа к данным: вводданных 108
Создание и открытие страницы доступа к данным 108
Создание страницы доступа к данным в режиме автостраницы 108
Создание страницы доступа к данным с помощью мастера страниц 109
Создание страницы доступа к данным в режиме конструктора 114
Открытие страницы доступа к данным в окне базы данных 1 17
Открытие страницы доступа к данным в Internet Explorer 1 18
Передача страницы доступа к данным по электронной почте 118
Экспорт страницы доступа к данным в существующую базу данных 119
Список полей 1 19
Сводная таблица 119
Создание сводной таблицы для страницы доступа к данным 120
Резюме 121

Глава V I I
Конвертирование баз д а н н ы х
из других программных сред 123
Процесс конвертирования баз данных 124

Импорт базы данных БД ЧЭС 126


Первый этап: импорт данных из среды Clarion в dBase 126
Второй этап: импорт данных из dBase в Access 2000 127
Импорт файлов 128
Импорт базы данных Контроль ЧС 135
Первый этап: импорт данных из FoxPro в Access 97 136
Второй этап: импорт данных из Access 97 в Access 2000 139
Резюме 140
6 Access 2000

Глава V I I I
Общие вопросы программирования в Access .... 141
С р а в н и т е л ь н а я х а р а к т е р и с т и к а языков
п р о г р а м м и р о в а н и я в Access 141
Язык SQL 141
Макросы 142
Процедуры VBA 143
В ы б о р языка п р о г р а м м и р о в а н и я 144

Резюме 145

Глава IX
Программирование на я з ы к е SQL 146
Типы запросов 146
Запросы на выборку 148
Простые запросы 148
Представление запроса на языке SQL 151
Запросы с использованием групповых операций 153
Запросы с дополнительными условиями 156
Запросы с параметрами 165
Запросы с участием нескольких связанных таблиц 167
Пояснения к инструкции SQL 169
Создание объединенной выборки 173
Пример сложного запроса 1 74
Запрос на создание таблицы 174
Запрос на добавление записей в таблицу 1 76
Запрос на удаление записей 179

Удаление дублирующихся записей 181


Запрос на поиск повторяющихся записей 181
Удаление повторяющихся записей 183
Ввод нового поля 185
Запрос на обновление записей 186
И снова - запрос на добавление 187
Перекрестный запрос 190
Построение перекрестного запроса с использованием мастера 191
Ввод условий отбора записей в конструкторе запросов 195
Содержание '

Работа со средой Access 2000 без ее инсталляции 197

Резюме 202

Глава X
Программирование
с использованием макросов 205
Функции макросов 205
Использование макросов для обработки событий 206
Понятие события 206
Последовательности событий 207
Автоматический перевод фокуса при помощи макроса 213
Использование макроса при выполнении сложного запроса 215

Резюме 217

Глава X I
Программирование
с помощью процедур V B A 219
Основные положения VBA 219
Ьазовые термины 220
Окно модуля 221
Основные элементы 223
Переменные 223
Константы 223
Аргументы 224
Типы процедур и их элементы 226
Процедуры Sub 226
Функции 227
Элементы процедур 227
Просмотр объектов 228
Управление выполнением программы 230
Программирование приложений с помощью VBA 23-1
Предупреждение дублирования записей при их вводе из формы ... 232
Обработка ошибок выполнения 234
Функция создаваемой программы 237
Логическая конструкция If...Then...Else 238
8 Access 2000

Проверка завершенной процедуры 239


Установка на последнюю запись при открытии формы 243
Удаление записи с установкой на последнюю запись 246
Резюме 250

Глава XII
Д р у г и е возможности Access 2 0 0 0 251
Установка Access 2000 251
Условное форматирование 255
Пример условного форматирования 255
Буфер обмена 258
Новое содержание 259
Новые возможности для работы 259
Автоисправление имен 260
Функции автоисправления имен 260
Ограничения на использование функции 260
Использование функции 261
Разделение базы данных 262
Сжатие базы данных при ее закрытии 263
Конвертирование базы данных 264
Конвертирование из Access 97 (95) в Access 2000 264
Конвертирование из Access 2000 в Access 97 (95) 265
Резюме 266

Алфавитный указатель 268


Введение
Автоматизированные банки данных уже давно стали неотъемлемой частью прак­
тически всех компьютерных систем управления на любом уровне - от отрасли до
отдельного предприятия.
Однако проектирование и создание баз данных (БД) до сих пор остается, за
редким исключением, не технической задачей, а творческим процессом, который
скорее сродни искусству, нежели науке. Это утверждение может показаться не­
сколько странным: ведь разработка и исследование баз данных ведутся более 30
лет. Однако, как нам кажется, такой парадокс вполне объясним. За прошедшие годы
неизмеримо вырос уровень потребительских качеств систем управления базами
данных (СУБД): разнообразие поддерживаемых функций, удобный для пользо­
вателя интерфейс, сопряжение с программными продуктами - в частности, с дру­
гими СУБД, возможности для работы в сети и т.д.
Но изменения почти не коснулись того, что раньше называлось логическими
структурами баз данных. Это формы, в которых пользователь представляет и хра­
нит свою информацию в БД. А ведь именно от них в немалой степени зависит
удобство работы пользователя с базой данных: формулировка запроса, простота
поиска данных, форма выдачи итоговой информации и другие операции. В совре­
менных БД могут использоваться более или менее удачные структуры, но почти
никогда мы не найдем обоснованного ответа на вопрос, почему для конкретной
базы данных была выбрана именно такая форма.
Однако к настоящему времени накоплен значительный опыт проектирования
банков данных, предназначенных для управления производством. Это позволяет
сделать процесс создания БД значительно более формализованным. (Правда, поле
для субъективных решений, а значит, и для индивидуального творчества, все рав­
но остается, но его можно существенно сузить.)
Итак, речь идет об информации, которая формируется и накапливается в ком­
пьютерных банках данных. В условиях реальной производственной деятельности
это понятие употребляется в двух различных значениях:
а информация, прежде хранившаяся на бумажных носителях и внесенная
в новый банк данных, который создавался на основе какой-либо СУБД.
Сюда же следует отнести и сведения, связанные с текущим производствен­
ным процессом. Они вводятся в банк данных в реальном масштабе времени;
• банк данных, который был создан ранее и используется до сих пор.
Постепенно разница между двумя названными типами данных стирается. С одной
стороны, неизбежно появляется новая информация, которую надо структурировать
10 Введение

и организовать в банке данных, и создаются новые СУБД, более удобные, чем


прежние. С другой стороны, ранее накопленные сведения продолжают храниться
в банке данных, который наверняка никто никогда не будет перестраивать. Обыч­
но самое простое решение проблемы - конвертировать старые данные в новую
СУБД, объединяя информационные массивы и решая возникающие при этом
проблемы. В результате возникает новый банк данных, куда входят разные БД 1 .
Все они имеют один формат данных (например, для Access это mdb), но сохраня­
ют прежнюю структуру первичных файлов, таблиц и т.д. Иными словами, данные
остаются в значительной мере разнородными, что осложняет дальнейшую работу
с ними.
Поэтому после конвертации или интеграции разнородных баз данных в еди­
ную программную среду пользователю потребуется дополнительное (иногда спе­
циальное) программное обеспечение, чтобы обслуживать полученную БД.
До сих пор в специальной литературе рассматривалась только одна сторона за­
дачи - создание новых баз данных. О том, как конвертировать собранную инфор­
мацию в программную среду новой СУБД, написано значительно меньше. Нако­
нец, мало внимания уделялось другой важной проблеме: какой должна быть
единая программная среда и почему.
Книга, которую вы держите в руках, призвана в какой-то степени ответить на
перечисленные вопросы. Этим обусловлена и ее структура:
• в главе 1 проблемы, анализируемые в книге, подробно рассматриваются на
конкретных примерах. Кроме того, в данной главе объясняется, почему для
решения стоящих перед пользователем проблем необходима именно про­
граммная среда Access 2000;
• глава 2 посвящена методическим аспектам вопроса - разработке такой струк­
туры данных, которая не будет зависеть от программной среды;
• в главах 3-6 говорится о создании базы данных в программной среде Access
2000. Поскольку эта среда содержит элементы, которых не было в предыду­
щих версиях Access, приводятся необходимые пояснения;
• в главе 7 изучаются вопросы, связанные с конвертированием баз данных из
других СУБД в Access 2000;
• в главах 8-11 рассматривается программирование в объединенном банке дан­
ных и его различные варианты: программирование на языках SQL и Visual
Basic, а также с использованием макросов;
• глава 12 содержит информацию о тех дополнениях, которые были внесены
в Access 2000, но не применялись при работе с описанными в книге базами
данных.

1
В современной научной литературе понятия «база данных» и «банк данных» часто смешиваются. Тра­
диционно эти термины определялись следующим образом. База данных понималась как набор свя­
занных таблиц, запросов, форм, отчетов, макросов и модулей. Так, в среде Access база данных пред­
ставляет собой единый файл с расширением mdb. Банк данных рассматривался как совокупность
различных баз данных и программ по их обслуживанию. Однако, если база данных включает такие
объекты, как форма, отчет, запрос, модуль и др., то в нее входят также программы создания и обслу­
живания объектов. Тогда под банком данных следует, видимо, понимать множество баз данных в еди­
ном формате (скажем, в том же mdb), и набор программ, позволяющих работать с этими данными.
Глава I
Постановка проблемы
• Режимы функционирования банка данных
в производственных условиях
• Пользовательские запросы к банку данных
Сегодня никого нельзя удивить понятием «компьютерный автоматизированный
банк данных». Это так же обычно, как передача сообщений по факсу или заказ
билетов по телефону. Существует бесчисленное множество функционирующих
банков данных, однако далеко не все они удобны в эксплуатации. Пользователю,
работающему с банком данных, необходимо «умение» последнего быстро, гиб­
ко и в требуемой форме организовать и выдать информацию в ответ на любой
запрос.
В этой книге подробно рассказывается обо всех проблемах, с которыми может
встретиться разработчик баз и банков данных: начиная с логической структури­
зации и заканчивая написанием сложных макрокоманд. Особое внимание уделе­
но вопросам интеграции разнородных баз данных в единый эффективно функци­
онирующий информационный банк. Все решения показаны на примере реальной
базы данных по чрезвычайным ситуациям, о содержимом и структуре которой
рассказано в начале главы 2.

Режимы функционирования банка данных


в производственных условиях
Как правило, предусматриваются следующие режимы функционирования банка
данных:
• режим начальной загрузки, в котором исходная информация, содержащая­
ся в банке данных, вводится в соответствующие структуры БД;
• режим корректировки, в котором осуществляется обновление, добавление
и удаление информации, находящейся в банке данных;
10 Введение

и организовать в банке данных, и создаются новые СУБД, более удобные, чем


прежние. С другой стороны, ранее накопленные сведения продолжают храниться
в банке данных, который наверняка никто никогда не будет перестраивать. Обыч­
но самое простое решение проблемы - конвертировать старые данные в новую
СУБД, объединяя информационные массивы и решая возникающие при этом
проблемы. В результате возникает новый банк данных, куда входят разные БД 1 .
Все они имеют один формат данных (например, для Access это . mdb), но сохраня­
ют прежнюю структуру первичных файлов, таблиц и т.д. Иными словами, данные
остаются в значительной мере разнородными, что осложняет дальнейшую работу
с ними.
Поэтому после конвертации или интеграции разнородных баз данных в еди­
ную программную среду пользователю потребуется дополнительное (иногда спе­
циальное) программное обеспечение, чтобы обслуживать полученную БД.
До сих пор в специальной литературе рассматривалась только одна сторона за­
дачи - создание новых баз данных. О том, как конвертировать собранную инфор­
мацию в программную среду новой СУБД, написано значительно меньше. Нако­
нец, мало внимания уделялось другой важной проблеме: какой должна быть
единая программная среда и почему.
Книга, которую вы держите в руках, призвана в какой-то степени ответить на
перечисленные вопросы. Этим обусловлена и ее структура:
Q в главе 1 проблемы, анализируемые в книге, подробно рассматриваются на
конкретных примерах. Кроме того, в данной главе объясняется, почему для
решения стоящих перед пользователем проблем необходима именно про­
граммная среда Access 2000;
• глава 2 посвящена методическим аспектам вопроса - разработке такой струк­
туры данных, которая не будет зависеть от программной среды;
• в главах 3-6 говорится о создании базы данных в программной среде Access
2000. Поскольку эта среда содержит элементы, которых не было в предыду­
щих версиях Access, приводятся необходимые пояснения;
• в главе 7 изучаются вопросы, связанные с конвертированием баз данных из
других СУБД в Access 2000;
• в главах 8-11 рассматривается программирование в объединенном банке дан­
ных и его различные варианты: программирование на языках SQL и Visual
Basic, а также с использованием макросов;
• глава 12 содержит информацию о тех дополнениях, которые были внесены
в Access 2000, но не применялись при работе с описанными в книге базами
данных.

1
В современной научной литературе понятия «база данных» и «банк данных» часто смешинаются. Тра­
диционно эти термины определялись следующим образом. База данных понималась как набор свя­
занных таблиц, запросов, форм, отчетов, макросов и модулей. Так, в среде Access база данных пред­
ставляет собой единый файл с расширением mdb. Банк данных рассматривался как совокупность
различных баз данных и программ но их обслуживанию. Однако, если база данных включает такие
объекты, как форма, отчет, запрос, модуль и др., то в нее входят также программы создания и обслу­
живания объектов. Тогда под банком данных следует, видимо, понимать множество баз данных в еди­
ном формате (скажем, в том же mdb), и набор программ, позволяющих работать с этими данными.
Глава I
Постановка проблемы
• Режимы функционирования банка данных
в производственных условиях
• Пользовательские запросы к банку данных
Сегодня никого нельзя удивить понятием «компьютерный автоматизированный
банк данных». Это так же обычно, как передача сообщений по факсу или заказ
билетов по телефону. Существует бесчисленное множество функционирующих
банков данных, однако далеко не все они удобны в эксплуатации. Пользователю,
работающему с банком данных, необходимо «умение» последнего быстро, гиб­
ко и в требуемой форме организовать и выдать информацию в ответ на любой
запрос.
В этой книге подробно рассказывается обо всех проблемах, с которыми может
встретиться разработчик баз и банков данных: начиная с логической структури­
зации и заканчивая написанием сложных макрокоманд. Особое внимание уделе­
но вопросам интеграции разнородных баз данных в единый эффективно функци­
онирующий информационный банк. Все решения показаны на примере реальной
базы данных по чрезвычайным ситуациям, о содержимом и структуре которой
рассказано в начале главы 2.

Режимы функционирования банка данных


в производственных условиях
Как правило, предусматриваются следующие режимы функционирования банка
данных:
• режим начальной загрузки, в котором исходная информация, содержащая­
ся в банке данных, вводится в соответствующие структуры БД;
• режим корректировки, в котором осуществляется обновление, добавление
и удаление информации, находящейся в банке данных;
12 Постановка проблемы

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


изводится обработка запросов. Такие запросы могут предусматривать:
- только выдачу пользователю информации о тех или иных параметрах про­
цесса. Эта информация в требуемом формате содержится в банке данных;
- решение поставленной задачи с использованием сведений, находящихся
в банке данных;
О режим реорганизации и анализа, в котором выполняются операции, непо­
средственно связанные с поддержанием банка данных в рабочем состоянии;
- реорганизация структур БД;
- копирование и восстановление БД;
- анализ статистических данных, связанных с функционированием инфор­
мационного фонда.

Пользовательские запросы к банку данных


Из всех перечисленных выше для пользователя наиболее важен режим диалога,
а все остальные носят служебный, вспомогательный характер. Режим диалога по­
зволяет формировать самые различные запросы и является первым и необходи­
мым шагом к аналитической обработке информации.
Конечно, нельзя заранее предусмотреть все возможные варианты запросов.
Ниже перечислены лишь самые характерные типы запросов пользователя к бан­
ку данных в порядке возрастания сложности:
• запросы на обработку данных, связанных с одной таблицей (выборка, уда­
ление, корректировка и ввод данных);
О запросы на групповую обработку данных (сумма, среднее значение и т.д.),
связанных с одной таблицей;
• запросы, при которых условием отбора записи является полное значение
поля;
• запросы, при которых условием отбора записи является неполное значение
поля;
• запросы с несколькими условиями отбора записей в разных полях;
• запросы с несколькими условиями отбора записей в одном поле;
• запросы с заданием параметров;
Q запросы на создание объединенной выборки из нескольких разнородных
таблиц и т.д.
Как уже говорилось, наличие в банке разнородных баз данных несколько услож­
няет работу. Подробнее этот вопрос рассматривается ниже.

Проблемы, связанные с выбором СУБД


Говоря о создании банка данных и его последующей работе в производственном
режиме, надо определить, в какой программной среде он будет функционировать.
Вопрос этот не так прост, и при его решении надо учитывать два существенных
аспекта проблемы:
Пользовательские запросы к банку данных 13
а для упорядоченного накопления и хранения поступающей информации при­
ходится разрабатывать новые базы данных. Логично, что вы будете оцени­
вать различные СУБД именно с этой точки зрения. Здесь не требуется осо­
бых комментариев;
• история использования компьютерных банков данных в СССР и в постсо­
ветской России насчитывает около 30 лет, за которые сменилось несколько
поколений СУБД. Можно увлеченно спорить о том, насколько рациональ­
ным был этот процесс и какова эффективность той или иной конкретной
СУБД. Однако важнее другое - хороши или плохи были эти системы, но
в них аккумулировано значительное количество информации, которая ис­
пользуется в практических целях. Ясно, что с каждым годом объем таких
данных возрастает.
Системы управления непрерывно совершенствуются. Мировой опыт показы­
вает, что поколения СУБД сменяются примерно каждые 5 лет. Естественно, все
более актуальным становится вопрос конвертирования данных, то есть перевода
их в новую программную среду без потери информации. Решая, какую СУБД
выбрать, обязательно учитывайте ее возможности конвертирования; они не менее
ва.^ны, чем удобство разработки БД в данной программной среде.
Обоим названным условиям удовлетворяет СУБД Access. Правда, на сегодняш­
нем рынке много и других программных продуктов, успешно используемых в ка­
честве платформы для банка данных. Поэтому ниже сформулированы те крите­
рии, на основании которых следует выбирать СУБД, и оценки Access по этим
показателям:
• количество ключевых (дескрипторных) полей, поддерживаемых в СУБД.
В Access ограничения на эту величину отсутствуют;
• ограничение на длину поля.
В Access данное ограничение составляет 255 байт для текстовых полей и до
255 байт - для числовых, в зависимости от типа поля;
• разнообразие типов обрабатываемых полей.
В Access имеются поля, содержащие текстовый и числовой типы данных.
Эти типы, в свою очередь, представлены разными вариантами;
• дизайнерские возможности системы.
Наличие в Access Мастеров и Конструкторов позволяет достаточно быстро
создавать таблицы, формы, отчеты, запросы. Добавление диаграмм в формы
и отчеты, быстрая настройка программы и анализ ее быстродействия, ис­
пользование архивариуса, возможность импорта и экспорта файлов, работа
с гиперссылками и применение технологии OLE внутри пакета Microsoft
Office;
• требования к уровню подготовки проектировщика и пользователя БД.
Минимальные. Некоторые программные навыки нужны лишь в том случае,
если придется использовать Visual Basic;
• язык программирования, операционная среда, сетевые возможности, требу­
емые ресурсы.
Язык запросов SQL, Visual Basic, операционная система Windows 95/98 или
Windows NT. При полной установке потребуется 16 Мбайт оперативной
14 Постановка проблемы

памяти и около 120 Мбайт памяти на жестком диске. Система Access обла­
дает всеми современными сетевыми возможностями;
• язык представления данных, обработка символьной информации.
Имеются;
Q поддерживаемые структуры и форматы данных.
В Access поддерживаются реляционные структуры данных;
• простота освоения системы, наличие русской версии документации.
Первичное освоение займет всего несколько дней. Имеется русифицирован­
ная версия Access в составе пакета Microsoft Office; а также русифицирован­
ная документация для пользователей различных уровней подготовки;
• поддерживаемый системой математический аппарат.
В Access он достаточно развит и включает операторы, функции, логические
выражения и т.д.;
• поддерживаемые системой возможности обработки и представления графи­
ческой информации.
В Access поддерживаются операции с диаграммами. Поскольку эта СУБД
встроена в пакет Microsoft Office, то пользователь может работать и с други­
ми графическими объектами, входящими в состав данного пакета;
• возможности взаимодействия с другими пакетами прикладных программ
(текстовыми редакторами, электронными таблицами, геоинформационны­
ми системами (ГИС) и другими).
В рамках пакета Microsoft Office 97 можно работать с Word и Excel;
• возможности корректировки файлов, содержащих данные.
В Access это очень просто сделать;
• наличие русифицированной и достаточно подробной справочной системы,
а также файлов Help (Помощь).
Такая справочная система есть, и она доступна из любого режима в любой
момент;
Q разнообразие и гибкость формируемых запросов на предоставление данных.
Система Access отвечает этому условию.
Наверное, приведенные выше оценки не дают оснований утверждать, что Access -
идеальная СУБД. Однако безупречных СУБД вообще не существует. Например,
давайте сравним Access с такой системой, как Oracle. Последняя - СУБД гораздо
более высокого класса, значительно превосходящая Access по своим возможнос­
тям. Но такие преимущества имеют и оборотную сторону: Oracle громоздка, слож­
на в освоении и требует для своего функционирования специальных, особо мощных
технических средств. Область применения Oracle - создание гигантских центра­
лизованных информационных систем. По-видимому, время их массового исполь­
зования в России еще не наступило.
В то же время Access является весьма гибкой и универсальной системой, предъяв­
ляющей достаточно умеренные требования к техническому обеспечению. Поэто­
му на сегодняшнем этапе эта СУБД удобна для работы практически на всех иерар­
хических уровнях управления производством - от отрасли в целом до отдельного
предприятия.
Пользовательские запросы к банку данных 15

Вопросы, рассмотренные в настоящей книге


Приведенные выше оценки относятся к версии Access 97. В настоящее время на
рынке появилась новая версия этой СУБД - Access 2000, обладающая более ши­
рокими возможностями. Поэтому при изложении материала автор учитывал:
• наличие в версии Access 2000 новых элементов по сравнению с Access 97;
• особенности, обусловленные использованием разнородных баз данных.
В той или иной степени специфика обеих версий Access проявляется на всех
этапах работы: от создания первичных таблиц до формирования запросов и ис­
пользования элементов программирования. Можно было или сосредоточиться
лишь на том, чем отличаются друг от друга два варианта программы (тогда мате­
риал неизбежно был бы изложен отрывочно и непоследовательно), или рассмат­
ривать весь процесс создания и использования банка данных от начала и до конца
в каждой из версий, по ходу описания комментируя различия между ними. Хотя
во втором случае неизбежны повторы и в какой-то мере дублирование уже имею­
щейся литературы, для читателя такой вариант удобнее. Все необходимые сведе­
ния приводятся в одной книге, и пользователю не придется, забыв какую-то ме­
лочь, «буксовать» из-за этого в своей повседневной практике.
Чтобы пользователю было легче работать с этой книгой, материал изложен сле­
дующим образом.
Все методические рекомендации по структуризации показателей и проектиро­
ванию логических структур БД применимы к любой версии Access.
В книге описывается процесс создания новых баз данных в программной среде
Access 2000. Отличия этой версии от версии Access 97 специально оговариваются.
Что касается конвертирования БД, созданных в других программных средах,
то сначала речь пойдет о «переводе» в Access 97, а затем в Access 2000. Кроме того,
будут подробно рассмотрены те дополнительные возможности конвертации, ко­
торые появились в Access 2000 по сравнению с Access 97.

Резюме
1. Параллельно с разработкой баз данных в новых, современных СУБД се­
годня используется множество банков данных, построенных на основе
программного аппарата морально и технически устаревших СУБД. На­
копленная в них информация представляет большую ценность, но пере­
водить эти БД в новую программную среду никто никогда не будет. По­
этому очень важной становится проблема конвертации данных с тем,
чтобы они обрабатывались совместно с новыми СУБД в рамках единого
банка данных.
2. В качестве базовой СУБД для интеграции разнородных СУБД в такой банк
данных на сегодняшнем этапе предлагается Access 2000.
3. Целью настоящей книги является обсуждение методических и практических
вопросов, связанных с разработкой интегрированного банка данных.
Глава II
Предпроектная
структуризация
информации

• Состав информации
• Что понимать под структуризацией информации
• Проектирование логической структуры базы данных

Эффективность работы банка данных во многом зависит от того, как структу­


рирована накапливаемая в ней информация. В этом разделе как раз и говорится
обо всех проблемах, связанных с определением логической структуры данных.
В настоящей книге будут рассматриваться в основном примеры из определен­
ной предметной области - тематической сферы, к которой относится обрабаты­
ваемая информация. Речь пойдет о чрезвычайных ситуациях (ЧС), происходив­
ших в действительности; о работах, связанных с ликвидацией последствий ЧС
и, в частности, об используемых при этом контрольно-измерительных приборах.
Автор опирался на информацию, которая содержится в банках данных Министер­
ства Р Ф по делам гражданской обороны, чрезвычайных ситуаций и ликвидации
последствий стихийных бедствий (МЧС России), Госкомитета Р Ф по охране
окружающей среды (Госкомэкологии России) и Федерального агентства прави­
тельственной связи и информации (ФАПСИ). Создание объединенного банка
таких данных не завершено, и состав включаемых в него БД в дальнейшем будет
расширяться. Полученная информация используется преимущественно в анали­
тических целях: сбор статистических сведений, выявление тенденций, оценка по­
следствий ЧС, выработка рекомендаций по их предотвращению и т.д.
Состав информации 17

Состав информации
Наиболее динамичной частью информации, на примере которой рассказывается
о возможности Access 2000, являются данные о различных чрезвычайных ситуа­
циях. Прежде всего это:
• непосредственные сведения о ЧС (вид ЧС, дата и место происшествия, объект,
на котором произошла катастрофа);
• характеристика ЧС;
• количество пострадавших, в том числе погибших;
а предварительные оценки материального ущерба в стоимостном и натураль­
ном выражении;
• влияние ЧС на жизнедеятельность местного населения, на окружающую
среду и функционирование отраслей народного хозяйства;
• возможность или невозможность ликвидации последствий ЧС на месте,
ориентировочные сроки такой ликвидации;
Q типы и количество единиц оборудования, число специалистов, необходимых
для ликвидации последствий ЧС;
• характер и примерные объемы выполняемых работ.
Менее динамичная часть информации - данные о контрольно-измерительных
приборах, которые используются при ликвидации последствий ЧС.
Постоянная часть информации - словари понятий, встречающихся в книге.
Описываемый банк данных состоит из следующих разделов:
• база данных, разрабатываемая в среде СУБД Access 2000;
• база данных, разработанная ранее в среде Clarion 3.0;
• база данных, разработанная ранее в среде FoxPro 2.5.
Две последние БД конвертируются в Access 2000, и дальнейшая работа с ними
рассматривается именно в этой единой программной среде.
Отметим, что из-за разнообразия и неформализованное™ информации, кото­
рая относится к предметной области, такие сведения значительно труднее обра­
батывать, чем данные, связанные с большинством производственных процессов.
Примеры, подтверждающие это положение, будут приведены ниже.

Что понимать под структуризацией информации


Как правило, банк данных аккумулирует сведения, относящиеся к определенной
предметной области, то есть определенной совокупности объектов. Объектом мо­
жет быть что угодно: предмет, понятие, территория, процесс, явление, фраза, связ­
ный текстовый фрагмент и т.п. Любая информация, которая накапливается в банках
данных, так или иначе относится к одному из двух основных типов. По характеру
объектов, образующих предметную область, эти типы условно можно назвать так:
• фактографическая информация, то есть данные, которые описывают конк­
ретные факты. Такие сведения имеют количественное или логическое выра­
жение. В настоящей книге основное внимание будет уделено работе именно
с этим типом данных;
18 Предпроектная структуризация информации

• библиографическая информация, то есть данные, которые очень трудно, а по­


рой и невозможно строго классифицировать: художественная и юридичес­
кая литература, газетно-журнальные тексты и т.д
Итак, речь идет о предварительной структуризации информации - особом
этапе работы, который должен предшествовать проектированию базы данных.
Сама по себе эта идея далеко не нова. Еще в начале 70-х годов усилиями в пер­
вую очередь Е.Кодда и К.Дейта была разработана теория информационных от­
ношений и моделей данных, рассматривавшая, в частности, проблемы опти­
мальной структуры баз данных. Появление этих теоретических работ было
обусловлено двумя причинами. Во-первых, СУБД, которые тогда использова­
лись, были несовершенны. Во-вторых, существовали различные типы моделей
данных: иерархическая, сетевая, реляционная. Разработчикам приходилось не
просто обоснованно выбирать определенную модель данных, но и уметь рабо­
тать в рамках этой модели даже с несвойственными ей видами информацион­
ных отношений (например, в сетевой модели данных использовать иерархичес­
кие структуры).
Сегодня практически единственным типом моделей данных являются реляци­
онные модели. Современные СУБД имеют значительно больше возможностей для
реализации различных информационных отношений между элементами данных.
Видимо, поэтому иногда кажется, что проблема рационального представления ин­
формации в базе данных потеряла актуальность.
С точки зрения автора, это иллюзия. Вопрос о структуризации данных по-пре­
жнему важен, меняется лишь технология его решения. Ниже предлагается один
из возможных способов структуризации данных.

Показатели
Рассмотрим утверждение, которое, согласно нашей классификации, принадле­
жит к классу фактографической информации. Например, «объем капитальных
вложений равен 2,5 млн. руб.» или «стоимость «Мерседеса» больше, чем сто­
имость «Жигулей». Для этого класса данных под показателем понимается еди­
ница информации, которая включает ряд реквизитов -признаков и единственный
реквизит-основание. Каждый реквизит-признак является мельчайшей недели­
мой информационной единицей и отражает какой-либо атрибут (свойство)
объекта. Например, в энергетике такими реквизитами-признаками являются
мощности, электростанции, линии электропередач, организации, расход топли­
ва и т.д. Любой объект характеризуется перечнем свойств, которые выражаются
через реквизиты.
Реквизит состоит из имени и значения. Именем реквизита будет название ка­
кой-либо качественной (наименование, местонахождение) или количественной
характеристики объекта, явления, процесса (объем, размер и т.д.).
Значение реквизита представляет собой элемент данных, например: мощность
(реквизит) - 500 МВт (его значение), электростанция (реквизит) - Красноярская
ГЭС (значение), линия электропередач (реквизит) - Экибастуз-Центр (значе­
ние), расход топлива (реквизит) - 350 тонн (значение).
Что понимать под структуризацией информации 19

Совокупность реквизитов-признаков образует наименование показателя, а рек­


визит-основание представляет количественное или логическое значение пока­
зателя. Например, для приведенного выше показателя (мощность Красноярс­
кой ГЭС) реквизит-основание - 500 МВт. Очевидно, каждый реквизит-основание
описывается одной фразой. В данном случае эта фраза выглядит так. «уста­
новленная мощность Красноярской ГЭС в 1998 году равна 500 МВт». (Это не
значит, что вся база данных состоит из единственного предложения - такой
случай представляется исключительным упрощением!) В следующем разделе бу­
дет показано, что реквизиты-признаки, в свою очередь, делятся на ряд категорий.
В общем случае ни один из реквизитов-признаков не может считаться обя­
зательным. Характерной особенностью показателя является то, что он содер­
жит определенный минимум информации, достаточный для создания доку­
мента. Ни один из перечисленных выше реквизитов, взятый в отдельности, не
позволяет сформировать документ, а вот показатель может быть выдан в каче­
стве справки при ответе на какой-либо запрос - скажем, о мощности Красно­
ярской ГЭС. Верно и обратное - информационную совокупность любой слож­
ности (отчет и т.д.) можно представить как определенную группу различных
показателей.
Из сказанного ясно, зачем нужна предварительная структуризация информа­
ции пользователям, работающим с конкретной базой данных в конкретной пред­
метной области. Им необходима возможность формировать по единым правилам
разнообразные запросы п получать на них ответы. (Примеры таких запросов и от­
ветов будут приведены в главе 9.) Отсюда, между прочим, следует, что структури­
зация данных имеет свои разумные пределы. Разработчик банка данных, разбив
исходную информацию на ряд категорий-реквизитов, уверен, что дальше делить
данный реквизит не имеет смысла, потому что такие запросы пользователя мало­
вероятны. Можно и остановиться. Однако, если впоследствии пользователю дей­
ствительно потребуется задать специфический запрос, сделать это будет гораздо
сложнее. Подобные варианты тоже будут рассмотрены ниже. Поэтому искусство
разработчика состоит, в частности, в том, чтобы определить требуемую «золотую
середину».

Необходимость структуризации
В качестве примера в книге будет рассматриваться информация о фактически
происшедших ЧС. Эти сведения могут поступать в виде сообщений по различ­
ным информационным каналам:
• по телефону из соответствующих региональных структур (телефонограм­
мы). В этом случае информация «вручную» вводится в БД;
• по телефонному каналу связи, когда информация автоматически вводит­
ся в БД;
• по почте. Данные вводятся в БД «вручную».
Информация поступает в самой различной форме, например, в таком произволь­
ном виде (реальное сообщение): «На ж/д станции Ангасолка Восточно-Сибирской
20 Предпроектная структуризация информации

железной дороги (ВСЖД) в ночь с 23 на 24.03.99 г. допущен сход двух нефтена­


ливных цистерн по 60 тонн каждая, с разливом сырой нефти в одной из цистерн
от 30 до 40 тонн. Произошло самовоспламенение. Основная часть нефти разли­
лась на северной части балластной призмы в кювете с четной стороны, примыка­
ющей к горе, и в кармане водоотводной канавы объемом 3 х 4 х 3,5 м. Кроме того,
разлитая нефть выгорела на ж/д полотне площадью 230 х 9 м. На другой стороне
ж/д полотна (на откосе) площадью 30 х 50 м происходило сжигание нефти под
контролем пожарного надзора ВСЖД. Нефть застыла на снежном покрове двумя
рукавами длиной по 100 метров и шириной 0,5 до 1 метра. Дополнительно выяв­
лено еще два очага загрязнения площадью 5 х 2 и 5 х Юм. Привлечено к очистке
рельефа местности от нефти 70 человек. Выдано предписание о ликвидации заг­
рязнения с решением вопроса утилизации нефти. После проведения работ по за­
чистке загрязненной территории провести ее обследование комиссионно.»
(Имеется в виду, что обследование должно проводиться комиссией.)
Можно включать подобные сведения в БД в том виде, в каком они пришли.
Такое решение вполне приемлемо, но только на начальном этапе. Рано или поздно
поступившую информацию придется обрабатывать, а иметь дело с такими «сы­
рыми» данными довольно трудно.
Конечно, можно регламентировать форму входных сообщений так, чтобы со­
держащиеся в них сведения были структурированы. Этот способ используется
довольно широко, но он не гарантирует четкой формализации исходных данных.
Дело в том, что первичное заполнение стандартных бланков производят рядовые
сотрудники на местах, поэтому неизбежна значительная доля субъективизма. Это
приводит к необходимости централизованной структуризации показателей при
разработке и формировании банка данных.

Технология структуризации
Проведенные исследования показали, что обычно в обязательный минимум рек­
визитов-признаков входят следующие:
• П - процесс - основное наименование деятельности органа управления (опе­
рация, состояние). Это суть показателя (расход, остатки, поставка, капиталь­
ные вложения, мощность, ущерб и т.д.);
• Ф - формальная характеристика, то есть выраженный в наименовании спо­
соб расчета показателя (доля, темп роста, отклонение, сумма, прирост, сред­
нее и средневзвешенное значения и т.п.), который может быть как относи­
тельным, так и абсолютным и тесно связан с процессом (иногда задан в нем
неявно);
Q О - объект, предмет операции; то, над чем она производится (материалы,
изделия, полуфабрикаты, строительная продукция и т.д.);
• Е - единица измерения;
• С - субъект (тот, кто производит действия над объектом). Если, например,
объект (О) - продукция, а основное наименование деятельности (П) - про­
изводство, то в роли субъекта (С) может выступать, например, предприя­
тие, отрасль и т.д.;
Что понимать под структуризацией информации 21
• В - время (дата, период);
• Ф - функция управления (проектное, прогнозное или фактическое значе­
ние, норматив и т.п.).
Естественно, все многообразие реальных признаков не укладывается в приве­
денный краткий перечень. Поэтому каждый из названных реквизитов допуска­
ет практически неограниченное количество любых категорий-уточнений, кото­
рые должны удовлетворять единственному условию - они должны представлять
собой списки, состоящие из однородных терминов. Обычно уточняются следу­
ющие вопросы:
О где? - в этом случае список уточнений характеризует место действия;
• как? - список уточнений характеризует обстоятельства действия;
Q какой? - список уточнений характеризует свойство.
Сформированные таким образом списки при проектировании банка данных
рассматриваются как словари. По сути, цель структуризации - создание слова­
рей. При последующей разработке логической структуры БД они служат как бы
осями координат, в которых организуется, «раскладывается» реальная инфор­
мация.
Эти соображения, как уже говорилось, определяют ту границу, до которой име­
ет смысл проводить структуризацию. Если выясняется, что какие-то словосочета­
ния слишком индивидуальны, уникальны и не поддаются классификации, их не
следует включать в словари. В приведенном выше сообщении это формулировки
типа «на северной части балластной призмы в кювете с четной стороны, примыка­
ющей к горе, и в кармане водоотводной канавы»; «на другой стороне ж/д полотна
(на откосе)». Для таких данных надо использовать специальные поля примеча­
ний, прикрепленных к соответствующей конкретной записи.
При простой структуре исходной информации первый этап структуризации -
выделение основных реквизитов-признаков - можно пропустить и сразу формиро­
вать словари. Однако учтите, что о простоте или сложности структуры исходной
информации нельзя говорить вообще - это понятие имеет смысл только с одной
точки зрения: легко ли будет пользователю получать ответы на запросы к БД.
Поэтому прежде чем приступать к анализу первичной информации, подумайте:
кто будет работать с проектируемой базой данных, какие сведения понадобятся
пользователю и какими будут его запросы. В этом требовании нет ничего нового
- это одно из классических положений проектирования баз данных. Но уже на
начальных стадиях, при введении некоторой формализации в структуры данных,
вы убедитесь, насколько важно следовать этому правилу.

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


Рассмотрим практический пример. Вы занимаетесь структуризацией информа­
ции при проектировании базы данных по контрольно-измерительным приборам,
которые выпускаются различными фирмами. Это довольно простая БД, и каждая
запись в ней выглядит так:
«Прибор (название), с номером модели (номер), произведенный в (год) году
фирмой (название), которая находится в стране (название) по адресу (приводится
22 Предпроектная структуризация информации

адрес) и имеет филиал по адресу (приводится адрес), предназначенный для (це­


левое назначение), имеющий характеристики (перечень технических характерис­
тик), включенный в каталог под номером (номер в каталоге) и обслуживаемый
менеджером (данные о менеджере), имеет цену (приводится цена)». Конечно,
фраза громоздкая и не слишком гладкая. Поэтому ее стоит разбить на более прос­
тые фрагменты. Любой пользователь, заказчик или разработчик базы данных лег­
ко может внести в нее необходимые изменения. Ниже будет показано, как это де­
лается.
Итак, информация о приборах включает следующие пункты:
• О (объект) - название прибора;
• У (уточнение сведений об объекте) - номер модели. Если при анализе сооб­
щения возникает необходимость в нескольких уточнениях, то им можно
присвоить номера;
• У (уточнение сведений об объекте) - год выпуска прибора;
• У (уточнение сведений об объекте) - номер прибора по каталогу;
• У (уточнение сведений об объекте) - характеристика прибора, содержащая
данные о его функциях, портативности, технических особенностях, весе, точ­
ности, способе питания, диапазоне измерений, совместимости с другими
приборами;
• С (субъект) - название фирмы, производящей прибор;
• У (уточнение сведений о субъекте) - страна, в которой находится фирма;
• У (уточнение сведений о субъекте) - адрес фирмы;
• У (уточнение сведений о субъекте) - адрес филиала или дочерней фирмы;
если такая есть;
Q У (уточнение сведений о субъекте) - данные о менеджерах фирмы (фами­
лия, имя, отчество и адрес);
• Р (реквизит-основание) - цена прибора.
Предположим, пользователя в первую очередь интересует не только цена, но
и вес прибора. Этот параметр можно выделить из общего массива «характеристи­
ка» и придать ему статус еще одного реквизита-основания. Тогда приведенная
выше фраза-описание будет содержать две однородные фразы с параллельными
реквизитами-основаниями - цена и вес.
В рассмотренном примере структура информации достаточно проста, и нуж­
ные словари могут быть сформированы практически сразу, на первом этапе про­
ектирования. Создавая их и уточняя перечень основных реквизитов-признаков,
руководствуйтесь следующим критерием: часто ли у пользователя будет необхо­
димость запрашивать информацию по данному признаку. Если да, то имеет смысл
выделить его как отдельный реквизит и сформировать соответствующий словарь.
Такой признак называется ключевым значением, или дескриптором. В базе данных
ему лучше выделить отдельный файл или поле в файле; этим вы существенно об­
легчите работу будущему пользователю. Конечно, если какой-либо признак «спря­
тан» в общем тексте, по нему тоже можно сделать запрос, но сформировать после­
дний в этом случае сложнее.
Проектирование логической структуры базы данных 23

В нашем примере можно сразу выделить те признаки, по которым следует ожи­


дать частого обращения к базе данных:
• название прибора;
• название фирмы, производящей прибор;
• страна, в которой находится фирма;
• адрес фирмы;
• адрес филиала или дочерней фирмы;
• данные о менеджерах фирмы - фамилия, имя, отчество и адрес;
• номер модели;
• год выпуска прибора;
а номер прибора по каталогу;
• цена прибора;
• функциональное назначение прибора;
• вес прибора;
• категория прибора (переносной, портативный и т.п.);
• характеристика прибора.
Параметры, которые для пользователя второстепенны, остаются в общем тек­
сте раздела.
Возьмем пример посложнее, который представлен в разделе «Необходимость
структуризации». Здесь описание включает не одну, а несколько фраз, и анализ,
подобный предыдущему, надо провести отдельно для каждой из них. В результате
мы получим следующий набор признаков:
• П (показатели) - «выявлено», «выдано», «сжигание» и др.;
• Ol (объект) - источники загрязнения (нефтеналивные цистерны);
• 0 2 (объект) - загрязняющие вещества (нефть);
• ОЗ (объект) - объекты загрязнения (рельеф местности);
• 0 4 (объект) - документы (предписание о ликвидации последствий аварии);
• У1 (уточнение места действия 1) - железнодорожные станции (Ангасолка);
• У2 (уточнение места действия 2) - железные дороги (Восточно-Сибирская);
• УЗ (обстоятельство действия 1) - под контролем комиссии;
• П (примечания) - как уже говорилось, в этих полях должны содержаться
данные - уточнения, специфичные для конкретных сообщений.
Ясно, что по мере накопления новых сообщений будут появляться и новые рек­
визиты, а количество параметров, указанных в скобках, также будет расти.

Проектирование логической структуры


базы данных
Итак, мы определили состав дескрипторов, то есть ключевых полей для поиска,
по которым чаще всего (по нашему прогнозу) будут формироваться запросы к базе
Данных. Теперь начнем разработку логической структуры БД. Под логической
структурой понимается та совокупность файлов, содержащихся в них полей и свя­
зей между файлами, которую «видит» пользовательская программа, обрабатыва­
ющая базу данных.
24 Предпроектная структуризация информации

Распределение полей по файлам


В предыдущем разделе мы постарались объяснить, почему и как необходимо вы­
делять дескрипторные поля, по которым ожидаются запросы со стороны пользо­
вателя. Мы исходили из того, что каждому такому полю должен соответствовать
словарь. Если вы в этом еще сомневаетесь, вспомните, что между элементами
информации существуют различные типы отношений: <<один-к-одному», «один-
ко-многим», «многие-ко-многим». Очевидно, когда между какими-то элемента­
ми информации (полями) существует отношение «один-к-одному», они жестко
и однозначно взаимосвязаны. В таком случае достаточно иметь один словарь на
всю эту группу. Но тогда она должна находиться в одном файле, потому что иначе
отношение «один-к-одному» не будет реализовано без применения каких-либо до­
полнительных средств. Как видите, логика довольно проста. Теперь у нас есть кри­
терий для распределения полей по файлам: в одном файле следует размещать те
поля, которые связаны между собой отношением «один-к-одному». Файлы, объ­
единяющие такие группы полей, будут находиться друг с другом в отношении
«один-ко-многим» и составят иерархическую структуру. Отметим, что файлы,
находящиеся в отношениях типа «многие-ко-многим», не должны быть непосред­
ственно взаимосвязанными. Обобщим сказанное в табл. 2.1.

Таблица 2 1

Номер 1 2 3 4 5 6 7 8 9 10 11 12
Название прибора 1 X оо оо оо со со оо оо со

Название фирмы 2 1 X оо 1 1 1 со оо оо

Страна 3 оо 1 X 1 1 1 со со оо оо со оо

Адрес фирмы 4 1 1 оо X 1 1 оо оо оо

Адрес филиала 5 1 1 оо 1 X 1 со оо оо

Менеджер 6 сю оо оо оо со X 1 1 1

Номер модели 7 со оо оо со со оо X 1 ] 1

Год выпуска 8 со оо оо со оо оо X со 1 1

Номер по каталогу 9 оо оо оо со со оо X оо 1 1

Назначение 10 оо оо со оо оо со оо оо X оо оо

Категория 11 со оо со оо оо оо оо X оо

Характеристика 12 оо оо со оо оо оо оо оо X

В этой таблице символы °о и 1 обозначают соответственно стороны «многие»


и «один» в отношениях между реквизитами.

Файлы и связи между ними


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

выше, в отношении «один-к-одному». Таким образом, будут созданы следующие


файлы:
Q Страны (содержит поле Название страны);
• Приборы (содержит поля Номер модели, Категория, Год выпуска, Харак­
теристика, Номер по каталогу, Цена, Вес);
• Фирмы (содержит поля Название фирмы, Адрес фирмы, Адрес филиала);
• Менеджер (содержит поле Данные о менеджере);
• Назначение (содержит поле Назначение прибора);
• Типы приборов (содержит поле Название прибора).
Мы перечислили здесь основные - так сказать, «титульные» - поля, состав­
ляющие каркас конкретной таблицы. В нее могут также входить вспомогатель­
ные поля: Примечания, Адрес и др. Соединив эти файлы связями типа «один-
ко-многим», мы получим логическую структуру базы данных, как показано на
рис. 2.1. О практической реализации таких связей речь пойдет в конце следую­
щей главы.

В Microsoft Access
ffij
D G£ X © J- (3-
• Г Relationships |Р|х|Л

Примемзни
Примечание-1
Год по катоп

|
>п_Примеч.:
_Generahon
GUID
5
»!арактери1 TI
Цена1,$
т$>$тя%

>п_Примеч= ^
Generation —-•
GUID zl

Кодф>фны _^
Название фи| ьеп_Припечс
Код страны •ё
5_GeriPrahon
Адрес — 5_GUID zi
Адрес 2 •*•[

Код фирмы
Фамилия
Имя
Адрес

i
Ы
Рис 2 1
26 Предпроектная структуризация информации

Резюме
1. Безусловный прогресс, достигнутый в развитии программных средсл и
СУБД и расширении их функциональных возможностей, не устранил проб­
лему обоснованности выбора структур баз данных - от продуманности этих
структур во многом зависит эффективность работы с БД.
2. Основным элементом фактографической информации является показатель
Он, в свою очередь, состоит из множества реквизитов-признаков и един­
ственного реквизита-основания.
3. Для того чтобы формировать по единым правилам разнообразные пользова­
тельские запросы к БД и получать на них ответы, перед проектированием
конкретных баз данных необходимо провести структуризацию информации
4. В главе предлагается и иллюстрируется на конкретном примере технология
такой структуризации и - па се основе - последующего проектирования ло­
гической структуры БД.
Глава
Создание таблиц
новой базы д а н н ы х

• Варианты создания таблиц


• Формирование таблицы в режиме ввода
• Создание таблицы в режиме конструктора
G Создание и использование полей подстановки
• Организация связей между таблицами

Как уже было сказано в главе 2, разработка новой базы данных Контрольно-из­
мерительные приборы производится в программной среде Access 2000.
Формирование БД в Access состоит из ряда последовательных этапов, опи­
сываемых ниже. Первый этап этого процесса - создание таблиц. Таблицы в Ac­
cess являются теми первичными, исходными файлами, на основе которых
в дальнейшем строится все здание базы данных. Access 2000, как и предыдущие
версии, предоставляет пользователю несколько разных вариантов построения
таблиц.
Порядок создания всех таблиц одинаков и не зависит от их названия и кон­
кретного содержания. Мы рассмотрим этот процесс на примере таблицы Страны.

Варианты создания таблиц


Формирование таблицы начинается с того, что вы открываете окно базы данных
н
в нем выбираете пункт Tables (Таблицы) раздела Objects (Объекты), как пока­
зано на рис. 3.1.
28 Создание таблиц новой базы данных

Н Microsofl Access мз
File Edii" View Insert Tools Window hHp

d b 5 : Database

Щореп ^Design ДМе>

E j Create table by using wizard


®J Create table by entering data
П Name AutoCorrtrrt Log
•П Менеджер
•П Назначение
• Г"| Приборы, представленные на рынке2
• Г") Страны
•П Типы приборов
•П Фирмы

Рис 3 /

Обычно дальше следует щелкнуть по кнопке jtjew | на панели окна БД. В дна
логовом окне New Table (Новая таблица), показанном на рис. 3.2, представлены
все возможные способы создания таблицы:
• Datasheet View (Режим таблицы);
• Design View (Режим конструктора);
О Table Wizard (Мастер таблиц);
Q Import Table (Импорт таблиц);
Q Link Table (Связь с таблицами)

New Table

Design View
Table Wizard
Import Table
Link Table
Create a new table in
Datasheet view

OK Cancel

Рис 3 2
формирование таблицы в режиме ввода 29
Последние два варианта создания таблиц - импорт таблиц и связь с таблица-
.„ _ рассматриваются в том разделе главы 7, который посвящен объединению
разнородных баз данных.

формирование таблицы в режиме ввода


Войти в этот режим можно двумя способами: либо выберите пункт Datasheet
View (Режим ввода) в окне New Table (см. рис. 3.2) и щелкните по кнопке ОК,
in6o выберите опцию Create a table by entering data (Создать таблицу путем вво­
да данных) в окне базы данных (см. рис 3 1). В результате на экране появится
таблица, готовая к вводу информации (см рис. 3.3).

Ы Miciotoil Access Щ]
•* •* £j

FIIP Edit View Insert Format Record:. Tools Window Help

• Table! : Table
FlQldl Flold2 Fleld3 Flold4 FloldS
• HFi* 3

Record: j < | *-\ [ 1 • I • ' ! • * ! of 21

nr
Рис 3 3

Ввод данных
Чтобы осуществить ввод данных, сначала надо заменить имеющиеся заголовки
столбцов на новые названия, а затем уже ввести сведения в поля таблицы. Рас­
смотрим эту операцию на примере создания таблицы Страны.
Заменим имена полей Field 1 и Field2 на Код и Страна. Для этого дважды щелк­
ните мышью в ячейке с именем соответствующего поля, а затем введите нужные
значения. Записав первые данные (см. рис. 3.4), попробуйте выйти из созданной
таблицы (кнопка _J*J B правом верхнем углу). Сначала Access 2000 спросит вас,
На
До ли сохранять произведенные в таблице изменения (если вы не хотите этого
30 Создание таблиц новой базы данных

1 В Microsoft Access - [Та... В 1 Э ЕЭ1

J ы -1 в J а ?
( ; П File Edit View Insert Format
№ Records Tools Window Help -|i9|
! x)
Код страны |Страна| |,
1 Россия
2 США
3 Германия
*J
Record: l< | < | | >!•'!•<

Рис 3 4

делать, она вообще сотрется из памяти). Затем вам будет предложено назвать таб­
лицу (или согласиться с предлагаемым именем, которое автоматически присвоит
ей система). Не отличаясь большой фантазией, Access 2000 все таблицы называет
именем Table с добавлением текущего номера.

Первичный код
Когда все это будет сделано, вы получите предупреждение: There is no primary key
defined (Первичный код не определен), как показано на рис. 3.5.

Microsoft Access

There is no primary key defined.

Although a primary key isn't required, it's highly recommended A table must have a
primary key for you to define a relationship between this table and other tables in the
database.
Do you want to create a primary l.ey now'

Yes No Cancel

Рис. 3 5

В предупреждении сообщается: «Хотя первичный код не является обязатель­


ным, настоятельно рекомендуется его создать. Он нужен для того, чтобы устано­
вить связи между данной таблицей и другими таблицами в базе данных». После
такого разъяснения вам задается вопрос - Do you want to create a primary key now?
(He хотите ли вы создать первичный код прямо сейчас?). Если вы отказываетесь
это сделать и отвечаете No (Нет), Access 2000 запомнит таблицу в том виде, в каком
она показана на рис. 3.4. Однако вопрос о первичном коде все равно возникнет на
следующем этапе работы: когда вы будете формировать связи между файлами,
и уж тогда без кода система не справится с этой задачей. Если вы поддались на уго­
воры и сразу согласились создать первичный код, выбрав ответ Yes (Да), то про­
грамма сама сделает это. В результате таблица будет выглядеть так, как показа­
но на рис. 3.6.
Создоние таблицы в режиме конструктора 31

Ш Microsoft Access 1ЁШ


File Edit View Insert Fotrncit Records Tools Window
Help

ТаЫеЗ: Table
ID Код Страна М
1 1 Россия
ссия В

(AutoNurnber)
2
3
2 США
3 Германия
рмания
I

Record: к I < 2 МИ • * ] of 3

Рис 3.6

Если вы выберете пункт Cancel (Отмена), таблица вновь примет тот вид, кото­
рый показан на рис. 3.4. Однако это - промежуточное состояние, из которого все
равно надо как-то выходить. Внимательно посмотрите на первичные коды, создан­
ные системой в поле ID. Здесь они ничем не отличаются от кодов, созданных
пользователем в поле Код. Но в общем случае коды, введенные в это поле, совсем
не обязаны быть такими же упорядоченными, как коды поля ID - таблица, пока­
занная на рис. 3.6, как уже говорилось, представляет собой словарь, и коды могут
периодически изменяться. Поэтому для надежного контроля за файлами в Access
предусмотрен механизм системных первичных кодов. Иногда (как, например, сей­
час) они и вводятся только по желанию пользователя. В других случаях при от­
сутствии этих кодов ряд функций Access 2000 выполняться не будет.
Поэтому, если у пользователя нет каких-то серьезных причин отказываться от
введения первичных кодов, желательно их все-таки создать.
Отметим, что в словарном файле совсем не обязательно ограничиваться тем
минимумом полей, которые показаны в нашем примере. Это было сделано в чисто
методических целях. На практике количество полей в файле вообще не ограничи­
вается, следует лишь соблюдать единственное требование: поля должны находить­
ся в отношениях «один-к-одному».

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


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

Окно конструктора таблиц


оити в этот режим можно двумя способами. Первый: выберите пункт Design
lew (Режим конструктора) в окне New Table (Новая таблица), как показано на
Р1,с 3.2, и затем щелкните по кнопке ОК. Другой вариант: выберите пункт Create
32 Создание таблиц новой базы данных

a table in Design View (Создать таблицу в режиме конструктора) в окне базы дан­
ных (см рис. 3 1) На экране появится окно конструктора таблиц (см. рис.3.7). Оно
содержит три раздела'
G Field name (Имя поля) - обязательный раздел;
• Data type (Тип данных) - условно обязательный раздел;
• Description (Описание) -необязательный раздел

В Microsoft Access ш
• -J_H • ч - ' © * 9 w-S = * §» Й?
File Edit Vie<4 Insert Tools Wmdo"' Help

Table2: Table _ П X
Field Name Data T> pe Description

Field Properties
zl
General Lookup

Рис 3 7

В разделе Field Name (Имя поля) следует указать имена полей - те самые, ко­
торые в предыдущем разделе вводились в заголовки столбцов таблицы. Ситуация
с первичным кодом совершенно аналогична.
Чтобы начать работу с разделом Data type (Тип данных), надо щелкнуть мы­
шью в его пределах. Как только это произойдет, в его правой части возникнет
стрелка прокрутки. Щелкните по ней, и появится список типов данных, которЫ1'
поддерживаются в Access 2000 (см. рис. 3.8). Характеристика типов данных при­
водится в следующем разделе этой главы.
Сведения о типах данных, полей и их свойствах являются в Access 2000 базовы
ми и непосредственно используются при создании таблицы в режиме конструктора
Типы данных и их свойства
Типы данных, поддерживаемые системой Access 2000 (см. их перечень на рис. 3 8)
приведены ниже вместе со своими основными характеристиками:
Создание таблицы в режиме конструктора 33

Ш Microsoft A c c e s s

I File Edit View Insert Tools Window Help

Т а Ы е З : Table
ШЕ
Field Name Data Type I Description I -.

Text
Me-mo
Number
zi
Field
ui renc't
General Lookip AutoNumber
\ es/No
OLE Object
H perlmk
Loolup Wizard

Рис 3 8

• Text (Текстовый) - символьные данные или сочетание символьных и циф­


ровых данных. К этому типу относятся также цифровые данные, которые не
требуют вычислений над ними (например, номер телефона). Длина поля по
умолчанию составляет 255 символов, но можно задать меньший размер.
Место для невведенных данных в пределах объявленного размера не резер­
вируется;
• Memo (Мемо-поля) - текстовые данные либо сочетание текстовых и циф­
ровых данных, имеющих большой объем. Длина поля - до 65 535 символов;
• Number (Числовой) - числовые данные, используемые в математических опе­
рациях. Длина поля может составлять 1, 2, 4 бита, 8 и даже 16 байт (в по­
следнем случае в свойстве Fieldsize (Размер поля) нужно выбрать опцию
Replication (Репликация) 1 );
• Date/Time (Дата/Время) - формат данных о дате и времени для периода
с 100 до 9999 года. Длина поля - 8 байт;
• Currency (Денежный) - значения денежных единиц и числовые данные, ис­
пользуемые в математических операциях. Эти данные должны иметь фик­
сированное число знаков до и после запятой. Длина поля - 8 байт;
О AutoNumber (Автоматическая нумерация) - уникальная последователь­
ность чисел, начинающаяся с единицы, или случайная последовательность,
которую создает Access 2000 при добавлении новой записи в таблицу. Эта
последовательность представляет собой первичный код, который очень ва­
жен в Access 2000, он не может корректироваться пользователем и доступен

икация ~ копирование базы данных сразу на несколько компьютеров Если установлен режим
ликации, то после обновления информации в двух или нескольких копиях можно синхронно вне-
эти
изменения во все остальные базы данных
2
~ 119
34 Создание таблиц новой базы данных

только системе. Если вы удалите какую-либо запись, то будет удалено н .,,.


ответствующее значение первичного кода. Длина поля для данных эьц.,
типа составляет 4 бита (или 16 байт, если в свойстве Fieldsize устаиов.i, M
режим Replication);
• Yes/No (Да/Нет) - логический тип данных. Поле может принимать лишь
одно из двух значений: Да или Нет. Длина поля - 1 бит;
• OLE Object1 - обменный тип данных для хранения таких объектов, как т.и1
лицы Microsoft Excel, документы Microsoft Word, графические и звуковые
файлы, другие двоичные данные, включенные в таблицы Access 2000 и щ
связанные с ними;
Q Hyperlink (Гиперссылки) - текстовые данные или сочетания текстовых и циф­
ровых данных, которые используются в качестве адресов гиперссылок. Ад­
рес гиперссылки может состоять из трех частей:
- отображаемый текст - текст, который появляется па экране;
- адрес - путь к файлу или странице доступа к данным;
- субадрес - положение данных внутри файла или на странице.
Длина каждой из этих частей поля гиперссылки не превышает 2048 символик.
• Lookup Wizard (Выбор данных) - тип данных, позволяющих создать поля
для выбора значений из другой таблицы или списка. Щелкнув по пункп'
Lookup Wizard, вы запускаете мастер преобразования поля. Когда он закон­
чит работу, Access 2000 запомнит выбранное значение. Обычно длина этого
поля составляет 4 бита.
Как видите, типы данных очень разнообразны. Прежде чем вы начнете опреде­
лять и вводить их, обязательно ответьте себе на ряд вопросов:
• какие данные вы хотите ввести в конкретное поле. Например, нельзя сохра­
нить текстовую информацию в поле с числовым типом данных;
• какая длина поля вам необходима для сохранения данных и работы с ними;
Q какие операции будут производиться с данными в этом поле. Например,
Access 2000 позволяет суммировать данные в числовом и денежном форма­
тах, но не делает этого в текстовом или в формате OLE Object;
• собираетесь ли вы сортировать или индексировать данные. Имейте в виду,
что в формате OLE Object нельзя делать ни того, ни другого;
• будете ли вы применять групповые записи в формах или запросах. Поля
формата OLE Object нельзя использовать для группировки записей;
• как вы собираетесь сортировать данные в поле. В текстовом поле числа рас­
сматриваются как строки символов (1, 10, 100, 2, 20, 200 и т.д.), поэтому
многие форматы дат могут сортироваться неправильно; для них следует ис­
пользовать формат Date/Time (Дата/Время), а не цифровые значения. Что­
бы сортировать числа как цифровые значения, необходимо применять чис­
ловой или денежный форматы.
1
Object Linking and Embedding (Связывание и внедрение объектов) - спецификация фирмы Micro­
soft, устанавливающая правила взаимодействия приложений, которые участвуют в подготовке и ре­
дактировании составных документов. OLE предусматривает два механизма передачи и использова­
ния объектов в составном документе: связывание и внедрение.
Создание таблицы в режиме конструктора 35

Свойства полей
п \ccess 2000 предусмотрены два свойства полей: Format (Формат) и Input Mask
Мпска ввода). Обе опции позволяют задавать формат, в котором данные вводят­
ся в таблицу.
Свойство Format (Формат) рекомендуется применять при последовательном
• оде данных в таблицу. Например, если для поля типа Date/Time вы установили
наченне свойства Format равным Medium date (Средний формат времени), то все
значения дат при их последовательном вводе будут иметь следующий вид: 12-Jan-
96 (12-Янв-96). Если пользователь будет вводить в базу данных значения дат в лю-
(j0M другом формате (скажем, в виде 01/12/96), при запоминании записи Access
7000 все равно преобразует ее в формат Medium date.
Свойство Format проявляется лишь при отображении значения, но не при его
запоминании. Пока введенные данные не появились на экране, невозможно про­
верить, в каком формате они были введены. Предположим, вы непременно хотите
отобразить данные именно в том формате, в котором они вводились. Тогда вам не
следует применять свойство Format. В заключение отметим, что оно использует­
ся в полях числового и денежного типа, Date/Time, AutoNumber и Yes/No (Да/
Нет). Свойство Format не определено для полей текстового типа, полей Memo
и шперссылок, хотя в принципе такая настройка возможна.
Свойство Input Mask (Маска ввода) целесообразно при отображении литераль­
ных (символьных) констант, а также при вводе данных в пустые графы (бланки,
таблицы и т.д.) - например, если все номера телефонов в списке имеют один фор­
мат. Использование маски ввода обеспечит сохранение информации в определен­
ном формате. Таким образом, вы всегда сможете установить, в каком виде будут
вводиться данные в каждый документ. Предположим, надо, чтобы все вводимые
данные о кодах и телефонах городов области содержали одинаковое количество
знаков. Перед вводом предварительно задайте свойство Input Mask, и в каж­
дый документ (таблицу) будет помещено необходимое число символов.
Если вы зададите одновременно оба свойства, произойдет следующее: Access бу­
дет применять Input Mask при добавлении или редактировании данных, a Format -
при отображении сохраненной записи.

Установка значений свойств Input Mask и Format


lenepb давайте рассмотрим установку значений свойств Input Mask (Маска вво­
да) и Format (Формат) на конкретном примере. Откроем таблицу Страны в ре­
жиме конструктора.

Свойство Input Mask


тооы задать свойство Input Mask в поле Код страны, выберите соответствую­
щую строку, как показано на рис. 3.9.
Ьсли щелкнуть в ее пределах, то в нее можно вводить значения вручную. Если же
е
-чкнуть по кнопке _^J, запустится Input Mask Wizard (Мастер маски ввода).
^начале установим маску ввода вручную. Введем значение 0L>L в строку Input
ask
(см. р И С 3.10). Начиная со следующей вводимой записи и до тех пор, пока
2'
36 Создоние таблиц новой базы данны.

Н Microsoft Access шш
\П - | @ * 4a 6* йг
File Edit View Insert Tools Window Help

Table2: Table
I Data Type [
ME
Field Name Oescnphon
ID AutuNumber
Код страны Text
Страна Text

zl
Geneial
Field Size
Lookup |
50
Щ
Form at .^^ш
Input Mask Ш
Caption ^ H
Default Value ^ H
Validation Rule ЩЩ
Validation Text
Required V es
Allow Zero Length Ho
Indexed ^1
Unicode Compression

Рис 3 9

маска ввода не будет снова изменена, коды стран будут задаваться в том виде, ко­
торый показан на рис. 3.11. Это происходит в соответствии с правилами настрой­
ки форматов, приведенными выше (раздел «Свойства полей»). (Мы не обсужда­
ем сейчас вопрос о смысле такой установки, а просто рассматриваем возможности
маски ввода.)
Правда, при переходе из режима конструктора в режим просмотра таблицы (см.
соответственно рис. 3.10 и 3.11) Access 2000 предупреждает о возможных опасно­
стях. Сообщение, показанное на рис. 3.12, гласит: Data integrity rules have been
changed; existing data may not be valid for the new rules. This process may take a long
time. Do you want the existing data to be tested with the new rules? (Условия целос­
тности данных изменены, существующие данные могут противоречить новым ус­
ловиям. Процесс может быть длительным. Хотите ли вы проверить существую­
щие данные в новых условиях?)
Вряд ли у вас есть основания отказываться от подобной проверки, поэтому са­
мым правильным решением будет ответ Yes.
Если вы захотите воспользоваться помощью мастера маски ввода и щелкнете по
кнопке ^ J , то система предложит вам запомнить форму: Must save table first. Save
now? (Сначала надо сохранить форму. Сохранить ее сейчас?). После этого появш -
ся окно мастера (см. рис. 3.13).
Открывшееся окно предлагает вам выбрать Input Mask (Маску ввода) в соотвс i
ствии с заданным свойством Data Look (Формат данных). Чтобы проверить рабо i > •
Создание таблицы в режиме конструктора 37

В Microsoft Access ПШШ


|• -J У . L4 v
I File Edit View Inset t Ipols Vfemdow Help

Tablel : Table HnR


Description I -
Field Name Data Type
9 ID AutoNumt'F
• Код страны
Text

jj
Field Propei ties

General j Looljjp
Field Size 50
Foi ri iat
Input Mask 01 >L
Caption
Detault Value 1 "™J
Validation Rule
Validation Text
Required Yes
Allow Zero Length No
Indexed ves (No Duplicates)
Unicode Compression Ves
»«*;»*» • г , - з . -

Рис. 3.10

1 В Miciosoft Access H B В I

^ - У # El ^ * l^i lr ' -o >„>


File Edit Vie'" Insert Format Records Tools
^mdovo Help

• Tablel : Table ШЩ
ID | Код страны | Страна
1 1 Россия
2 2 США
3 3 Германия
12 7 г J Индия
13 5кЕ Пакистан
• (AutoNumber) _ | _
Record и | < || 6 • | м | > Ч of 6
i j 1 •!

Рис. 31 1

^ Ыски ввода, введите данные в поле Try It (Проверка). Значения свойства Input
as
k подробно рассматривались выше. Здесь мы еще раз кратко перечислим их:
J
General Date (Общий формат даты);
Q
Long Date (Длинный формат даты);
38 Создание таблиц новой базы данных

Microsoft A c c e s s

Data i n t e g r i t y rules h a v e b e e n changed; existing d a t a m a y not be valid for


t h e new rules.
]\ —
This process may take a long time. Do you want the existing data to be tested with the
new rules?

Mo Cancel

Рис 3 12

Input M a s k W i z a r d

Which input mask matches how you want data to look?

To see n o v a selected mask worts, use the Tt / It box.

To change the Input Mask list, click the Edit List button.

Input Mask: Data Look.


Password
Short Time о is:,:.: —
Medium Time 0.13333
Long Time 03 12 00
Short Date 09/27/1069
Medium t'ate 27-сен-6<* •d
Try It: I

Edit List Cancel Next : Finish

Рис 3.13

Q Medium Date (Средний формат даты);


• Short Date (Короткий формат даты);
• Long Time (Длинный формат времени);
Q Medium Time (Средний формат времени);
• Short Time (Короткий формат времени).
Чтобы изменить маску ввода, щелкните по кнопке Edit List (Изменить спи­
сок). Теперь выберите в открывшемся поле какую-либо позицию, например Me­
dium Time (Средний формат времени), как показано на рис. 3.13. Затем щелк­
ните по кнопке Next (Следующий) и откройте следующее окно мастера масок
(см. рис. 3.14).
В этом окне вы также можете изменить шаблон. Сначала Access 2000 любезно
поинтересуется: Do you want to change the input mask? (Желаете ли вы изменить
маску ввода?). Если вы соглашаетесь, шаблон формата можно изменить в поле
Input Mask, которое в этом случае активизируется. Далее в том же окне мастера
масок вы можете изменить вид Placeholders (меток). Эти метки заполняют пробе­
лы между значащими символами. Выбор нужной метки из списка Производится
/- о3да ние таблицы в режиме конструктора 39
1 Input Mask Wizaid

Which input masl- matched how you want data to took'

To see how a selected mask works, use the Try It bo-..

To change the Input Mask list, click the Edit List Ь и й с л у ц


l i t
Input Mask' Data Look- |Я§
Password ******* •*•

Short Tin i t 0 13333


Medium Time 0.13333 M
Long Time 03.12.00
Short Date 09/27/1969
Medium Date 27-сен-69 d
Т. It |

- __
Edit List | Cancel | Next > Finish

Рис 3 14

в поле Place-holder character (Вид метки) с помощью стрелки прокрутки. Выбран­


ные вами метки вводятся автоматически по мере ввода символов. Использовав все
возможности коррекции масок, которыми располагает мастер, вы получите не ме­
нее разнообразные и экзотические маски, чем те, что пользователь создает вручную.
Проверить, как введены данные, можно, указав их в поле проверки Try It и за­
тем ще н<нув по кнопке Enter. Далее, если не последует возражений со стороны
мастера, щелкните по кнопке Next. В следующем окне (см. рис. 3.15) мастер масок

Input Mask Wizaid

How do you want to store the data1

(~ With the 5, nibols in the mask, like this:

1059

(* Without the symbols in the mask, like this'

2384

Cancel < Back Finish

Рис. 3 15
40 Создание таблиц новой базы данных

спросит How do you want to store the data? (Как вы хотите сохранить данные?}
Выбор у вас следующий либо сохранять данные вместе с возможными вспомога­
тельными символами (они указываются во второй части маски, но являются нео­
бязательными), либо без них
Когда вы дадите тот или иной ответ, можно щелкнуть по кнопке Finish (Гото­
во), и маска сформирована Если на этой стадии работы вы выберете опцию Next

Н Miciosofl A c c e s s
Ш\
! FIIP Edit Vjew In'ert Fyirrat Pei.rrd-. T o d ' V_rdu
Hdp


| • Tablel : Table
ID | Код страны |
•СШЕ Страна
1 1 Россия
2 2 США "
33 Германия
19 3456 Франция
20 3678 Италия
• (AutoNumber)
ч
Рис 3 16

И Microsoft A c c e s s InTxl
ч v §«=§» »
Fil<- Ed f" 'ue* Irv^rt Tools Windo/- Help

Tablel : Table ГЛпГ


Field Name Ыа Type De<oipti j n
1С A jtoNumber
^ г д страны Text
•IСтрана

H Field Properties
ZJ

r
Field DIZP 0
Forn at
Input Г Ь 1
Caption
Default Value
Validation PUIP
Validation Text
Requii ed Yes
Alio Zpro Length II]
Indexed •i es (Mo Duplicates)
Unicode Compression Ye;

Рис 3 17
Создание и использование полей подстановки 41

Ш Microsoft Access шш
Н* Edt View Insert F k mJr Ppn_r:k Tr._l<; _r&v-.
Hrlp

Table! : Table Щ]
ID | Код страны | Страна
• (l 1 РОССИЯ
22 США
33 ГЕРМАНИЯ
19 3456 ФРАНЦИЯ
20 ЗБ7с ИТАЛИЯ
* (AutoNutnLeil
Record и И II 1 • I •' ! • * ! of 5

Рис 3 18

т^ "начала появится еще одно окно В нем мастер масок с удовлетворением сооб­
щит вам, что теперь у него есть все необходимое для создания маски
В нашем примере сформированная мастером маска будет работать с момента ее
установки и до следующей корректировки Все это время Access 2000 будет до-
п\екать ввод только тех записей, у которых код страны имеет 4 разряда На рис
3 16 показаны новые записи, введенные согласно заданным условиям
Сравнивая два способа формирования маски ввода (вручную и с помощью
мастера масок), мы пришли к заключению, что первый путь значительно проще,
и поэтому именно он рекомендован пользователю

Свойство Format
В отличие от установки маски ввода, свойство Format (Формат) задается только
вручную, мастер отсутствует (возможно, это и к лучшему) Введем значение свой
ства Format в текстовое поле Страна (см рис 3 17) Для этого в позицию Format
поместим знак >, который обозначает перевод текстовых символов в верхний ре­
гистр
Если теперь мы включим режим просмотра таблицы, которая была показана на
рис 3 16, то увидим что все строки в поле Страна заполнены прописными буква­
ми! (см рис 3 18) Кстати, это еще одно отличие свойства Format от Input Mask
его установки влияют на все содержимое поля, независимо от времени его (содер­
жимого) ввода

Создание и использование полей подстановки


Г)

Нелом ряде случаев поле может включать лишь определенные значения, которые
огда содержатся в заранее заданном списке, а иногда - в самом поле, вместе
Роизвольно вводимыми данными Так или иначе, часто возникают ситуации,
42 Создоние таблиц новой базы данных

когда ввод данных можно упростить и ускорить за счет использования подстано­


вок - ввода понятий, уже содержащихся в определенных полях, например элемен­
тов списков. В качестве таких списков могут служить таблица, запрос в этой же
или другой базе данных или список, созданный пользователем для многократно­
го применения.
Рассмотрим создание подстановки на следующем примере. В сформированную
перед этим таблицу (см. рис. 3.18) надо ввести новое поле Фирмы. Оно должно
заполняться за счет подстановки значений из таблицы Фирмы, которая содержит­
ся в той же базе данных.
Для создания подстановок используется мастер подстановок. Запустить его можно
• в режиме конструктора таблиц;
• в режиме таблицы.

Подстановка в режиме конструктора таблиц


Чтобы запустить мастер подстановок в режиме конструктора таблиц, сначала войди­
те в него. Затем щелкните по стрелке прокрутки в поле, которое вы хотите запол­
нить одним из значений (в нашем случае это поле Фирмы). В появившемся спис­
ке типов данных выберите Lookup Wizard (Мастер подстановок), как показано
на рис. 3.19.

Ш Microsoft Accets
ШШ
.п - о Я %-}

I File Edit View Insert Took- Window Help

Table2: Table
[Цпш
ID
Код страны
Страна
Field Name Data T/pe
AutoIJumber
Text
Text
| Description

3
Фирмы Text
Text
Memo
Number l\

Ш
hel<
Date/Time
Currency
General | Lookup |
AutoNumber
Field Size 50 Yes/No
Format OLE Object
Input Mask Hyperlink
Caption
Default Value
Validation Rule
Validation Text
Required No
Allow Zero Length No
Indexed Mo
Unicode Compiession Yes

Рис 3 19
Созда ние и использование полей подстановки 43

В результате на экране возникнет первое окно мастера подстановок (см. рис. 3.20).
тер создает столбец подстановок, то есть список значении, из которых надо
1брать подходящее. В этом окне пользователь должен указать, что нужно выве-
а „ на .экран:
• I want the lookup column to look up the values in a table or query (Список
значений из таблицы или запроса);
• I will type in the values that I want (Список, который пользователь сам бу­
дет заполнять по своему усмотрению).

LookuD Wizard
This wizard creates a lookup column, which displays a list of values
you can choose from How do you want your lookup column to get
~Л its values?

<•" I want the lookup column to look up the values in a table с


query.
С I will type in the values that I want

Cancel Next :

Рис 3 20

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


переключатель, а затем щелкает по кнопке Next.
Если был выбран первый вариант, мастер подстановок открывает следующее
Диалоговое окно (см. рис. 3.21). Здесь пользователь определяет таблицу и/или
запрос, значениями из которых он будет заполнять поле подстановки. Например,
ча рис. 3.21 показано, что эти значения выбираются из таблицы Фирмы. Теперь
снова надо щелкнуть по кнопке Next. Если вы передумали и хотите что-либо ис­
править в предыдущем окне, вернитесь к нему с помощью кнопки Back (Назад)
•пи вообще отмените все предыдущие действия, щелкнув по кнопке Cancel (От­
менить).
о следующем окне мастер спрашивает вас: Which fields contain the values you
a
nt included in your lookup column? The fields you select become columns in
- °ur lookup column (Какие поля содержат значения, которые вы хотите вклю-
"Ть в столбец подстановки? Выбранные вами поля образуют этот столбец). Опре-
л
нв объект-источник подстановки, на очередном этапе работы (см. рис. 3.22) вы
л
*ны указать те поля в этом объекте, из которых будут выбираться конкретные
"Учения. Сначала пометьте их в левом поле с помощью кнопки > I (для каждого
44 Создание таблиц новой базы данных

Lookup Wizard
Which table or query should provide the values for > our lookup
column?

Пате AutoCorrect Log


Table 11
Менеджер
Назначение
Приборы, представленные на рынке2
Страны
Типы приборое
ЕГиЯИ
View

'•' Tables Г Ouet к С E,urh

Cancel < Вас* Next >

Рис. 3.21

Lookup Wizard
Which fields contain the values you want included in your lookup
column? The fields you select become columns in your lool up
column,

"3
Available Fields Selected Fields

| К о д фирмы

Код страны

Cancel <Back Next >

Рис. 3.22

значения по отдельности) или » | (для всех сразу). Затем перенесите их в пра­


вое поле.
Теперь повторите те же операции с кнопками, что и в предыдущем окне. Если
вы выбрали Next, то в следующем окне мастера подстановок (см. рис. 3.23) к ва­
шим услугам появится столбец. В нем содержится перечень значений, из которые
следует выбрать нужное (в нашем случае это названия фирм). В окне есть опци я
Гозд° н и е и
использование полей подстановки 45

Lookup Wizard
Ном wide vrauld you lil.fi the columns in ) our li юкир column'

To adjust the width of a column, drag its right edge to the width уэи i"anf, 01 double-click the
tight edge of the column heading to get the best fit.

Г7 Hide key column (recommended)

Название фирмы J
Alltech
НефтьТаз-Наука
НПП "ЭКОНИКС"
5 1 r i US Systems
J
_ КОХЕЛП ИНСТРУМЕНТС
Sarlin Automation -
AMEL In_.tr un мпГ"
d
-~3S—
Cancel < Back Next ;- Finish

Рис 3 23

Hide key column (recommended) - Коды фирм скрыты (рекомендуется). Мы соглас­


ны с разработчиками Access 2000 и также советуем поставить в этом поле флажок.
Если вас не устраивает ширина столбца и вы хотите ее изменить, мастер подста­
новок любезно предусмотрел такую возможность: How wide would you like the
columns in your lookup column? (Какая ширина столбца подстановки вас устро-
iir?). Далее мастер рекомендует: То adjust the width of a column, drag its right edge
to the width you want, or double click the right edge of the column heading to get
the best fit (Чтобы изменить ширину столбца, надо либо передвинуть мышью его
правую границу, установив желаемую ширину столбца, либо дважды щелкнуть
правой кнопкой мыши по заголовку столбца и задать его размер).
Теперь щелкните по кнопке Finish, и процесс будет завершен. На экране воз­
никнет таблица (см. рис 3.24), где следует нажать стрелку прокрутки. В результа­
те в поле Фирмы появится столбец значений, в котором можно выбрать нужную
строку Если же щелкнуть не по кнопке Finish, а выбрать Next, то в конечном сче­
те вы выйдете к той же таблице, но через две промежуточных стадии (на рисунках
они не представлены). На первом этапе следует назвать таблицу или согласиться
<• предлагаемым именем (мы уже знаем, что это всегда Table с каким-либо номе­
ром). На втором этапе Access 2000 поинтересуется, хотите ли вы перед выводом
"л экран итоговой таблицы (см. рис. 3.24) запомнить исходную (см. рис. 3.19).

Подстановка в режиме таблицы


начала откройте в режиме просмотра таблицу, в которой надо создать поле под-
тановки. Для этого в окне базы данных либо воспользуйтесь кнопкой Open (От-
РЫть), либо дважды щелкните по имени нужной таблицы. Если выбрать таблицу

^, то в качестве исходной откроется та же таблица, что и для подстановки
46 Создание таблиц новой базы данных

1Ы Microsoft Access •^В^^НН1М-1п1х|

II • Table2 : Table • H H H H . I n l x l d
ID | Код страны Страна | Фирмы
11 РОССИЯ
22 США -
'1
33 ГЕРМАНИЯ Фирма не указана .1
4 3456 ФРАНЦИЯ YSI incorporated —
5 3678 ИТАЛИЯ Wilks Enterprise, Inc
IK- (AutoNumber) FCI Environmental •
Randox Laboratories, Ltd
ОАО "Цвет"
Cole-Parmer International
Milton Roy Company

^_^ d
Рис 3 24

в режиме конструктора (см. рис. 3.18). Затем в меню Insert (Вставка) окна базы дан­
ных следует отметить пункт Lookup Column (Столбец подстановок). В результате на
экране появится уже знакомое нам первое диалоговое окно мастера подстановок (сч
рис. 3.20). После этого дальнейшие операции выполняются так же, как и в преды t> -
щем разделе. Все этапы данного процесса продемонстрированы на рис. 3.20-3.24

Организация связей между таблицами


Первичные, исходные таблицы в Access представляют собой «плоские», двумер­
ные файлы - обычные таблицы. Конечно, они не позволяют формировать иерар­
хические информационные структуры; для данной цели используется аппарат
связей между таблицами. Access 2000 дает возможность организовывать и отобра­
жать эти связи двумя способами:
• создание непосредственных связей между таблицами;
• создание вложенных таблиц данных.
Кроме того, и в Access 2000, и в Access 97 существует довольно мощный аппа­
рат гиперссылок, который применим также для формирования таблиц и форм
Мы обсудим возможности использования гнперссылок на примере работы с гео­
графическими картами в главе 4.

Создание связей между таблицами


Когда между двумя таблицами устанавливается связь, это означает, что величины
из одной таблицы ставятся в соответствие величинам из другой таблицы.
Организация связей между таблицами 47

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


>|)е1 началом работы их следует закрыть. Теперь перейдите в окно базы данных
/ рiic. 3.1). Такой переход осуществляется двумя способами Первый варн-
,т в режиме просмотра любой формы щелкните по кнопке Database Window
Юкяо базы данных) ©I на панели базы данных. Другой способ: находясь в любом
.налоговом окне Access 2000, воспользуйтесь функциональной клавишей F11.
^атем щелкните по кнопке Relationships (Связи) ngj на панели инструментов.
Гели в базе данных еще не определено никаких связей, на экран будет автомати­
чески выведено окно Show Table (Добавить таблицу) (см. рис. 3.25). Если же не­
обходимо добавить таблицы, но связи еще не определены и упомянутого окна нет
на экране, щелкните по кнопке Show Table (Добавить таблицу) <=•] (см. рис. 2.1)
на панели инструментов.

Show Table из
Tables Queries Both
Add

Close
Нз начете
Приборы, представленные на рынке2
Страны
Типы приборов
Фирмы

Рис 3 25

Итак, вы последовательно добавляли все таблицы, то есть помечали их в окне


и затем щелкали по клавише Add (Добавить). Теперь закройте окно Show Table
с помощью кнопки Close (Закрыть). В результате появится диалоговое окно
Relationships (Связи), представленное на рис. 3.26. Теперь в этом окне вы долж­
ны организовать связи между таблицами. Связи устанавливаются через отдель­
ные, определяемые пользователем поля. Для связывания этих полей надо выбрать
поле в одной таблице и перетащить его, наложив на соответствующее поле в дру­
гой таблице.
Ооычно связывают ключевое поле родительской таблицы {внешний ключ) с со­
ответствующим ему полем в другой, дочерней таблице. Оно часто имеет то же имя,
По
и первое, но в общем случае это не обязательно. Зато строго обязательными
явд
яются следующие условия:
^ в одной или в обеих таблицах должно быть поле, принимающее уникальные
(не имеющее дублей) значения во всех записях;
48 Создание таблиц новой базы данных

• связываемые поля должны иметь одинаковые типы данных. Однако из это­


го правила есть два исключения:
- поле счетчика разрешается связывать с числовым полем, если в последнем
в свойстве FieldSize (Размер поля) задано значение Long Integer (Длин­
ное целое);
- поле счетчика разрешается связывать с числовым полем, если для обоцч
полей в свойстве FieldSize (Размер поля) задано значение Replication ID
(Код репликации);
• связываемые поля числового типа должны иметь одинаковые значения
свойства FieldSize.

Ы Microsoft Access ШЕ1


«г,, D-0 -rS $~ -
Л па огн | v ^ гри
D& Я 6* • п
52! А Ю
Relationships

Менеджер Назначение Приборы , ...


Номер 'Зеп_Примеч= Ll. Gen_XapafTef_lj
Код фирмы 5 Generation с. Generation —1
Фамилия s GUIO s GUID
Имя ;_Lmeage 5_Lmeage
Адрес Код sd Кед zl

Фирмы
Кодф>ф№1 .1
Названиефпр
Страны
Код страны
Адрес s_Generation
Адрес 2 jj GUID
Line age
Код _iJ

kl
РИС 3.26

Для начала свяжите поле Код в таблице Страны с полем Код страны в таблица
Фирмы. Для этого надо щелкнуть левой кнопкой мыши по одному из связыва­
емых полей) и, не отпуская ее, перетащить мышь на другое поле. На экране по­
является (см. рис. 3.27) диалоговое окно Edit Relationships (Редактирование
связей).
В левой части этого окна указано связываемое поле родительской таблицы.
а в правой - связываемое поле дочерней таблицы. Если надо изменить одно из
этих полей, то можно щелкнуть в нем по стрелке прокрутки, а затем выбрать же­
лаемое значение. Установив флажок Enforce Referential Integrity (Обеспечение
целостности данных), вы зададите условие: ни в одной из связанных таблиц нс
49
Орган изация связей между таблицами
Edit Relationships 1Ш
Tablc/Ouerv. Related Table/Query.
create
1 J" J
Код j j Код страны ji|
]om Type
J Create New
(7 Enforce Referential IntegnC/

| 7 Cascade Update Related Fields

Г Cascade Defere p e l t e d P eujrds

Relationship Tvpe- One To Many

Рис 3.27

будет записей, у которых нет соответствующих «партнеров» в другой таблице.


Еще два флажка определяют режимы обновления и удаления полей:
• Cascade Update Related Fields (Каскадное обновление связанных полей) -
устанавливает, что значения поля Код страны в таблице Фирмы изменяют­
ся в соответствии с изменениями значений поля Код в таблице Страны.
Этот флажок имеет смысл установить;
• Cascade Delete Related Records (Каскадное удаление связанных полей) -
устанавливает, что если из первой таблицы будут удалены названия каких-либо
стран, то удалятся и соответствующие фирмы во BI орой таблице. В рассматри­
ваемой ситуации этот флажок вряд ли следует ус ыпавливать - ведь, во-пер­
вых, фирма может иметь дочернее отделение с тем же именем в другой стране;
во-вторых, если приборы, выпускаемые этой фирмой, в базе данных остаются,
то они в случае каскадного удаления могут оказаться «беспризорными».
Заслуживает внимания клавиша Join Type (Тип объединения). Щелкнув по
ней, вы откроете список возможных критериев для отбора тех записей, которые
°УДут связываться. Вот имеющиеся варианты:
3 связь распространяется только на те записи, в которых значения обеих таб­
лиц совпадают;
3 связь распространяется на все записи из таблицы Страны и только на те
поля таблицы Фирмы, в которых значения, содержащиеся в объединяемых
полях, совпадают;
3 связь распространяется на все записи из таблицы Фирмы и только на те
поля таблицы Страны, в которых значения объединяемых полей совпадают.
Для нашего примера выберем первый, самый простой вариант. Вообще стоит
Метить, что обычно подобные решения зависят от конкретной ситуации.
Итак, в поле Relationship Type (Тип связи) следует указать, какого типа отно-
т*-ния Устанавливаются между таблицами. В данном случае это отношение Опе-
°-Мапу (Один-ко-многим).
е
"ерь щелкните по кнопке Create (Создать). В окне Relationships появится
""я связи между таблицами Страны и Фирмы, как показано на рис. 3.28.
50 Создание таблиц новой базы данных

Рис. 3 28

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

Вложенные таблицы данных


В Access 2000 возможен и другой вариант введения и отображения связей мел ;у
таблицами, отсутствующий в предыдущих версиях - использование вложенных
таблиц данных. Иерархичность структуры баз данных в этом случае проявляется
особенно наглядно.
Вложенными бывают не только таблицы; в них могут включаться связанш^
или объединенные данные, находящиеся и в таблицах, и в формах, и в запрос <i\.
поэтому вложенными бывают также и формы, и запросы. В этом разделе мы
расскажем именно о вложенных таблицах, а использование механизма для ф<>рм
и запросов отложим до той поры, пока не дойдем до соответствующих разделов
Чтобы создать вложенную таблицу, как обычно, сначала войдите в окно 6л|Ы
данных и откройте таблицу Страны в режиме Datasheet view (Просмотр табШ'
цы). Она будет выглядеть так, как показано на рис. 3.29.
Не обращайте пока внимания на несколько полусвернутых полей - это по.:я.
связанные с репликацией. Откройте меню Insert (Вставка) на панели инструмен­
тов в окне базы данных, затем активизируйте опцию Subdatasheet (Вложение
таблица). В ответ Access 2000 откроет окно Insert Subdatasheet (Вставка вложсН'
ной таблицы), показанное на рис. 3.30. Выберите таблицу, которую требуется ш iл'
вить в таблицу Страны (как и в предыдущем примере, это будет таблица Фирм1'1'
Орган изация связей между таблицей 51

В Microsoft Access ШЫ
W, • •л °S*i]-
U И'^Ъ
I • Страны : Table |.|D|X|
Код |Gen_rif|5_Gone|s_GUl|s_Lll| Страна | При 119ЧЭНИЯ
• ]Л 1 1 1С32} data Страна не фазана
02 1 1 1С32} data United Kingdom
03 1 1 1С32} data USA
04 1 1 1C32} data Германия
05 1 1 1C32) data Италия
06 1 1 1C32} data Россия
07 1 1 1C32} data США
08 1 1 1C32} data Финляндия
09 1 1 1C32} data Франция
10 1 1 1C32} data Швейцария
+ \lurnber) dumber) irnber)

Record н | . |f 1 . | .i | . . | of 10 <I J _d
<l I '

Рис 3 29

Теперь в окне Link Child Fields (Связанные дочерние поля) щелкните по стрелке
прокрутки и из появившегося списка выберите в качестве внешнего ключа поле
Код страны. В поле Link Master Fields (Связанные первичные поля) первичным
мючом пусть будет поле Код.
После этого снова откройте таблицу Страны. В обновленном виде она показана
на рис. 3.31. На первый взгляд эта таблица идентична предыдущей, приведенной
на рис. 3.29. Однако обратите внимание на значки (+), стоящие возле каждого
кода фирмы. Эти значки указывают на то, что здесь в свернутом виде содержится
информация. Если щелкнуть по такому значку, соответствующая строка раскро­
йся, и вы увидите перечень фирм, относящихся к этой стране, в данном случае
США (см. рис. 3.32).
Иначе говоря, на рис. 3.32 продемонстрирована иерархическая двухуровневая
структура Страны и Фирмы. Теперь для таблицы второго уровня - Фирмы - про­
ведем такую же процедуру с окном Insert Subdatasheet (Вставка вложенной табли-
ш
) (см. рис. 3.30). В качестве родительской таблицы примем Фирмы, а в качестве
' ЧеР11ей - таблицу Менеджер. Связанными полями в обеих таблицах (Link Child
e|
ds и Link Master Fields) определим Код фирмы. Тогда таблица Фирмы, в свою
Р<?дь, будет содержать свернутую информацию о менеджерах, что также показа-
а
Рис. 3.32. Если, аналогично предыдущему, вы раскроете затем эту свертку, то
' Дите уже трехуровневую иерархическую структуру Страны и Фирмы и Менед-
й Унс' 3-33). Таким способом в принципе можно создать иерархическое дере-
ю
°ои сложности, и единственным ограничением здесь будет только удобство
рнятия - когда много таблиц, в структуре трудно разобраться.
52 Создание таблиц новой базы данных

Insert Subdatasheet [Ш
I Tables Queries Both

Cancel
Менеджер
Назначение
Приборы, представ лунные на ptiHi e2
Страны
|Типы приборов

[Link Child Fields Код страны n


{Link Master Fields
ш "3
Рис 3 30

Ы Microsoft Access EMx]


DO • =s-^- м
М- К Si ^rtH
• Страны: Table H H H H H J n M ^ l
|Gen_np|s_Gene|s_GUl|s_Lli| Код | Страна | Примечания
• t1 1 1C
32} data 01 Страна не указана
1 1 1C32} data 02 United Kingdom
1 1 1C32} data 03 USA
1 1 1C32} data 04 Германия
1 1 1C32} data 05 Италия
1 1 1C32} data 06 Россия
1 1 1C32} data 07 США
1 1 1C32} data 08 Финляндия
1 1 1C32} data 09 Франция
1 1 1C32} data 10 Швейцария
Number) dumber) imber)
,.г)
Рис 3 31

Аналогично, если воспользоваться стрелками прокрутки в указателях связан


ных полей (см. рис 3 30) и ввести не одно, а больше полей, можно показать И'1
любом уровне не одну, а, соответственно, больше таблиц

Мастер печати связей


В предыдущих версиях Access невозможно распечатать схемы связей между ч- '
лицами, что довольно неудобно. В Access 2000 такая опция предусмотрена
Орга низация связей между таблицами 53
—\'A xl
цЕВЗ Л1
ней? А чэ р -' > E.-S-
»

Стра =
ri np|s_Gene|s_GUl|s_Lli| Код | Страна | Примечания
f-
1
1 1 1С22} data 01 Ст|.мна НР yta" ана

т
1
1
| Код фмриы
1 1С32} data 02
1 1C32} data 03
Название фп
United kingdom
ИГЛ
Адрес | Адрес 2 | Пр ииечания |
i
* ij2 YSI mcoiporate Yelluw Spring
* П7 Cole-Parmer Int 7425 North Oal<
* 11 Alltecti 2051 Waukegai

1 1 1C52} data 04 Германия


1 1 1052} data 05 Италия
+ 1 1 1C32} data ОС Россия ^J
r
mm — — т — i — —

Рис 3 32

H Microsoft Access ГЛ5ТЗП


D E? У vc« •Л ' (3.
Ei 5> Si ©-a
Страны: Table ]D|X
|r,en_np|s_Gene|s_GUl|s_Lli| Код Страна Примечания |
1 1C32} data 01 Страна не указана
1 1C32} data 02 United Kingdom
1 1C32} data 03 USA
Код фириы | Название фи| Адрес Адрес 2 | Примечания
YSI mcoiporate i ellu* Spring
Cole Parmer Int 7425 North Oak
Номер Фамилия Имя Ад рве
2 Д * пне Джеймс
0 Флеминг Билл
0
Alltech 2051 Waukegai

J 1C32} data 04 Германия


1 1C32} data 05 Италия
1 1C32} data 06 Россия _
1 1C32) data 07 США
1 1C32} data OS Финляндия
1 1C32} data 09 Франция
1 1C321 data 10 Шенйцарзия
Ji»| of 3
______^_____

Рис 3 33
54 Создание таблиц новой базы данных

Чтобы напечатать схему связей, необходимо:


1. Открыть соответствующую базу данных.
2. Открыть подменю Tools в строке меню этой базы данных. Выберите пункт
Relationships, чтобы открыть одноименное диалоговое окно.
3. Открыть меню File, а в нем активизировать опцию Print Relationships (Пе­
чать связей).

Резюме
1. Формирование таблиц является первым этапом создания БД, так как табли­
цы в Access - это те первичные, исходные файлы, на основе которых в даль­
нейшем строится вся база данных. Access 2000 и предыдущие версии предо­
ставляют пользователю несколько разных вариантов построения таблиц.
2. В настоящей главе рассматривались три варианта формирования таблиц:
режим таблицы или режим ввода данных, режим конструктора и мастер таб­
лиц. Еще два варианта создания таблиц - импорт таблиц и связь с таблица­
ми - рассматриваются в том разделе главы 7, который посвящен объедине­
нию разнородных баз данных.
3. Наиболее детальным и основательным (и, соответственно, наиболее трудо­
емким) методом формирования таблиц является режим конструктора.
4. Для надежного контроля за файлами в Access предусмотрен механизм сис­
темных первичных кодов. Этот механизм очень полезен, и если у пользова­
теля нет каких-то серьезных причин отказываться от введения первичных
кодов, рекомендуется их всегда создавать.
5. Используемые в Access типы данных очень разнообразны и для их эффек­
тивного применения следует перед выбором типа еще раз уточнить характер
использования этих данных при функционировании БД.
6. В Access 2000 предусмотрены два свойства полей: Format (Формат) и Input
Mask (Маска ввода). Обе опции позволяют задавать формат, в котором дан­
ные вводятся или, точнее, запоминаются при вводе в таблицу.
Свойство Format (Формат) рекомендуется применять при последователь­
ном вводе данных в таблицу.
Свойство Input Mask (Маска ввода) целесообразно при отображении лите­
ральных (символьных) констант, а также при вводе данных в пустые графы
(бланки, таблицы и т.д.). При этом пользователю рекомендуется ручной спо­
соб формирования маски ввода - он значительно проще.
7. Часто поле может включать лишь определенные значения, которые ишыа
содержатся в заранее заданном списке, а иногда - в самом поле, вместе с i'|>0'
извольно вводимыми данными. В этих случаях ввод данных можно упг"1"
тить и ускорить за счет использования подстановок.
8. Очень мощным средством повышения гибкости и эффективности p:i"°'
ты БД в Access является создание связей между таблицами. Во всех i,( 11'
сиях Access предусмотрено формирование вешних связей между та" >"'
цами. В Access 2000 возможен и другой вариант введения и отображении
связей между таблицами, отсутствующий в предыдущих версиях - 11С'
пользование вложенных таблиц данных. Иерархичность структуры ° а3
данных в этом случае проявляется особенно наглядно.
Глава IV
Создание форм новой
базы данных

• Использование автоформы
• Создание формы с помощью мастера форм
• Работа в режиме конструктора
• Начальная форма при открытии базы данных
или приложения
• Построение запросов для отбора нужных данных
• Ввод и корректировка данных
• Использование гиперссылок

Ьсли таблицы служат первичными, исходными элементами базы данных, то «на


выходе» вы получаете формы и отчеты. Как правило, формы используются для
получения ответов на запросы пользователя, записи данных в таблицы и/или
"вменения этих данных при их вводе либо корректировке. Для распечатки, то
ест
ь для получения копии данных на твердом носителе, применяются отчеты.
" Access формы можно создавать разными способами:
3
посредством автоформы;
J c
помощью мастера форм;
с
помощью конструктора;
построение разнообразных форм с помощью запросов;
Расширение форм за счет включения в них диаграмм, картографических
Данных, рисунков.
56 Создание форм новой базы донных

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


строить формы, в которых значения величин, хранящихся в БД, остаются неиз
менными. (Изменение данных - выборочное или нет - требует создания запро
са и относится уже скорее к области программирования.) Кроме того, благодаря
использованию гиперссылок Access 2000 позволяет включать в формы картогра
фические данные, рисунки и фрагменты текстовых файлов.

Использование автоформы
Таким способом можно создать форму, отображающую все поля и записи базовой
таблицы или запроса. Запрос, после его выполнения, может представлять собой
таблицу, структура которой аналогична любой другой таблице и содержит поля
и записи. Если у базовой таблицы есть подчиненная таблица, одна или несколько
(в смысле, рассмотренном в разделе «Вложенные таблицы данных» предыдущей
главы), то в форму при определенных условиях будут включены все ее (их) поля
Эти условия будут рассмотрены чуть ниже. Такая структура будет жесткой и од­
нозначной, пользователь не сможет ее изменить. Таким образом, автоформа - са­
мый легкий, но и наименее гибкий способ построения формы. Теперь посмотрим,
как это делается.
В разделе Objects (Объекты) окна базы данных щелкните сначала по клавише
131 Forms|, а затем по кнопке New (Новый). На экране появится окно New Form
(Новая форма), как показано на рис. 4.1. В этом окне надо выбрать следующие
параметры:
• способ построения формы (в данном случае - автоформа). Здесь возможны
три варианта:
- Columnar (В столбец);
- Tabular (Ленточная);
- Datasheet (Табличная);
а таблицу или запрос, на основе которой/которого будет построена форма (в на­
шем случае выберите таблицу Фирмы).
Задав нужные параметры и щелкнув по кнопке ОК, вы получите созданную
форму в виде столбца (см. рис. 4.2).
Как вы помните, у таблицы Фирмы есть подчиненная таблица Менеджер
(см. рис. 2.1). Между тем, как показано на рис. 4.2, при построении автоформы
посредством диалогового окна New Form в готовой форме эта связь не отра­
жена.
Рассмотрим другой вариант создания формы с помощью автоформы. Для этого
в разделе Objects (Объекты) окна базы данных выберите вместо вкладки jj]_Forn«J
вкладку D Tables |. Теперь укажите базовую таблицу (пусть это опять будет табли­
ца Фирмы) и выполните одно из описанных ниже действий:
• активизируйте опцию Autoform (Автоформа) в подменю Insert (Вставка)
на панели меню Access;
Использование автоформы 57

New Form 33
Design View
Form Wizard

AutoForm Tabular
AutoForm Datasheet
This weard aijtnrnatn-allv Chart Wizard
creates a columnar form PivotTable Wizard

Choose the table or query whete | ф


the obiect'b data corr.cs from I ~3
OK Cancel

Рис 4 ]

3 щелкните по стрелке прокрутки возле кнопки -:§Г^| на панели инструментов


Access, а затем опять-таки активизируйте опцию Autoform.
В обоих случаях результатом будет появление вложенной формы Фирмы, в ко­
тирую вктючена дочерняя форма Менеджер. Последняя содержит запись, иден­
тичную соответствующей строке из родительской формы Фирмы (см. рис. 4.3).

Ш Microsoft Access ^ • H H H J n M
DISH # a ? •
hi- e l a y
| Ё Фирмы
• Кпд фирмы
••••M-hM
D5
Название Фирмы Randoi-. Labot atones Ltd

Код страны 02

Адрес Diamond Road Crunilin Co Antrim В T 23 4Q r"


Fax 44 1843 422413

Адрес 2 Гзлкии В А
Тел 265 44 05

Примечания

и*cord к | «|| 5 • 1 »i |>»| 0< 26

d__. I •

Рис 4 2
58 Создание форм новой базы данных

Ы Microsoft Access ПШ2


•0,'
*> £i 51 ^ ' a
IfBj Фирмы ши13
Код фирмы 07

Название фирмы Iole-Parmer International

Код страны

Адрес 7425 North Oak Park Avenue, Niles, Illinoif, 650714


Fax (708)549 1700

Адрес 2

Примечания

- • - - .

Номер | Фамилия | Имя | Адрес | |


• § Джонс Джеймс
0 Фпеминг Бипл
+ 0 1 |

d
Рис 4 3

Создание формы с помощью мастера форм


В отличие от автоформы, мастер работает более гибко. Во-первых, вы можете
включить в проектируемую форму произвольный набор полей из различных вы­
бранных таблиц и запросов. Во-вторых, родительские и дочерние (основные
и подчиненные) формы могут быть, по вашему выбору, представлены на экране
либо вместе - по образцу вложенной формы - либо по отдельности, но с учетом
связей между таблицами. Рассмотрим эти варианты подробнее.
Начало работы будет таким же, как и при использовании автоформы: в раздете
Objects (Объекты) окна базы данных выберите Ш Forms |, а затем щелкните по
кнопке a New | (Новый). На экране появится окно New Form (Новая форма), по­
казанное на рис. 4.1; но теперь надо активизировать опцию Form Wizard (Мастер
форм). В нижнем поле того же окна вы можете выбрать первую таблицу или ,а"
прос, поля из которых будут включены в создаваемую таблицу. Но удобнее сделать
это в следующем окне - Form Wizard (Мастер форм), которое является перш>1М
шагом мастера; оно показано на рис. 4.4. (Кстати, если выбранных таблиц или tf"
просов несколько, их все равно придется указывать именно в Form Wizard.) В -,т°
же окно можно выйти и другим путем: в окне базы данных, выбрав вкладку Ф°Р"
мы, вместо кнопки New задать позицию Create form by using wizard (Создать
оние формы с помощью мастера форм 59

Which field-; do you Want on your form?

Vou can choose from more than one table or query.

boles/Queries

[ b t l e Фирмы ~3
Available Fields. Selected Fields

Я
Название фирмы
l- пд страны
Адрес
Адрес 2
Примечания

Lancel Ue>t > Finish

Рис 4 4

форму с помощью мастера). В окне Form Wizard мастер спрашивает вас: Which
fields do you want on your form? (Какие поля вы хотите включить в форму?) -
п напоминает: You can choose from more than one table or query (Вы можете вы­
бирать поля более чем из одной таблицы или запроса).
Теперь с помощью кнопки > | пли » | перенесите в создаваемую форму поля
из таблицы (запроса) - поодиночке или все сразу. Поскольку вы строите форму
на основе таблиц Фирмы и Менеджер, то в поле Tables/Queries (Таблицы/За­
просы) выбираете таблицу Менеджер. Затем помечаете для будущей формы че­
тыре первых поля из таблицы Фирмы и все поля из таблицы Менеджер. В ре­
зультате окно Form Wizard будет выглядеть так, как показано на рис. 4.5. На
очередном этапе работы надо щелкнуть по клавише Next. Следующее окно мастера
(см рис 4.6) предлагает пользователю выбрать один из вариантов итоговой формы:
How do you want to view your data? (В каком виде вы хотите представить данные?).
Сначала вы решаете, следует ли остановиться на варианте Form with subform
(Ф,°рма с вложенной формой), схематично представленном на рис. 4.6, или пред-
" о ч е с т ь Linked forms (Связанные формы), то есть соединение основной формы
1п
°Дчнненной/подчиненных, как показано на рис. 4.7. Еще один необходимый
100
Р ~ с точки зрения какой таблицы должна быть представлена итоговая фор-
d
°пция или by Менеджер. О различии между ними будет сказано дальше. Пока
отметим, что если вы отдадите предпочтение варианту by Менеджер, то это
-тючает возможность первого выбора (by Фирмы_) - он просто отменяется.
Дальше, щелкая по кнопке Next в каждом окне, следуйте указаниям мастера.
а
*дом этапе работы он будет задавать два вопроса. Первый: What layout would
!ке for your subform? (В какой структуре вы хотели бы видеть подчиненную
60 Создание форм новой базы данных

Form Wizard
Which fields do vou want on your Рогт?
- Е=
~.—-../ „ ^ JU can choose rrom more than one table or query
1
Tables/Queries

jTdble Менеджер

Available Fields Selected F.eld,

Ha-EdHHtr ф'ИрМЫ
Код страны
J
ct-ирмы Адрес
Номер
Менеджер Код фирмы
Фамилия
Имя |
WMzi

Cartel Next > Finish

Рис 4 5

Form Wizard
How do you want to view your
data'

Ф и р М Ы _ К О Д фирМЫ, Hd.E.dHMe ф'ИрМЫ, К и Д


стрзны, Фириы_Адрес

Номер, Менедх,ер_Код фирмы, Фамилии,


Имя, Мемедм ер_Адрег

(* Form with subform(';; (~ Linked forms

Cancel <Back Next > Finish

Рис 4 6

форму?). Здесь возможны два варианта Datasheet (Табличная) или Tabular (Лен­
точная) Второй вопрос What style would you like? (Какой стиль она должна
иметь?). Ответив на эти вопросы, вы попадаете в заключительное окно диалога
показанное на рис 4 8 Здесь мастер предлагает выбрать имена форм What titles a°
ние формы с помощью мастера форм 61

Form wizard
Н м do \ ои want to view j/our
data''
Фириы_Код фирмь!, К и в а н и е
фирмы, Код страны, Фирмы_Адрес_
t Менеджер

| Номер, Менедч. ер_Код фирмы,

( Фамилия, Имя, Менеджер_Адрес

Cancel
:
< Bark Next > Finrh

<" Fcrmwith u t t j r m i i <• LirlcJfjrn

Рис 4 7

Form Wizard .
'Л hat title* do you want for your forms?
Л
Form |?исмьС
А Щ^ J*
if 5ubform ||1енеджер Sutfotml

fiwJI
X -Я^Г; That's all the information the wizard needs to create \ our
Jvf* 1 form

/ Do you want to open the form or modify the form s design?

(* Open the form to view or enter information

f Modify the form's design

Г" Display Help on working with the form?

Cancel <Back Finish

Рис 4 8

want for your forms? - а также указать, как форма будет использоваться
ьнейшем Do you want to open the form or modify the form's design? (Открыть
v 1У для просмотра или ввода данных либо для того, чтобы изменить ее дизайн?)
°Ром случае вы попадете в режим конструктора форм, о чем речь пойдет ниже
62 Создание форм новой базы данн.

Согласившись с первым вариантом, вы получаете итоговую форму, ее вид Злп


сит от тех решений, которые принимались вами па промежуточных этапах рабо
с мастером Например, на рис 4 9 показана вложенная форма с подчиненной ф 0
мой в виде таблицы и основной - в столбец Здесь ведущая форма - это Фирмк
поэтому ее поле номера записи является независимым и первичным, а загшг
в форме Менеджер активизируются только тогда, когда идет работа с данным»
о соответствующей фирме

Ы Microsoft Access
- сю- <S?'*£ ' - б)
ui 1\ ч-> Ъ • *• • * ©

Е ФирмыЗ
Код фирмы 07
шз
1
Название фирмы Cole-Parmer International |
Код страны 03
ZJ
Адрес 7425 North Oak Park Avenue, Niles, Illinois, 650714
Fax (708) 549 1700

Менеджер Номер | Код фирмы | Фамилия


§07 Джонс
0 07 Флеминг
0 07

Re cord .«| <|l 1 » | и | > * | of 2 ±U »


Recoid ч I <I Г 7 > I > i | > » | of 2 e

Рис 4 9

Форма с подчиненной и основной формами, расположенными в столбец, пока­


зана на рис 4 10 Роль подчиненной формы Менеджер аналогична описанном}
выше, однако есть и дополнительная возможность в зависимости от активизации
кнопки мёнёдхедг!1 эта форма может быть раскрыта (если кнопка нажата) или cKpi i
та Наконец, еще один довольно интересный пример - форма, созданная «с точ! и
зрения» таблицы Менеджер (см рис 4 11) Эта форма является инвертирован
ной и в паре форм Фирмы - Менеджер становится ведущей Независимым и пц>
вичным здесь является поле номера записи в форме Менеджер, и в соответствии
с заданным номером меняются записи в форме Фирмы Подобным же образом
создаются и другие формы

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

шш
о в а а ? * ^ «г-
^. a i # а У , х чз е

Меннджер2

Код фирмы 1
Н<лвание фирмы Cole Рагглег International |
Код страны 03 |
Адрес 7425 North Oak Park Avenue, rjfes Illinois, 650714
Fax (708) 549 1700

Record " I ' l l 7 » | > l | > » | of 2 8

Ш МенедаерЗ -|D|X|
Номер Код фирмы Фамилия Имя Адрес -
• 1 2||07 ЦДжонс | [Джеймс |
•rl
Reooid '«I'll 1 • i и (•*! of 2 CFiltetedl «I I -Г zl
Рис 4 10

Ы Microsoft Access ШШ
оу aav в»
A | Z| 7/ -b
ы- в i u :
В Менеджер! ••HJnlxl

Фирмы_Код фирм1 02 |
На юание фирмы YSI incorporated |
Код страны 03 |
Фирмы_Адрес Yellow Spring
Ohio 45387
USA
Fax 513 767 9353 \
Номер э|
Менеджер_Код фи 02 |
Фамилия Смит |
Имя Джон |
Менеджер_Адрес
т
He 00,0 _ „ | . J f , • 1 и | » » | of 4

Рис 4 11
64 Создание форм новой базы данных

Итак, вы убедились, что по сравнению с автоформой мастер форм предоставт


ет пользователю значительно больше возможностей и позволяет быстро созыва
разнообразные формы. Но у мастера форм есть ограничения. Так, не допускает
изменять размеры полей или их дизайн; добавлять в формы новые сведения, e c j
они не связаны с записями в таблицах или не содержатся в запросах; вводить в ф 0п
мы диаграммы, картографическую информацию и т.д.
Кроме того, мастер форм не позволяет вносить в формы элементы программ,.
рования (или наоборот - включать формы в состав программ). Зато все вышепе
речисленное позволяет осуществить конструктор форм. Настало время подробно
рассмотреть возможности его использования для тщательного проектирования
и изменения форм. Все аспекты, связанные с программированием, будут иссле­
дованы в главах 8-11.

Работа в режиме конструктора


Использовать конструктор форм целесообразно для создания форм, которые не
просто содержат комбинацию полей из разных таблиц, но включают какие-то уни­
кальные элементы, причем не обязательно связанные напрямую с исходными по­
лями. Например, в режиме конструктора можно разработать начальную форму БД
Начальная форма в базе данных играет роль одновременно титульного листа и ог­
лавления в книге. Открыв эту форму и, следовательно, саму базу данных, пользова
тель может затем выйти из начальной формы в любую необходимую точку БД
Конечно, наличие такой формы ни в коей мере не является обязательным - в кон
це концов, любой объект БД можно активизировать и из окна базы данных, и от
этого она хуже работать не станет. И все-таки начальная форма, которую вы со­
здали по своему усмотрению, - это «собственное лицо» вашей базы данных, п ра­
ботать с ней будет приятнее.
Итак, создадим с помощью конструктора начальную форму для базы данны\
Контрольно-измерительные приборы. Эта форма должна будет носить то же имя
что и БД, и немедленно открываться при открытии самой базы данных. Кро:*
того, вы должны иметь возможность выполнять из начальной формы в режгог
просмотра любую опцию, входящую в состав базы данных. Пусть это будут.
О Страны;
а Фирмы;
• Менеджер,
• Типы приборов;
• Назначение;
Q Приборы;
а Закрытие и выход из базы данных.
Разумеется, начальная форма может выполнять и целый ряд других функции
которые здесь не рассматриваются.
Создание форм Фирмы и Менеджер подробно описано в предыдущих разДе
лах. Процесс построения остальных форм не рассматривается специально: в ос
новном он аналогичен изученному выше, и пользователь самостоятельно освоН
его за несколько минут.
Робота в режиме конструктора 65

3 Microsoft Access
D iu m -'J - ! i'L - й - ^ с? =s s- - ?j
n- н ! # а is >']"' - "ft -"" ^ Й' © а - ?i
Forml: Form EM:
• Detail

..Г1

Рис 4 /2

Процесс создания начальной формы начните с того, что откройте окно конструк­
тора форм Для этого в разделе Objects (Объекты) окна базы данных надо щелк-
пиь по клавише щ Form*! (см. рис. 4.11), а затем выполнить одно из перечислен­
ных пи-ке действий:
3 щелкнуть по клавише ^tjew | (см. рис. 4.13). Когда на эк­
ране появится окно New Form (Новая форма), показан­
1*1Д!Ш_1 • | x |
ное на рис. 4.1, следует выбрать опцию Design View (Ре­
жим конструктора); - °S
3 Щелкнуть по клавише М, Design | (см. рис. 4.12);
3 выбрать позицию Create form in Design View (Создать II» Toolbox
•1
форму в режиме конструктора). •II
1- \
в
результате любого из перечисленных шагов на экране воз-
Аа аЫ • d
"Mici пустая форма конструктора (см. рис. 4.12) с подзаголов-
м
Uetail (Область данных). Рядом с этой пустой формой & Ш Ш -|
поя ся панель инструментов - окно Toolbox (см. рис. 4.13).
1 г
сь с
°браны кнопки, с помощью которых в режиме конструк- J i \ ' n
, издаются всевозможные формы. Если установить на лю- •J£ Line [
Км
°пке указатель мыши, появится подсказка с ее именем.
Рнмер, на рис. 4.13 такой подсказкой является Line (Ли- Рис 4 13

№л
4 1 приведены необходимые пояснения к каждой из кнопок на панели
Ст
' РУМентов
-119
66 Создание форм новой базы данн Ых

Таблица 4.1

Кнопка Название Функция

Выбор объектов Выделяет объекты перед работой с ними

*1 Мастера

Надпись
Включает и отключает мастеров

Создает поля для описания элемента управления

Поле Создает текстовое поле для ввода, редактирования или просмотра

•I Группа переключателей Создает группу связанных флажков, переключателей. Одновремен


может быть выбран лишь один элемент в группе

Переключатель Создает кнопку переключателя


ш\
У Кнопка Запускает макрос или выполняет назначенную ей команду Access
Подчиненная Позволяет вставить подчиненную форму или отчет
5EJ форма/отчет

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


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

ш Рисунок Включает в страницу рисунок

р] Список Создает окно со списком, предназначенное для выбора значения


из списка

fbj Флажок Создает флажок


Свободная рамка Создает рамку, используемую для отображения свободного объект
Е| объекта
Присоединенная Вставляет рамку для присоединенного объекта, объекта, связанное!
fflj рамка объекта с данными таблицы и изменяющегося при переходе к новой записи

r^i| Разрыв страницы Вставка разрыва страницы

Набор вкладок Создает формы с вложенными страницами наподобие окна


fPJ базы данных

Ы Линия Добавляет линию

ш Дополнительные
элементы
Выводит на экран компоненты ActiveX и другие элементы управлени

Заголовок формы
На следующем этапе работы введите область заголовка формы. Для этого в оо.та-
сти данных Detail щелкните правой кнопкой и в появившемся контекстном меню
выберите позицию Form Header/Footer (Заголовок/Основание формы). Теперь
в пустой форме появится новая область - область заголовка Form Header. Ее раз
меры можно уменьшить или увеличить простым перетаскиванием границ. (kcT
еще один способ, о котором будет рассказано чуть позже.)
Формирование заголовка начните с того, что на панели инструментов (см. рис. J
щелкните по кнопке АЛ И переведите указатель мыши (вместе с появившп^
изображением кнопки) в область заголовка. Затем, щелкнув левой кнопкой мы"1
работа в режиме конструктора 67

vi'ite прямоугольный контур нужного размера. Когда вы отпустите кнопку,


триооугольник по умолчанию станет белым. Теперь в это поле введите имя базы
пря
" ^ iY - Контрольно-измерительные приборы. Записать текст можно любым
Д
Ьтом, установленным по умолчанию, - наверняка вы все равно станете в даль­
вносить правки (об этом ниже). На данном этапе форма будет выглядеть
нейшем
как показано на рис. 4.14. Теперь щелкните по контуру заголовочного ноля
oii кнопкой мыши. Линия контура видоизменится, а фоновый цвет заголовоч-
го поля сравняется с цветом области заголовка. Если затем щелкнуть правой
•ппкоп мыши в поле заголовка, появится контекстное меню, в котором сле-
т вЫ брать опцию Properties (Свойства). Перед вами откроется таблица
свойств заголовочного поля (см. рис. 4.15). Label (Метка) - имя кнопки Аа^ в Ac­
cess 2000, поэтому все поля, созданные с ее помощью, будут первоначально иметь
что название, пока вы не переименуете их. Порядковый номер возле имени обо­
значает просто количество обращений Access 2000 к этой кнопке, и, как уже гово­
рилось в постраничных примечаниях, не имеет принципиального значения. В таб­
лице свойств вы можете задать и скорректировать все параметры, определяющие
содержание и вид таблицы, в том числе:
и Width (Ширина) и Height (Высота) поля заголовка. Вы задавали их вруч­
ную, рисуя прямоугольник;
• Border Width (Ширина рамки);
Q Back Color (Фоновый цвет заголовочного поля), Fore Color (Цвет надписи
в заголовочном поле), Border Color (Цвет рамки заголовочного поля);

Ы Microsoft Access l-|nlx|

Sl- У & Я d? В j - -
|EForm2: Form ВЕЭЕЗ
• ' i • 1 • i • 2 • i • ; i • 4 I • 6 • I • 6 • I • 7 i • '=: • i - 9 - • • 1 С —

1
• Form Header

1
Контр опьмо-игмерительные приборы
i

1 1 1 1 1 1 1 1
J • Detc il

z}
-1 •

-J

3- РИС. 4.14
68 Создание форм новой базы данных

а Font Type (Тип шрифта) и Font Size (Размер шрифта);


• Тор (Отступ заголовочного поля от верхней рамки области заголов
и т.д. ка)
Задаваемые значения либо напрямую вводятся в соответствующее поле л
Ибо
вы сначала щелкаете в нем мышью, а затем используете появившуюся клав ИЩу
Г...| и выбираете нужное значение из списка.
Например, параметры заголовочного поля, представленного на рис. 4.14, были
заданы по умолчанию. А для поля заголовка, отображенного на рис. 4.15, прово.
дилась следующая настройка (окно настройки см. на рис. 4.16):

Ы Label: Label6 |xj


Format | Data | Event Other | А,, | , ( Ц ;
i Top . 0,сЛ2ст . ..... A
: Width .
7,937cm
. . l,678crn
, Back Style Transpaient
. 16~77:i5 ! J
i Special Effect . . Flit I
. . Transparent
. 0
1 Border Width Hairline
Fore Color . 0
. . T ahem a zl

Рис 4 15

У Microsoft Access l-l°M


J D 0 ; Ш a -. X 4 n © <7 «"' - oa - , og f~ • >>,

J m- a I B s i =ь a,<? ^ я cf © j- ?,
E Form2 : Form 1=J°1*J
i l i 2 i 3 i 4 - i f i F i 7 i - 8 i 3 i - £ j

1 • Form Header

7i
1 '
XJ.J I- 1 J ^
Контрольно-измерительнУЯИ
2 приборы ЩЯк

i * D e t < ill

ll. 1 ^

Рис 4 16
Робота в режиме конструктора 69
размер шрифта (Font Size) был увеличен с 8 до 16;
отступ от верхней рамки (Тор) установлен в размере 0,5 см;
j текст выровнен (Text Align) по центру (Center);
специальный эффект (Special Effect) - поле приподнято;
j цвет фона поля (Back Color) - темно-серый.
Не только поле заголовка, но и каждый элемент формы (таблицы, отчета, стра­
ны доступа к данным и т.д.) имеет свою таблицу свойств и может быть доста­
точно тонко и точно настроен.
Командные кнопки
клк \'ле говорилось, назначение начальной формы состоит в том, чтобы непосред­
ственно из нее можно было выйти в любую форму базы данных. Значит, в началь­
ной <|юрме есть командные клавиши, которые и обеспечивают запуск других форм
в режиме просмотра. Для этой цели используется кнопка j l , расположенная на
панели инструментов). Щелкните по названной кнопке и переведите указатель
мыши вместе с появившимся изображением кнопки в область данных Detail. При
этом открывается окно мастера кнопок- Command Button Wizard (см. рис. 4.17).
Решите, чьими услугами вы хотите воспользоваться - мастера кнопок или кон­
структора кнопок. Если вас устраивает первый вариант, следует щелкнуть в окне
Command Button Wizard по кнопке Next и двигаться дальше. Если вы хотите
применить конструктор кнопок, в том же окне (см. рис. 4.17) щелкните по кнопке
Cancel (Отмена). В нашем примере мы создадим новую кнопку с помощью мастера,
.1 AITCM r ернемся назад и сделаем то же самое, используя конструктор.

Command Button Wizard


san,pi* What action do you want to happen when the buttun is
pressed'

Different actions are available for each cateqor / .


Ш
Categories Actions

Record Navgahon Appl, Form Filter


Pecord Operations C/rjse Form
Form Operations Edit Form Filter
Peport Operations
Application Open Page
Miscellaneous Print a Form
Print Current Form
Pefresh Form Data

Cancel Next >

Рис 4 17

оздание кнопок с помощью мастера


10 СЧ1 РИСТуПИТЬ К
Ь;1рпе''
tn
и" Р а б о т е ' м а с т е Р поинтересуется: What action do you want
when the button is pressed? (Что вы хотите сделать, нажимая кнопку?).
70 Создание форм новой базы донн

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


щего перечня в левом поле окна:
• Record Navigation (Передвижение по записям);
• Record Operations (Операции с записями);
Q Form Operations (Операции с формами);
Q Report Operations (Операции с отчетами);
• Applications (Приложения);
• Miscellaneous (Разное).
Каждой названной категории соответствует набор команд в правом поле экра­
на. Чтобы запустить любую из них, щелкните по кнопке Next.

Command Button Wizard


What form would you like the command button to open-

Ли» Еидэционные рэЬоты


Менеджер
~3
Назначение
Приборы

Типы Приборов
Фирмы
Згологические приборы 4

Cancel <Bic\ Next > Finish

Рис 4 18

В соответствии с нашей задачей выберите в левом окне категорию Form Ope­


rations (Операции с формами), а в правом - команду Open Form (Открыть фор
му). Щелкнув по кнопке Next, вы выходим в следующее окно конструктора кнопок
показанное на рис. 4.18. (В этом окне среди других файлов базы данных, речь о ко
торых пойдет в последующих главах, вы видите и файлы, перечисленные ранее -
Страны, Фирмы и др.) Поскольку кнопки предназначаются для открытия форм
мастер поинтересуется: What form would you like the command button to open.
(Какую именно форму должна открывать та конкретная кнопка, которая сейчас со
здается?). Выберите форму Страны, как показано на рис. 4.18, и опять щелкните пс
кнопке Next. В очередном окне (см. рис. 4.19) вам нужно выбрать один из двух ва
риантов: Open the form and find specific data to display (Открыть форму, чтобы на!
ти и отобразить специфические данные) или Open the form and show all the recor -
(Открыть форму, чтобы показать все записи). Первый вариант нужен для решет
очень специальных задач, поэтому лучше остановиться на втором. Снова ше-
чок по кнопке Next, и вы выходите в следующее окно мастера (см. рис. 4.20). №
в режиме конструктора 71

Command Button Wizard


Do you want the button to find specific informahon to display in
Sample
the form 7

О For example, the button can open a form and display the data
for a specific employee or customer

^ Open the form and find specific data to display

(•" Open the form and shov all the records

Cancel <Back Next > Finish

Рис 4 19

Command Button Wizard


Do i ou want" text or a picture cm the button" 1
Sample

If /ou choose Text, you can t , p e the text to display. If you


choose Picture, you can click Erowse to find a picture to display

(•' Text. [Страны

,-,„.. Ц1ДШ1Ш.ЦЛ

I Cancel
г

< Back Next > Finish

Рис 4 20

феделяется уже внешнее оформление кнопки. На кнопку можно поместить над-


сь и л н
рисунок. Если вы предпочитаете текст, то введите его в поле Text. Если
dM
"°-чьи]е нравится картинка, сначала щелкните по кнопке Browse (Просмотр"),
Тем в
ыберите подходящий рисунок, указав в поле Picture (Изображение) имя
Сгк
;тветствующего
файла.
зчальиая форма, которую вы создаете, должна содержать несколько кнопок.
• а я из них предназначена для открытия определенной формы, поэтому луч-
( С(1 ° поместить на кнопке именно имя открываемой формы. Активизируйте
10
Text и введите имя формы - например, Страны. Теперь задача выполнена,
72 Создание форм новой базы данных

и можно щелкать по кнопке Finish Вновь откроется окно конструктора кноп


в котором уже находится только что созданная кнопка (см рис 4 21) Если вас
устраивают ее размеры или расположение в области данных, это легко поправи
Чтобы задать нужные перетаскиванием, поставьте указатель мыши на один из
леньких прямоугольников по контуру кнопки и щелкните по нему Перемести
кнопку вы можете, щелкнув мышью по прямоугольнике побольше, который нах
дится в левом верхнем углу контура Кроме того, советуем изменить размер щр„(
та (это вам уже приходилось делать) Теперь с помощью кнопки ПВ| на паны
инструментов Microsoft Access перейдите в режим просмотра формы Вы увилик
начальную форму, содержащую пока только одну кнопку - Страны (см рис 4 22)
Если щелкнуть по ней, откроется форма Страны

У Microsoft Access I-In |xl


!
fj D У , а & v X ЕЬ © <? \ о w . а_а . & |& ^ £ , . гд( ^
| п -! у а а . х f& is <? ^ & ^oltscff^ea-o.
1
9В Form2 : Form IJnL*^
I 1 i г i „ i 4 т 5 I > I 1 4 I 11 I 1. I 1 I -

• Form Hpar>t
1
Контрольно-измерительные
t
приборы

j • DC''ill
П ~
1
1
" C граны 1
*—i
2

J• Forni Footer
I ^b

Рис 4 21

Создание кнопок с помощью конструктора


Теперь еще раз создадим кнопку, на сей раз с помощью конструктора Вернитесь
к тому этапу работы, который показан на рис 4 17 Если вы выберете здесь не
Next, a Cancel, то вновь попадете в окно конструктора (см рис 4 23), в котором
увидите объект Command25 Напомним, что Command - имя, которое Access 20и
присваивает всем объектам управления, создаваемым с помощью кнопки fJlj а 2э '
просто порядковое число Оно сообщает о том, сколько раз система обрашалас
к этому обозначению
ро^ото врежиме конструктора 73

=шш
ID a 'v h " ® ' •« & * &n - л и ? °s1 #*i - ©
irjT g a a v * - <S '' # <Q л и > Э а - 9.1
и Form2: Form
r
I I 4 I i 6 I 7 i 8 1 i 1 I i 11 I 1 i l i
'"l 1 \ "

nHeati

Контрольно-измерительные
-i
i приборы
2
i

J 4

1
t

Страны

1
14 For i F u j f e r

Рис 4 22

Таким образом, фактически кнопка в начальной форме уже создана Вам осталось
тотько изменить ее имя и, если надо, размеры и шрифт Все эти операции вам уже
знакомы выполнив их, вы выходите в окно, показанное на рис 4 21, и дальше повто­
ряете все действия, описанные в разделе «Командные кнопки» Все остапьные кноп­
ки, открывающие формы, вводятся в начальную форму аналогичным способом
Немною иначе создается кнопка, которая закрывает начальную форму, то есть
позволяет выйти из формы в окно базы данных В этом случае в окне мастера кно­
пок (см рис 4 17) следует выбрать в правом поле среди команд работы с формами
вместо Open Form (Открыть форму) команду Close Form (Закрыть форму) В по­
явившемся окне (см рис 4 20) надо активизировать не Text, a Picture Тогда в пра­
вом поте этого окна вместо MSAccess Form появится ряд опций, среди которых
НУЖНО выбрать Exit Когда вы завершите все описанные операции, кнопка закры­
тия начальной формы будет выглядеть так, как показано на рис 4 24 Если щелк-
, VTb п о этой кнопке, Access 2000 закроет начальную форму и выведет вас в окно
оаз
ы данных
''так, вы создали и кнопки для открытия всех форм, и кнопку закрытия началь-
и
формы Останется только дать ей имя, ведь до сих пор ее рабочее название -
Form с каким-либо индексом (в нашем случае Form2) Это очень просто сделать
Когда вы в первый раз захотите закрыть начальную форму с помощью кнопки xj,

ss 2000 предложит вам назвать новую форму или согласиться с ее рабочим
е
м Здесь вы и введете свое название - Контрольно-измерительные приборы
74 Создание форм новой базы данных

1Ш Microsoft Access l-lnlxi

Б Form2 : Form ^Jn|j^


1 1 I 2 1 1 4 ' 1 > 1 7 I 1 4 I 1 I II k i l l

1• Form Hen jet

Контрольно-измерительные
i
приборы

1
2

1
1•fDet d
1
1 i
• *
ComrnaricL'5 r

< "1
• Forr i Fuofer
1 A
Рис 4 23

Ы Microsoft Access |g|x|

• &a a a v ' OD- I ? =S ' 05-


k£ • В a a v- Ф\ с в а - >:
| В Контр ольно-измеритеАные приборы: Form ^•.льр-
Контрольно-измерительные приборы

Страны Фирмы Менеджер Назначение


-
Типы Приборы Щ*
приборов

«1 1 -Г1
Рис 4 24
Начальная форма при открытии базы данных или прилосожения 75

На рис 4 24 показано, как будет выглядеть начальнаая форма по завершении


всех описанных операций Щелкнув по любой кнопке сг именем этой формы, вы
можете открыть ее

Начальная форма при открытии б*азы данных


или приложения
Чтобы база данных открывалась из начальной формы, ну^жна небольшая настрой­
ка В меню Tools (Сервис) следует активизировать опицию Startup (Параметры
запуска) В появившемся диалоговом окне (см рис 4 2 5 ) щелкните по стрелке
прокрутки, и откроется список Выберите в этом списк е имя начальной формы
и введите его в поле Display Form/Page (Отобразить форму/странииу)

Startup
Application Title Di'pla/ Form/Paae
|Кснтр льнг ичмеритс-пьмыр n i r n t _ - j
OK
Z\
Cani?
Application Icon Г Di'fld ' D a t a t a ' f Window

- | Г Display Statu--Ear Advance ^ >

Menu Bar Shortcut Menu Bar


Kdcfault^
Л Ifdr-fajlO A
P^ Allow Full Menus N7 Allow Built in Toilbars

W Allow Default Shortcut Menus W Allo'V Tooltarj'Mrnu Char.Qr-i,

Рис 4 25

Затем, чтобы при открытии базы данных на экран не к ыводилось ее окно, сни­
мите флажок в поле Display Database Windows (Показать окно базы данных)
Это не лишает вас возможности открыть окно базы данн ых, достаточно восполь­
зоваться кнопкой ©I на панели инструментов (evi, например, рис 4 20 или кла
впатурной клавишей F11 Еще одна существеннгя детали внесенные изменения,
показанные на рис 4 25, вступают в силу только при следующем открытии базы
данных

Построение запросов для отбора нужных данных


Одна из разновидностей запроса на выборку - (жльтр н а основе формы Базой
Для него может служить любая заранее подготовленная форма В качестве при­
мера мы рассмотрим форму Приборы, котордя показана на рис 4 26 Она взята
из реальной рабочей практики и содержит 173 записи, ка.к видно из окна номера
записи
Чтобы произвести фильтрацию по полю Приборы, щ;елкните по кнопке "й|,
с помощью которой можно изменить фильтр, и все окна формы очистяТ-Я Форма
готова к работе в режиме фильтра (см рис 4 27)
76 Создание форм новой базы данных

ьЛ Mirrosoft Ас г ess l-tn|x|


File gdit View Insert Format Record. Wmduv Hflu

© J- Uj
Б Приборы 1-lDlx
Назначение прибора Вес кг
Назначение не указано "3I
Примечание2
Характе РИС-ТИКИ
Карманный прибор фирмы HANNA без
Категория (портативный 3
электрода с BNC-разьемом
модель Checker В С вместимость с широким спектром
3 различных рН-электродов
тип рН-метр 3 Диапазон измереннии 0-10 рН
Точность 0 2 рН
Фирма |ЗК0ХЕЛП И НСТРУМЕНТС J Питание батареи на 3000 час
Пасса 52 6 г
Цена $ I 42
№ по каталог;/
Примечание
Год по каталог/ Г
Цена! $ | 0

Примечание!
Новый Новая Новое назначение Удалить
Изменить
тип Фирма прибора запись
запись
прибора

• | и [»»[ of 172 ^

Рис 4 26

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


рять записи, включаемые в итоговый набор записей. Установим два таких крите­
рия: Назначение (в данном случае приборы для контроля кислотности) и Фир­
мы (нас интересуют лишь те приборы, которые выпускаются фирмой ORION).
Сначала задайте условие для поля Назначение. Справа от него находится стрел­
ка прокрутки. Щелкните по ней, и на фоне формы появится список назначений
(см. рис. 4.28). Выберите опцию Измерение кислотности, и этот критерий будет
зафиксирован в поле.
Точно так же задайте в поле Фирмы позицию ORION. В результате в двух полях
формы появятся установленные вами условия, или критерии отбора (см. рис. 4.29).
Это будет соответствовать логической схеме «И».
Если вы хотите сохранить записи, отобранные в результате запроса, щелкните
по кнопке й | (сохранить как запрос) на панели инструментов. На экране появит­
ся окно Save As Query (Сохраненить в виде запроса), в котором предлагается имя
сохраняемого запроса. Либо примите предлагаемое название, либо введите иное.
Во втором случае программа иногда может сообщить, что запрос с таким названи­
ем уже существует. Тогда следует заменить предыдущий запрос. Кнопка @| воз­
никает на панели инструментов только на данном этапе работы, поэтому щелк­
нуть по ней надо именно здесь.
Построение запросов для отбора нужных данных 77
Q Microsoft Access ЕШЗ
PIIP Ed v Insert R l t f Tiols Wirdo* Help

В Приборы: Filter by Form


Назначение прибора Вес кг
^3
Примечание2
Характеристики
категория 3
1
г i цель |
тип
1
J
Фирма 3
1
Црна i |
№ по каталогу
Г[.имечание
Год по каталогу
^на! $ 1
«—и.
Ггимечание'

з"
Рис 4 27

Теперь можно выполнить подготовленный запрос. Для этого щелкните по кноп­


ке v | (Применение фильтра). В полях формы появятся значения полей одной из
отобранных записей (см. рис. 4.30). Это будет та же самая форма Записи, но со­
держащая все данные (см. поле номера записи), которые были отобраны на осно­
ве заданного фильтра. В поле номера появившейся записи вы увидите ее номер
и общее количество отобранных (отфильтрованных) записей. Переходя от одной
записи к другой, вы «листаете» их так же, как делали это в начальной форме. За­
прос, который вы только что сохранили, заносится в виде таблицы под заданным
вами именем в окне базы данных во вкладку Queries. При необходимости вы мо­
жете ввести на данном этапе работы новьге условия отбора, уменьшая количество
итоговых записей. Это делается с помощью описанных выше кнопок, расположен­
ных на панели инструментов.
Предположим, вы хотите отфильтровывать записи последовательно, от шага
к шагу задавая дополнительные условия в новых полях и постепенно снижая чис­
ло отобранных записей. В таком случае повторяйте описанные выше действия, на­
чиная с щелчка по кнопке JjjJ (Изменить фильтр)
Чтобы вернуться к исходному состоянию формы и подготовить ее к обработке
нового запроса на выборку, щелкните по кнопке JTJ (Удалить фильтр) на панели
инструментов.
78 Создание форм новой базы донных

В Microsoft Access
File? Edit t i e . " In si t Filter Tr.nl. Window Help
© a i' •"' Qo,e X V S Л • l-'.l .
Dcjy L -о г" • an • og . g .
H Приборы: Filter by Form
Назначение прибора Вес кг
"3
Примечэние2
Характеристики
Анализ воздуха на содержание аэрозолей и кислых газов анализ биообъектов _i
Анализ летучих органических соединений (бензол толуол трихлорэтилен кснпол трихлорбензол) е поверхностных е -
Анализ летучих органических соединений (бензол толуол трихлорэтилен ксилол хлорбензол) в поверхностных ВОДЕ
Анализ нелетучих гербицидов производных фенола, алкилсульфидов ионов тяжелых металлов и некоторых редких а
Долговременный мониторинг растворенного кислородапроводимости солености кислотности температуры общей!
Измерение растворенного кислорода температуры проводимости солености кислотности общей концентрации в П|
Измерение аммония ^ __^_
Измерение кислотности
Цена$
Н- по каталог-/
Примечание
Год по каталогу
Цена! $
Примечание!

Рис 4 28

Итак, повторим и сведем воедино основные правила отбора (фильтрации) за­


писей с помощью формы:
• отбор может осуществляться по нескольким условиям, как задаваемым од­
новременно (схема «И»), так и взаимоисключающим (схема «ИЛИ»);
• если одновременно задать различные критерии отбора в нескольких полях
(схема «И»), фильтр будет возвращать только те записи, в которых каждое
из полей отвечает всем указанным условиям;
• предположим, вы хотите указать несколько значений, которые запись, вклю­
чаемая в результирующий набор, может содержать в одном поле (схема
«ИЛИ»), Выберите вкладку Ог (ИЛИ) (ее ярлычок находится в левом ниж­
нем углу окна). Фильтр будет возвращать записи, которые содержат в полях:
- все значения, указанные во вкладке Look for (Найти для...);
- все значения, указанные в первой вкладке Or;
- все значения, указанные во второй вкладке Or, и т.д.;
• чтобы найти записи, имеющие в конкретном поле (в данном случае в поле
без списка) пустые или непустые значения, введите в него выражение Is Null
или Is Not Null1.
Величина поля, которому ЕЮ присвоено никакого значения. Отмстим, что она не яиляется эквивален­
том числа 0 или пустой строки
Ввод и корректировке данных 79

дВЗШШЗШШШШШШШШШШ^ШШШШ^Ш ГЛ5Ш
File £dit View Insert Filter Jooh Window Help
& Q . < ibi ••' - ciu-.e x 7 0 a - L].

В Приборы: Filter by Form


Назначение прибора Вес кг
ош>
'И иерениекислотности' "3
Примечание^'
<арактеристики
Категория d

МОДеЛЬ

тип ~3
Фирма "3
Цена $ |
N" по каталог)'
Примечание
Гол по каталогу
Цена! $ |
Примечание!

15
J
Рис 4 29

Ввод и корректировка данных


Как уже говорилось, для ввода новых данных иногда используются таблицы, но
удобнее применять для этой цели формы.
Рассмотрим такую возможность на примере формы Приборы, с которой вы ра­
ботали в предыдущем разделе.
Выведите ее на экран. Теперь с помощью кнопки в поле номера записи задайте
его максимально возможное значение (см. рис. 4.31). Всего в форме имеется 173
записи; значит, установите указатель на цифре 174. Как правило, перед вводом
новых записей в основную форму необходимо предварительно пополнить или
обновить словари (формы Страны, Фирмы, Типы приборов, Назначение). От­
крыть перечисленные формы можно как по отдельности, из их собственных окон,
так и из формы Приборы. Рассмотрим последний вариант.
Для подобных случаев в форме Приборы есть кнопки Новый тип прибора, Но­
вая фирма, Новое назначение прибора. Механизм их создания подробно обсуж­
ден выше.
Предположим, что перед вводом новой записи по приборам необходимо ввести
новые записи в словарные формы Страны и Фирмы. Начнем с последней.
Щелкните по кнопке Новая фирма. На экране появится форма Фирмы, гото­
вая для ввода новой записи: все поля пусты, а в поле номера записи установлено
80 Создание форм новой базы данных

Ы Microsoft Access ЕШП


] File Edif View Insert Format Tools Window H^l,_

i D c& e & a v-
M, • и в a v - • * 21 'il/' "a v w • • d- g
назначение прииира "3
IU кислотности ~2
Прим~чание2
Характеристики
Полностью влагозащищенныи портативно
Категория |портативныи J
рН-метр Встроенная память на 60
модель |[Иодель 265 измерении Выход - интерфейс R5232
-\ Точность по рН - 0 005 по напряжению-0
тип рН-метр d rnV по температуре - 0 1 ОМожет
комплектоваться полным набором пoлeвt
Фирма JORION zi принадлежностей

Цена$ I
яшнШш № по каталогу
Примечание
Год по каталог/ 1 mi
Цена1 $ 1
••г
Примечание

Новый Новая Новое назначение Удалить


Изменить
тип фирма прибора запись
запись
прибора

>•! of -a (Filtered) J T
_Г1Г
Рис 4 30

значение 27, тогда как всего в словаре Фирмы 26 значений (см. рис. 4.32). Если
вам не требуется заносить новое значение в словарь Страны, вводите новую фир­
му, которая зарегистрирована в одной из стран, уже включенных в этот словарь
Если надо ввести также и новое значение страны, то в окне формы Фирмы (см
рис. 4.32) следует щелкнуть по кнопке Новая страна. В результате на фоне двух
предыдущих форм откроется форма Страны, готовая к вводу информации. Вне­
сите в поле Страна наименование страны - например, Португалия (см. рис. 4.33)
Порядковый номер, выполняющий здесь функцию кода, вводится автоматичес­
ки. Затем воспользуйтесь клавишей Enter на клавиатуре. Теперь можно вносить
текст в следующее поле - Примечания. После повторного нажатия клавиши Enter
форма Страны закрывается. Далее введите название фирмы в соответствующее
поле формы Фирмы (см. рис. 4.32). Новой фирме должна соответствовать страна,
поэтому щелкните по стрелке прокрутки в этом поле и выберите любую страну
из раскрывшегося контекстного списка. Обратите внимание, что в нем уже со­
держится и недавно введенная Португалия (см. рис. 4.34). Выбрав страну, введи­
те в одноименное поле название фирмы (в нашем примере - TAAG).
Точно так же вы должны действовать, вводя запись о новом приборе в форме
Приборы (см. рис. 4.35). Во все поля, содержащие стрелки прокрутки, данные
можно включать двумя способами. Первый: вы выбираете нужную позицию из
списка. (Так, в контекстном списке фирм, показанном на рис. 4.35, уже содержится
Ввод и корректировка данных 81

EMU
Fj\t! Edt View Lnsert Fnrmat Records lools Window Help
D GS H - & E i "'•

Назначение прибора ТЗ
3
Примечание2

Характеристики

Категория "3
модель
3
тип 11
Фирма

ЦенэЗ I
№ по каталогу
Примечание
Год по каталог,'
Цена! $ I
Примечание!

Новый Нивая Новое назначение Изменить Удалить


Фирма прибора запись запись
Прибора

1"1 • ! °< " 4

Рис 4 31

новая фирма TAAG.) Второй вариант: вы вводите данные с помощью клавиа­


туры.
При необходимости вы таким же образом вводите новые позиции в словарные
формы Типы приборов и Назначение. В поля, не имеющие стрелок прокрутки,
данные вводятся с клавиатуры. Так, в поле Вес, кг указано числовое значение 14.
После ввода всех необходимых сведений нажмите клавишу Enter, чтобы запом­
нить все сделанные изменения.
Форму можно использовать не только для ввода, но и для удаления информа­
ции. Обратите внимание, что каждая из форм, показанных на рис. 4.30-4.35, вклю­
чает кнопки Изменить запись и Удалить запись. Для корректировки данных от­
кройте нужную запись, произведите необходимые изменения, а затем с помощью
клавиши Enter отдайте программе команду запомнить их. При удалении записи
сначала откройте ее, а потом просто щелкните по кнопке Удалить запись.
Итак, в этом разделе мы стремились показать, что формы - очень мощный и гиб­
кий инструмент работы с данными. Однако в ряде случаев (например, при подго­
товке формы для ввода, корректировки и удаления данных) штатного про­
граммного обеспечения Access 2000 может быть недостаточно для выполнения
необходимых операций. Это легко объяснить: проблемы, которые возникают в по­
добных ситуациях, часто оказываются специфическими, и их решение не всегда
предусмотрено стандартными программными средствами.
82 Создание форм новой базы данных

Ш Microsoft Access - [Фирмы] l-lnlx


d File £dit View Insert Format Records loots V^iridiv* Help

D ^ Q SEi? i/ ' >i • r>a • og - C7J .


й-и s a y t ^' -n •- $i \\ ъъ *& •• * © j - 0-
Код Фиомы 27

Название фирмы ~Б

Стоана

Апоес

Ааэес2

Примечания

Изменить Удалить
запись запись Но^ая страна

WI»
Рис 4 32

В данном случае вы имеем дело именно с такой ситуацией Чтобы выполнить


ряд функций, необходимо использовать не только язык запросов (SQL), no и мак­
росы, а также средства языка Visual Basic for Application (VBA) Подробнее об
этом пойдет речь в главах 10 и 11

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

Access и географические карты


В ряде случаев сопряжение базы данных с географическими картами совершенно
необходимо Однако такая функция в самой системе Access, взятой отдельно, не
предусмотрена Если же рассматривать Access как часть программного продукта
Microsoft Office, то некоторые возможности для работы с картами все-таки име
ются В составе Microsoft Excel, входящем в пакет Microsoft Office, есть программ
ный модуль Microsoft Map, предназначенный для отображения данных на гео
графических картах Однако на практике пользоваться этой программой очень
неудобно Во-первых, Microsoft Map работает только с картами формата MAP
который поддерживается лишь в программных продуктах корпорации Maplnlo
Использование гиперссылок 83
И Micro 5 ™* Access
f\ Ed t Mew trrert Format P e c i r k T L : ) L ^/ndib/ Help

QtjU S B » ° 'DO- =g - 0 .
0-
I Фирмы JOj_Xj

К о п Фиомы

На
Код
шш
Кате i Страна Португалия

моден
Примечания
тип

Фи| г

Удалить Изменить

11 • ! • I " ! °< 11

Изменить Удалить
запись запись Ниеая страна

Г ~ > | " | > « | ОТ 27

Рис 4 33

(1акой монополизм, как вы понимаете, создает для пользователя ряд трудностей)


Во-вторых, программист вынужден постоянно переносить карты и другую инфор­
мацию из Access в Excel и обратно В настоящем разделе книги мы покажем, что
возможен принципиально иной способ работы с картой в системе Access С по­
мощью гиперссылок - полей связи в базе данных Access - пользователь свобод­
но и быстро переходит к документу в сети Internet, в локальной сети или в теку­
щей базе данных, да и вообще практически к любому документу в самой системе
Microsoft Office и вне ее Верно и обратное используя гиперссылки, вы можете
перейти из любого документа в форму или табпицу базы данных Access

Поиск карты
Выше уже говорилось, что Excel предъявляет к картам довольно жесткие требова­
ния Предлагаемая технология использования гиперссылок, напротив, допуска-
ет
работу с любой картой в любом формате, если ее можно вывести на экран мо­
нитора Затем надо сделать снимок карты с помощью таких программ, как Adobe
' hotoShop, Screen Print Gold, HyperSnab-DxPro и др (которые не входят в состав
Microsoft Office) Теперь можно конвертировать карту в любой нужный графи­
ческий формат Чтобы впоследствии у вас не возникало трудностей в работе с кар­
той в Access 2000, поместите ее из полученного файла в окно, открытое в Word 97 или
й
Word 2000 Карта будет иметь формат DOC Конвертированные таким образом
84 Создание форм новой базы данных

Ы Microsoft Access
File- Edit View Inceit Former Records lindj.v Help

a ei Q ; <s a v i• "
В J • гч .
ПИ Прибор!
E Фирмы
Г
Коп Фиомы 27 шш
Название фирмы ITAAG ~3

Страна ~3
Катег

мо дел Адрес
Германия
Италия
гз-
Россия
тип
Ааоес2 США
Фирг, Финляндия
Франция
Цена; Швейцария
Португалия
Примечания

Изменить Удалить I
запись Запись Новая страна I

•|"|"|<"27

Рис 4 34

файлы в формате DOC показаны на рис. 4.36 (для Архангельской области) и 4.37
(для Ленинградской области).
В нашем примере для конвертирования были использованы карты, разработан­
ные в ФАПСИ и входящие в составе одного из банков данных по ЧС (он рассмат­
ривается в настоящей книге). Автор не участвовал в создании этих карт, и сначала
они вовсе не предназначались для конвертирования - лишний аргумент в пользу
того, что для подобных целей пригодны практически любые географические карты
Установка гиперссылок в базе данных
Откройте таблицу Filel. Обратите внимание на поля Название области и Назва­
ние города (для наглядности они поставлены рядом, как показано на рис. 4.38)
Две самые первые записи касаются Ленинградской (Санкт-Петербург) и Архан­
гельской (Архангельск) областей.
Сформируйте гиперссылку, которая позволяла бы, например, из каждой стро­
ки быстро выйти в соответствующую карту. Для гиперссылки необходимо от­
дельное поле. Создайте его и назовите Карта, а затем определите его в конструк­
торе таблиц как поле гиперссылки (см. рис. 4.38). Теперь подготовка завершена,
и можно непосредственно вводить гиперссылку. Как только вы устанавливаете
курсор в новоиспеченное поле Карта, активизируется кнопка %\ - Insert Hy-
perLink (Вставить гиперссылку). Щелкнув по ней, вы вызовете одноименное
Использование гиперссылок 85
Щх
r^ pi|p ETdit View Insei t F o r m a t Re-Lurd.? Tools Window H>=lp sJiU
L'J.
© а- Э-
Назначение прибора Вес кг 14
[ l_r IP._ рние гцюеодииости ~3
Примечание2

Характеристики

Категория [портативный 3

"3
тип
Фирма (шва з
Ч | v/ilks Enterprise Inc 'У"«'.-- •-••*.
N° по каталогу
YSI incorporated
Г| 4.зние , fflf^»^^ •- ••'•"•К"™
АО "ЭКРОС"
Год по каталогу
ГЕОХИРАН
u ь| Нефть-Гаэ-Наука
Прим « н и е ! НПГГ'ЭКОНИКС
ОАО "Цвет"

Новый Новая Н овое назначение Удалить


Изменить
ТИП ?ирма прибора запить
запись
прибора

1-4 i | > | | > » | of 171


lL ^L
Рис 4 35

окно (см. рис, 4.39) В нем вы можете ввести следующие варианты ссылок
(Link To):
• Existing File or Web page (Существующий файл или страница Internet);
• Object in This Database (Объект текущей базы данных);
• Create New Page (Новая страница);
• E-mail Address (Адрес электронной почты).
В рассматриваемом примере вы имеете дело с уже существующим файлом кар­
ты (допустим, это Архангельская область). Он расположен по адресу:
С:\Мои документы\Мои рисунки\Архангельская областьЛос
Поэтому следует воспользоваться вкладкой Existing File or Web page (Суще­
ствующий файл или страница Internet). Указанный выше адрес вводится в поле,
к
УДа Access 2000 предлагает поместить данные: Type the file or Web page name (Вве­
дите имя файла или Web-страницы1). Ввести адрес можно с помощью либо клавиа­
туры, либо кнопки Browse for => File (Просмотр => Файл) на рис. 4.39. Тем самым
адрес включается в список, который раскрывается в этом же окне щелчком по стрел­
ке прокрутки и появляется в соответствующей строке поля Карта (см. рис. 4.38).
™eb, И'ш W W W ( W o r l d Wide W e b - Всемирная паутина), - совокупность всех гипертекстовых
( H T M L ) документов, которые размещены на серверах Internet
86 Создание форм новой базы донных

Рис 4 36

Если вы откроете теперь какую-либо форму, содержащую поле Карта, то обнару­


жите в нем такую же, как и выше, гиперссылку с теми же функциями (см. рис. 4.40)
Однако помните, что поле гиперссылки не создается в форме автоматически: его
надо включить туда с помощью мастера, конструктора и других уже известных вам
средств.
Итак, гиперссылка создана и введена. Обратите внимание на то, что гиперссыл­
ку можно создать из каждой записи в любой файл или его точку.
Если вы теперь поставите в поле гиперссылки указатель мыши (при этом кур­
сор примет вид указательного пальца) и щелкнете, то мгновенно переместитесь
в требуемый файл - в данном случае в карту Архангельской области, показанную
на рис. 4.36 Если вы хотите выйти в заранее заданную точку этой карты, то
предварительно следует открыть стандартную панель Рисование в программе
Word и пометить нужную точку Затем оформите ее как закладку и укажите имя
закладки в адресе гиперссылки, добавив символ #. Например-
С - \Мои документы\Мои рисунки\Архангельская область.doc#al
Здесь al - название закладки

Установка гиперссылки из карты в базу данных


Примерно так же можно построить и обратную гиперссылку - из карты в баз\
данных Сама карта в формате DOC уже является гиперссылкой (чтобы убедиться
Использование гиперссылок 87

Рис 4 37

в этим, достаточно открыть файл карты в Word и увидеть там курсор в виде указа­
тельного пальца). Она позволяет переместиться по любому адресу, если после­
дний включен в список, который раскрывается при щелчке по стрелке в поле Ад­
рес на панели инструментов. Вопрос только в том, как ввести нужный адрес в этот
список
Щелкните по уже знакомой вам кнопке <&| - Insert HyperLink (Вставить ги­
перссылку) В результате на экране появится другое поле с тем же названием
Пусть вас не смущает то, что в данном случае оно русское - Добавить гиперссыл­
ку (Дело в том, что карты конвертированы не в Access 2000, а в русифицированной
версии Word 97 ) В верхнее поле названного окна вводится адрес гиперссылки, ко­
торый обеспечивает переход в базу данных. Как и раньше, для этого есть два спосо­
ба набрать адрес с помощью клавиатуры либо выбрать его из списка, который от­
крывается при щелчке по кнопке Обзор. В нашем случае этот адрес будет таким:
С:\Мои документы\Мои рисунки\Архангельская область doc#Form ЧС
(Элемент Form ЧС предназначен для открытия формы ЧС непосредственно
п
Ри переходе по гиперссылке.) Теперь щелкните по кнопке ОК, и адрес будет вне­
сен в список, показанный в окне карты (см. рис. 4 42) Вновь, как и в предыдущем
Разделе, гиперссылка создана. Чтобы запустить ее, надо открыть список, найти ее
адрес и нажать клавишу Enter. Форма ЧС (см. рис. 4 40) откроется непосредствен-
110
и* карты Точно таким же способом можно открыть и таблицу.
88 Создоние форм новой базы данных

Q Microsoft Access
File Ed г View Insert ( : orrnat Records Tools Window Help

Ё^ aay X R5 IB
ъ + >X © £ • \2) .
Filel: Table шш
Нздизннд области
г Санкт Петербург
| Название города | Карта
САНКТ ПЕТЕРБУР С \Мои документы^! 1ои р и с у н к и У П р н и н г р ^ д г ы я о
J3
1
Архангельская область АРХАНГЕЛЬСК С \Мои д о к у и е н т ы \ М п ц рисунки' А р к я н г е л ы t а* оЬгпсть
Тюменская область
Калининградская область К А Л И Н И Н Г Р А Д (К
Коми ССР
Коми ССР
Республика Саха (Якутия ЯКУТСК
Калининградская область К А Л И Н И Н Г Р А Д (К
г Москва

Владимирская область
Ростовская область
Владимирская область
Московская область ДОМОДЕДОВО
г Москва МОСКВА
г Москва МОСКВА
г Москва МОСКВА
;old к |
Л I и |»»| of 846 _d ^
ЕГ
Рис 4 38

Insert Hyperlink
Link to 7>xt to drplaj/ | _ \f1on д . ументь! \Мги рисунки мр/анг^нь к^я ЯсгеепТ|С_

Tvpe th<=* file.or Web page name


I,MLM ДОК^ МРНТЫ\МИИ рисунги\Архангельская область doc

select Frcm li<* Ьгс A>se fcr


rile fffC /Мои%20документы/Банки%20даммыхи^. Fie
Recent
Q File-
tile jffC /Мои%20документы/Банки%20данных
С \Мои документы\Банки данных^Ы mdb#Fon Web PdQe
fil-= ///С /Мои%20документы/6 энки%20даннь

© Browsed СДМои документьцМои рисумки\Архангелы:ка


tile ///С /Мои%20документы/Банки%20даммых
\Мои документы\Мои рисунки\Ленинградо а
a Inserted \Мои документы\Бамки данных^Ы mdb#Tab
hie ///С /Мои%20 документы/Рис 1 doc
«tinls
<~ \Мои документы\Рис1 doc _*J Bookmark

Рис 4 39
Использование гиперссылок 89

В Microsoft Access HME


File Edit Vien1 In^ei t Format Rei-urd., Tools Window H-\p
v
£1 51 / -Й •* Й' © ?l

ГдШ
ВиаыЧС (10305

Наименован Обнаружение разлитии ртути е


здании Последствие Пострадавших нет

ДатаЧЭС 2/09/1935
Название го LAHKT ПЕТЕРБУРГ
Время ЧЭС 00 00
Карта С \Мои док4менты\Мои ри<
Название об г Санкт Петере чрг

Название pa г Санкт Петерб-ipr Р ы ^ ч р г с ш н р с

Пострадало и
Погиоло 0
Характерист В здании Парголовского
комитета по земельной
Материальн1
'•'•Ш
ecord н | -* | |~~ 1 » I >• l»»l of 84в J

Рис 4 40

Добавить гиперсеьику
Связать с файлом/URL
И
]С \М и дп| >мРнты\Еанки данных'|±1 гп±#Ригп Ч( | _^J Об^

о , ^ Еведите или выберите гт>ть к док МРНТ/ на котирый будет
p4J®1 у\ з ывать ссыпка ?то МОЧ'РТ быть адс^ Интернета (URL) или
* — документ на жестком или сетевом диске

|П/ть \£анки данныхИМ rndb#Form НС

Ймч объекта в документе ^ББПДИТЬ НРППД^ 3 ТРПЬН-И

Об^ор

, ,л ^а ЧтоЬы перейти к конкретному объе^ ту в джумрнте ('акладке,


* sЬ] именованному диапазон , объекту ба^ы данных или слайд у \,
надо указать имя зтого сегекта

| р Игполкдоеать для гиперссылки относительный п/ть

OV Отмена

Рис 4 41
90 Создание форм новой базы данных

IV Microsoft Word - Архангельская oojncTb.doc

Рис 4 42

Резюме
1. В отличие от таблиц, формы - это элементы, как правило, получаемые i
«на выходе» базы данных. Обычно они используются для получения oil''
тов на запросы пользователя. Но формы могут применяться для также ид
записи данных в таблицы и/или изменения этих данных при их вводе лп<
корректировке.
2. Для получения стандартных, типовых форм можно использовать автоформы
это очень просто, однако структура такой формы будет жестко привязана к <
ной или нескольким исходным таблицам. Несколько сложнее создание фор,\
с помощью мастера форм или конструктора, но в этом случае ее структура буд
значительно более гибкой и разнообразной
3. Содержание и структура формы изменяются в соответствии с запросами, к
торые формирует пользователь. Возможности форм значительно расшир
ются за счет использования гпперссылок (в частности включения географ
ческих карт), рисунков и др.
4. Для создания начальной формы БД удобно использовать конструктор фор
Начальная форма в базе данных играет роль одновременно титульного Л1Ь
та и оглавления в книге. Открыв эту форму и, следовательно, саму базу да!
ных, пользователь может затем выйти из начальной формы в любую необх<
димую точку БД.
Глава V
Создание отчетов новой
базы д а н н ы х

• Использование функции автоотчета


• Включение подчиненного отчета
• Группировка записей
• Статическая копия отчета

В Access 2000 отчет создается почти так же, как форма. Разница между этими дву­
мя объектами базы данных состоит не в технологии их построения, а в их целевом
назначении. Если с формой пользователь будет работать на экране, то отчет пред­
назначен для печати и представляет ценность как материальная копия документа,
полученного из базы данных.
Предусмотрены следующие стандартные способы формирования отчета (как
видите, они аналогичны способам построения форм):
• с помощью автоотчета;
• с помощью мастера;
! • с помощью конструктора;
• с помощью запросов.
Именно по указанной выше причине здесь рассматривается только формиро­
вание отчета с помощью аетоотчета, а также включение в отчет подчиненной фор-
1- Мы. Работа с запросами будет проанализирована в главе 9.
)- Однако в работе с отчетами все-таки есть свои нюансы. В отличие от форм,
с отчетами возможны следующие операции:
92 Создание отчетов новой базы данных

а создание и использование статических копий отчета;


• группировка данных в отчете.

Использование функции автоотчета


Отчет, созданный таким образом, будет отображать все поля и записи базово
таблицы или запроса.
В разделе Objects (Объекты) окна базы данных щелкните сначала по кнопке
Ш Reports! (см. рис. 5.1), а затем по кнопке New (Новый). На экране возникш i
окно New Report (Новый отчет), как показано на рис. 5.1. В окне надо выбран,
следующие параметры:
• способ построения отчета - в данном случае автоотчет, который можно i.
строить в одном из двух вариантов:
- Columnar (В столбец);
- Tabular (Ленточный);
Q таблицу или запрос, на основе которых будет создан отчет. В нашем слу
выбирается таблица Приборы, представленные на рынке, так как она с
держит максимум информации.
Задав эти параметры и щелкнув по кнопке ОК, вы получите заказанный ( i
чет в виде столбца, как показано на рис. 5.2. На рисунке представлена перв.1,
страница отчета. В действительности, если вы захотите его распечатать, он С'
дет расположен в соответствии с рис. 5.3, где показано несколько начальных
страниц отчета.

Включение подчиненного отчета


Рассмотрим эту возможность на примере хорошо знакомой вам пары таблиц
Страны (основная) и Фирмы (подчиненная). Создадим отчет на основе первоп
таблицы, а затем включим в него подчиненный отчет на базе второй.
Первую часть задачи вы решите с помощью автоотчета, как было рассмотрено
выше. Результат вашей работы показан на рис. 5.4. Сохраните полученный отче г
под именем Страны.
Теперь надо вставить в него подотчет Фирмы так, чтобы в итоговом документе
фирмы были сгруппированы по странам, в которых находятся.
Откройте только что созданный отчет Страны в режиме конструктора (Design
view).
Убедитесь, что кнопка vS\ - Control Wizard (мастера) - активизирована. За­
тем на панели управления конструктора щелкните по кнопке ш] - Subform/Sub-
report (Подчиненная форма/отчет). Теперь на поле конструктора в области дан­
ных Detail выберите точку, к которой следует «привязать» подотчет. Если в облас i ч
данных не хватает места, перетащите нижнюю рамку области данных вниз. Koi -
да вы определите нужную точку, на экране возникнет окно конструктора отчетов
(см. рис. 5.5), который сообщит вам: You can use an existing form to create
your subform or subreport, or create your own using tables and/or queries
Включение подчиненного отчета 93

New Report
Oei.ign View
Peport Wizaid

AutoReport: Tabular
Chart Wizard
llThi-j wizard automatically Label Wizard
fcreates a columnar report.

jhoose the table or query where


Приборы, предстаеленныа
Ъе obiect's data comes from:

OK cancel

Рис. 5. 1

(Для создания подчиненного отчета вы можете использовать существующую


форму или создать свою). Также конструктор поинтересуется: What data would you
like to use for your subform and subreport? (Какие данные вы хотите использо­
вать для подчиненного отчета?).

ы Microsoft Access - [Приборы, представленные на рынке2] ПШ2


а
• Оосе » - © J • 15) .

в Приборы, представленные на рынке2 ~3

Код |
Номер модели |:hed<er в

Категория fioj
Примечание I

Примечание!
\
Год но каталогу
1
Характеристики Карманный прибор фирмы HANNA6ea электрода с BNC-
эв J ъемом
2вмесгимлсть с широким спектром различны* рМ•
электродов
Диапазон иэмеренний 0-10 рН
Точность 0,2 рН
*J Питание батареи на 3000 час
Насев 52,6 г
5еэ электрода с BNC -разъемом
Z вместимость с ш ироким спектром различных рН-
электродов
Диапазон иэмеренний 0-1 ОрН
Точность 0,2 рН
Питание батареи на 3000 час
Насса 52,6 г

Цена 1$
Вес*г
Код тика

'•it:
Пвикч ание
i :^ffffflif''-\r "в" * "*• * А
Рис. 5.2
94 Создание отчетов новой базы данных

[м - a' Р и ш ш F,t - •_!_. - * • в а - © -

Рис. 5.3

Форма для подчиненного отчета у вас уже есть - Фирмы Subform, поэтом
используйте ее: Use an existing report or form. Если вы намерены создать со'
ственную форму, то выберите другую позицию: Use existing Tables and Queries
Теперь щелкните по кнопке Next, чтобы перейти в следующее окно конструктора
(см. рис. 5.6). Здесь вы должны ответить на вопрос: Would you like to define which
fields link your main form to this subform yourself, or choose from the list below?
(Вы хотите сами задать поля, которые будут связывать основной и подчиненный
отчеты, или выбрать эти поля из приведенного ниже списка?).
В поле, где показан этот список (он включает две позиции), выберите опцию
Show Фирмы for each record in Страны using Код (Показать Фирмы для каждой
записи таблицы Страны, используя Код). Если теперь вы щелкнете по кнопке
Finish, то вернетесь в область данных конструктора, но с дополнением в виде под­
чиненной формы. Чтобы взглянуть на окончательный вариант отчета, вам остает­
ся сделать последнее усилие, то есть щелкнуть по кнопке Bt»| - View (Просмот р)
Группировка записей 95

В Microsoft Access шш

IS Страны шшJ з
Страны
AM |33 |
Страна pSA |
Примечания | |
AM И |
Страна |Германия |
Примечания \ \
Код р5 |
Страна |италия |
Примечания \ \
Код |зе |
Страна росейя |
Примечания
Код
Page _ Ы | ~ •• I ' I A £
ы
РИС 54

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


иерархическую структуру, показан на рис. 5.7.

Группировка записей
Приведенный выше отчет с его структурой является также одной из форм орга­
низации записей. Однако группировать данные можно и более привычным спо-
сооом, то есть с помощью мастера отчетов. Его запуск и начало работы осуществля­
ется почти так же, как аналогичные действия при использовании мастеров таблиц
и
форм. Разница состоит в том, что для запуска мастера отчетов в разделе Objects
(Объекты) окна базы данных надо щелкнуть сначала по кнопке д Reports |, а за­
тем по кнопке New (Новый). Но в окне New Form (Новая форма), которое по-
Яв
ится на экране (см. рис. 4.1), теперь надо активизировать опцию Report Wizard
(Мастер отчетов). В нижнем поле того же окна New Form вы можете выбрать таб-
Ли
Чу; она станет первой из тех таблиц, на которых будет основан создаваемый
96 Создоние отчетов новой базы данных

Sub Report Wizard


You can use an existing form to create your subform or subrepott, or
create your own using tables and/or queries

What data would you like to use for your subform or subreport"'

<~ Use existing Tables and Queries

<* Use an existing report or form

Назначение
Приборы
Form
Form
J
Страны Form
Страны 1 Form
Типы Приборов Form
Фирмы Form
; Фирмы Subform Form •
Экологические приборы Form
1
Cancel Next > Finish

Рис 5 5

Sub Rep art Wizard


Would you like to define which fields link, your mam form to this
subform yourself; or choose from the list below?

^ Choose from a list. Define my own

iShow Фирмы for each record in Страны usina Код


None

• 1 Щ

Cancel <Back Next: Finish

Рис 5 6

отчет. Правда, мы все-таки советуем сделать это в следующем окне, так как в не^
можно выбрать поля более, чем из одной таблицы. Наконец, и при выборе полеи
включаемых в формируемый документ (см. рис. 4.4-4.5), начальные этапы рабо­
ты те же, только везде вместо формы речь идет об отчете. Действительно важные
Группировка записей 97

ШШ
g - <Э Р О Ш Щ 'О00'» - Close ИГ , g ] j . P7| .

g Страны шш
73
Страны

Код "К
Страна [.ISA
1

Примечания 1 1
• Рир\<ы Sub farm
Код ср и р м ы Н асеание Ф и р м ы У од с т р а н ы Адрв!

02 j 1 Ь 1 ir i с с I р о F a i e d |м3 felloe
Ohio '
USA -
Fax 5

|Гп|е Farmer luteinaNonal |иЗ Г425


Fax (

г nlltech •[07- 2051


Deerf
FAX

Ал?
Страна Германия

Примечания
Р^е _df i>'i j

РИС 57

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


будет сформирован отчет.
Этот этап показан на рис. 5.8. Вы должны ответить на вопрос: How do you want
to view your data? (В каком виде вы хотите представить данные?). Советуем вы­
брать не основную форму, то есть Страны, а подчиненную - Формы. В против­
ном случае при группировке данных вам придется представлять их в виде вло­
женного отчета (см. рис. 5.7).
На следующем шаге (дальше мы уже не будем напоминать, что к каждому но­
вому этану работы вы переходите с помощью кнопки Next) мастер спрашивает:
Do you want to add any grouping levels? (He хотите ли вы ввести уровень группи­
ровки?). Этот этап отражен на рис. 5.9. Естественно, вам следует щелкнуть по
кнопке > | и ввести Страны как первый уровень группировки. На очередном
Ша
ге (см. рис. 5.10) мастер уточняет: What sort order do you want for detail
re
cords? (Как вы будете сортировать записи внутри данных по каждой стране?).
4
- 119
98 Создание отчетов новой базы данных

Report Wizard
How do you want to view your
ddtd" Код, Страна, Код фирмы, НазЕание
фирмы, Код страны
by Страны

*i Show me more information

Cancel < Вьск (Jo t Finr-h

Рис 5 8

Report Wizard
Do you want to add any grouping
levels"'' Страна

Код, Код ф|ирмы, Название фирмы,


Код страны
Код
_lJ
Название фирмы
Код страны

Priority

IGrouping Options . Cancel <Васк Next > Fmrh

Рис 5 9

Вы можете ввести до четырех уровней сортировки по возрастанию (Ascending)


или по убыванию (Descending). Задайте сортировку по полю Название фирмы
(оно находится в списке, который открывается при щелчке по стрелке прокрутки
в правой части поля) на рис. 5.10. По умолчанию принимается сортировка по
Статическая копия отчета 99

Report Wizard
What sort order do /ou wunt fnr detail recoids?

i You can sort records by up to hour fields, in either


ascending or descending order

1 Hd.EdHUe фирмы
~3 Ml
~3 ill
U
-3 J

Cancel ;Back Next > Finish

Рис 5 10

возрастанию; в этом случае текстовые значения сортируются от А до Z, цифровые -


от 1 до 9. Однако в целом порядок сортировки не имеет здесь решающего значения,
если у вас нет каких-либо специальных предпочтений. Отметим только, что задан­
ное вами поле Название фирмы становится вторым уровнем группировки.
Итак, вы сообщили мастеру свои принципиальные решения по организации
структуры отчета. На следующем этапе работы можно заняться внешним пред­
ставлением данных (см. рис. 5.11).
Теперь мастер поинтересуется: How would you like to lay out your report? (Как
вы хотите расположить данные в отчете?). С помощью переключателя на рис. 5.11
вы можете выбрать различные варианты представления данных в разделе
Layout (Компоновка): книжное или альбомное расположение страницы (оп­
ция Orientation), способ размещения данных по ширине страницы (флажок в ниж­
ней части окна). При этом в поле окна вы сразу видите, как будут выглядеть ре­
зультаты ваших действий.
Затем пропустите промежуточные окна, то есть определение фона и шрифта,
и выберите имя для отчета: назовите его Фирмы. В результате вы получите окон­
чательный вариант первой страницы отчета, как показано на рис. 5.12.
Таким образом, данные сгруппированы, и отчет готов к печати.

Статическая копия отчета


Возможность создавать Snapshot (Статическую копию отчета) появилась только
в
версии Access 2000. По сути, это фотография отчета - файл с расширением snp,
к
°торый содержит копии каждой страницы отчета, сформированного в Access 2000,
Двумерных графиков, чертежей и других элементов, включенных в отчет. Такой
100 Создание отчетов новой базы данных

Report Wizard
would you \\\ё to la/ out /our report'

La,out Orientation

f~ Stepped <• Portrait

Г Block <~ Landscape

XK--K'-. <•" Outline 1


xxxxxxxxx
•^ Outline I
xxxx xxxx xxxx xxxx
хжхх хкчхх хжхх xxvxx <" Align Lett 1
xxxxx xxxxx xxxxx xxxxx
XXXXX XXXXX XXXXX XXXXX <~ Alian Left:-
XXXXX XXXXX XXXXX XXXXX
XXXXX XXXXX XXXXX XKXXX
XXXXX XXXXX XXXXX XXXXX
XXXXX XXXXX XXXXX XXXXX

j p Adiust the field width so all fields fit с


a page.

Cancel <Bacl Next > Finish

Рис 5 11

файл можно просматривать, печатать, посылать по электронной почте, рассылав


по сети и архивировать, уже не работая непосредственно со средой Access 2000.

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


Для манипуляций со статической копией отчета в Access 2000 предусмотрен мо|
дуль Snapshot Viewer (Просмотр снимка), версия 9.0. Он включает управлякшп'к
программу (Snapview.ocx), справочный файл (Help) и другие связанные фап i i
Модуль Snapshot Viewer можно загрузить посредством программы Setup и i
установке Office 2000 или Access 2000, а также с помощью сетевых программ. Е<
это не было сделано, то Snapshot Viewer автоматически устанавливается в Access Ъ'
в тот момент, когда пользователь в первый раз создает статическую копию отчета
Управляющую программу Snapview.ocx можно использовать для просмотра ста­
тической копии отчета из Microsoft Internet Explorer (версия 3.0 и более поздние
редакции), а также из приложений, работающих с языком Visual Basic.

Преимущества использования
Если вы печатаете и рассылаете отчеты Access пользователям внутри или за пре-
делами своей организации, то использование статических копий может суще­
ственно сберечь время и деньги. Теперь вы можете отправлять и публиковать отче­
ты посредством электронной почты или Web-браузера, например Microsoft
Internet Explorer. Ваши деловые партнеры, в свою очередь, смогут быстро про­
смотреть отчеты в сети и напечатать только те страницы, которые нужны. Это осо­
бенно полезно, если в отчетах содержатся изображения, в частности, цветные (Д<1
пустим, диаграммы и рисунки).
Статическая копия отчета 101

13 Microsoft Access ЩЩ]


D о£ У <sfr Qi ч
^ -a i Р О Ш |00"о - ! Close I W - © а - ! (3 - '
|п|х| J

Фир.пы •

,,,., ,.„„*-:»-.«> ,-,,-,«, -. ., VH°. >"*,JWbt l > " 4 . i ' . v

Страна United Kingdom


Название фирм Код Код фирМЫ Код страны
Randox Laboratories, 02 05 02

Страна USA
Название фирм Код Код фирмы Код страны
Alltech 03 11 о:,
Cole-Parmer Internatio 03 07 03

YCI incorporated 03 02 03

Страна Германия
Название фирм Код Код фирмы A'cd страны
SENSORTECHNIK M 04 19 04

Страна Италия
Название фирм Код ЛЪд фирмы Ас'-З страны
AM E L 1 nstrument s 05 17 05

Страна Россия
1 • 1 " 1 «1 J ^ .1
.1
РИС. 5 12

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


и регулярно рассылаются: например, еженедельные отчеты о движении товаров
на складах, ежемесячные отчеты о продажах, ежеквартальные финансовые доку­
менты и т.д.

Создание статической копии отчета


Предположим, требуется создать в Access статическую копию отчета Приборы
(см. рис. 5.13).
В Access 2000 такая процедура рассматривается как разновидность экспортной
операции. Процесс состоит из нескольких этапов:
1- В окне базы данных выбрать и пометить название отчета, копию которого
надо создать. В данном случае это Приборы (см. рис. 5.14).
102 Создание отчетов новой базы данных

В 0. Е<* Y«w Iools

Приборы
Наивр пахали
5>ucl(Ch»ck 106

VepftKTfpK^rVKK
i 14 t К p*ii«LrtHM; 0,1 рН яэчкэсп 0 1 рН, температурккл момп*м:иоа, б*т*рвя 100 члссл

Dec, кг Прнбори.Ко! ткяа Приборы К о д ф к р л ы


51 26
1* ял каталогу
"ПМЭО

Lo»L»p К о х Ф м р п и К о 1 ф м р н ы Loo Lap Код тхм.РСод тшиа


'16 01

Нол«р к одел к
МовегабЮ

Чяршаерхсгккк
T y w i V рН ме-ттЛтермометр с к е с к к п ж о а т электродом

Вм.кг Прлборы.Код т к я я ГСриборы.Код ф м р п ы


01 26
J * e o каталогу

*Ш1 Г... ±iJ A

Рис 5 13
I J
В Miciosoft Access - [db5 : Database]
ОпШ
В . Preview Н Design Ц New i X \ £fl > •:•:

12 J Create report in Design view


0J Create report by using wizard

Р и с 5 14
Резюме 103

2. В строке меню выбрать File => Export.


3. В появившемся диалоювом окне Export Приборы As (см. рис. 5.15) выйти
в окно Save As Type (Сохранить как тип) В нем выбрать опцию Snapshot
Format (*.snp)
4. В окне, которое расположено справа от окна Save in (Сохранить в), выбрать
диск и папку, где будет сохранена копия.
5. В окне File Name (Имя файла) указать название создаваемой копии.
6. Щелкнуть по кнопке Save (Сохранить)
Созданная статическая копия отчета представлена на рис. 5.16 (показана лишь
часть страницы). Файл копии полностью соответствует оригиналу (ср. рис. 5.13),
но обратите внимание, что копию можно просмотреть уже только в окне Snapshot
Viewer

Expoit Report Приборы As на


* J Избранное
zj *• a ® >' CJ Ш - Tool*
J Links
J Media
ll Каналы
J Обновление приложений
Ссылки
^_)Мои документы

File name: |приборы|


3I В s*
ave as type Snapshot Foimat (» snp)
~3 W Autostart Canrel

Рис 5 15

Резюме
1. В Access 2000 отчет создается почти так же, как форма. Разница между эти­
ми двумя объектами базы данных состоит не в технологии их построения,
а в их целевом назначении Если с формой пользователь будет работать на
экране, то отчет предназначен для печати и представляет ценность как мате­
риальная копия документа, полученного из базы данных.
2. Отчет, созданный с помощью автоотчета, будет отображать все поля и запи­
си базовой таблицы или запроса. Так же, как и в случае с формой, такой от­
чет наиболее прост в построении и наименее гибок по своей структуре.
104 Создание отчетов новой базы данных

W Snapshot Viewer - Приборы.inp


File View Window hjelp

I j g Приборы, snp
ШШ 3
3
Приборы
J
Ноле-р лод&лм
"/uickChed. 106

Чярак-гврксткл'м
]-14 pH, рза решимте: 0,1 pH. т а ч ю с п 0,1 pH, температур нал компенсация, Батарея ICO «ЬСОЕ

Bec.icr Прхборы.Кол ткна Прмборы.Кохфхрпы


л 26
№ до каталогу
ЭЮЙОй

Г лл1«п Ь*лт rfiwnviu Ь* г» ¥ s h v n n u T nnL-и n I T A I TV • а Ь*п v x v ad zi


нЫГ~1 >|н|В| <| I _•]

For Help, press F1

Рис 5 16

3. В первичный отчет Access 2000 позволяет включить подчиненный отче


в рамках которого записи могут быть отсортированы на втором уровне груп­
пировки. Но этот подчиненный отчет может быть создан уже с использо
ванием конструктора отчетов, хотя саму группировку записей допускается
выполнить и с помощью мастера отчетов. Наиболее гибкую структуру отче­
та позволяет получить конструктор отчетов.
4. В версии Access 2000 появилась новая возможность - создать Snapshot (Ста­
тическую копию отчета). По сути, это фотография отчета - файл с расшире­
нием snp, который содержит копии каждой страницы отчета, сформирован­
ного в Access 2000, двумерных графиков, чертежей и других элементов,
включенных в отчет. Такой файл можно просматривать, печатать, посыла1Ь
по электронной почте, рассылать по сети и архивировать, уже не работая
непосредственно со средой Access 2000. В Access 2000 такая процедура рас­
сматривается как разновидность экспортной операции.
Глава V I
Создание страниц
доступа к данным

• Свойства страниц доступа к данным


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

Страница доступа к данным (Data Access Page) - файл особого типа, создан­
ный для работы с данными из Internet или Intranet н для их просмотра. Вооб­
ще Data Access Page - одно из нововведений в Access 2000. Страница доступа
загружается в базу данных Access 2000 или базу данных SQL-сервера, но мо­
жет также создаваться и загружаться за пределами Microsoft Access. Data Access
Page иногда включает данные из других источников - например, из Microsoft
Excel. Кроме того, страница доступа к данным может использоваться при ра­
боте непосредственно в базе данных или проекте, создаваемом с использова­
нием Access 2000.

Свойства страниц доступа к данным


Традиционные формы и отчеты Access применяются для отображения, редактиро­
вания и подготовки отчетов по тем данным, которые хранятся в локальной, настоль­
ной системе пользователя. Как вы уже знаете, создавать такие объекты позволяют
специальные мастера (например, мастер форм и мастер отчетов), автоматически
включая в формы и отчеты заданные пользователем стили и элементы формати­
рования. Формы и отчеты сохраняются в файле базы данных с расширением mdb,
после чего их можно просматривать с помощью интерфейса Access.
106 Создание страниц доступа к данным

Страницы доступа к данным (Data Access Pages) тоже обеспечивают доступ


пользователя к данным и работу с ними, но, кроме этого, позволяют вести поиск
и структуризацию данных в информационных сетях. Фактически Data Access
Pages выступают в роли форм и отчетов Access для Internet. При работе со стр ,
ницами доступа к данным не надо преобразовывать их формат, поскольку Da
Access Pages - это HTML-файлы 1 . Они создаются с помощью Access, но работа к
в браузере Internet Explorer.
По своим функциям страницы доступа к данным очень похожи на классиче<
кие формы и отчеты. Понятно, что и процесс подготовки этих страниц практп
чески не отличается от технологии построения формы или отчета. Для созданп'1
страниц доступа к данным в Access 2000 есть специальный пакет - Data Access
Page Toolbox. В нем пользователь найдет и инструментарий, хорошо знакомы и
разработчикам форм и отчетов, и новые средства, которые специально предна­
значены для создания страниц доступа к данным в Web-среде. Нужный инстр\ -
мент легко выбрать с помощью курсора. Как и другие стандартные наборы инстр\ -
ментов, Data Access Page Toolbox доступен из меню View. Когда вы начинаем
строить страницу доступа к данным, Data Access Page Toolbox выводится п<>
умолчанию.
На рис. 6.1 показан пример страницы, которая создается для ввода данных в ре­
жиме конструктора. Вводится запись Products (Изделие), содержащая сведения
о коде изделия (Product ID), его наименовании (Product Name), имени фирмы
(Company Name), цене за единицу продукта (Unit Price), скидке (Discontinued)
Э Product»: Dttt Access Page
Заголовок \ Products
страницы
Header Products

Product 10 j

Product name j
Заголовки
групповых Company Hame
J
полей Unit Price |
Discontinued Г"

NevKjalic-nSecliori Products
Поле
номера J j Pioduc[s|0 ot|2

записи

Рис 6 1

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


ной базой данных Access 2000, все-таки их основное назначение - обеспечивать
просмотр, редактирование и составление отчетов в рамках Internet Explorer. Data
Access Pages имеют ряд новых Web-функций и поддерживают перетаскивание
объектов. По сути это HTML-страницы, которые содержат динамические ссылки
на данные (иными словами, данные «связываются» со страницей). В отличие ог
традиционных форм и отчетов, Data Access Pages сохраняются не в файле базы
данных (с расширением . mdb), а в отдельных HTML-файлах. Это позволяет легко
Hypertext Markup Language (Язык разметки гипертекста) - язык, на основе которого формируются
Web-страницы.
Страницы доступа к сгруппированным данным 107

пересылать страницы доступа к данным по каналам электронной почты и разме­


шать на Wcb-сервсрах.
В Access 2000 можно открыть любой НТМ L-файл с помощью конструктора Data
Access Pages, а затем добавить в этот файл поля - ссылки на данные. Также кон­
структор позволяет формировать страницы доступа к данным. Рабочая область кон­
структора создастся с помощью Internet Explorer и использует такие хорошо зна­
комые вам средства, как таблицы свойств, списки полей, наборы инструментов
и мастера.
Каждый объект базы данных создается для определенной конкретной цели.
Ниже, в табл. 6.1, обобщены сведения о том, пригодны ли различные объекты
Access 2000 для достижения тех или иных целей. Позиция «Да» означает, что ис­
пользование данного объекта по определенному назначению является оптималь­
ным решением, «Нет» - недопустимым, «Да/Нет» - возможным, но не лучшим.
Табпица 6. /

Форма Отчет Статическая Страница


копия отчета доступа к данным
Ввод, редактирование и обмен инфор­ Да Нет Нет Да
мацией в пределах БД ипи проекта
Ввод, редактирование и обмен динами­ Нет Нет Нет Да
ческой информацией через Internet/
intranet за пределами БД ипи проекта
Печать данных для распространений Да/Нет Да Да Да/Нет
Распространение данных Нет Нет Да (ста"
(статические Да (динамические
по электронной почте данные]

Основные типы страниц доступа к данным:


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

Страницы доступа к сгруппированным данным


Страницы доступа к сгруппированным и динамически связанным данным откры­
вают перед пользователями совершенно новые возможности работы с информа­
цией с помощью единого HTML-интерфейса. Благодаря этому группы взаимосвя­
занных данных легко просматривать и управлять ими. Например, можно создать
страницу доступа к сгруппированным данным, где будут отражены объемы про­
даж по регионам для разных торговых представителей. Интерактивный характер
ст
раннц доступа к данным позволяет не только получить итоговые сведения по
конкретному региону, но и собрать при необходимости более подробную инфор­
мацию
108 Создание страниц доступа к данным

Практическое применение страниц доступа к данным рассматривается ниже


при работе с новой БД.

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


Из табл. 6.1 видно, что для взаимодействия Access 2000 с окружением страницы
доступа к данным значительно полезнее, чем статические копии отчетов. Если
последние, в соответствии с названием, применяются лишь для рассылки стащ-
ческнх данных, то страницы доступа к данным используются для ввода сведении
и их редактирования, для передачи данных внутри БД/проекта, для информаци­
онного обмена Access 2000 с внешним окружением и для оперативной связи но
электронной почте.
Здесь мы подробнее рассмотрим, как эти страницы помогают осуществлять ин­
формационное взаимодействие с внешним миром. В качестве примера возьмем тип
страницы доступа к данным, предназначенный для их ввода и корректировки.

Страница доступа к данным: ввод данных


Выше уже говорилось, что такая страница доступа к данным в Access 2000 очень
напоминает форму для ввода данных. Уместна и другая аналогия: форма - стра­
ница доступа к данным, отчет - групповая страница доступа к данным.
Однако ни форма, ни отчет не могут (см. табл. 6.1) использоваться для пере­
сылки информации ни в Internet/intranet, ни по электронной почте. Как на самом
деле выглядит страница доступа к данным, показано на рис. 6.2.

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


Для создания новой или открытия уже существующей страницы доступа к дан­
ным на компьютере должен быть установлен Internet Explorer 5.0 или более
поздней редакции.
Сформировать страницу доступа к данным можно одним из следующих способов:
• с помощью Auto Page (Автостраница);
• с помощью Page Wizard (Мастер страниц);
• в режиме Page View (Конструктор страниц).
Открыть уже существующую страницу доступа к данным можно:
Q в режиме Page View;
а в Internet Explorer.

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


в режиме автостраницы
1. В окне базы данных (см. рис. 3.1) выберите опцию Pages (Страницы) в раз­
деле Objects (Объекты).
2. Щелкните по кнопке New (Новый) на панели окна базы данных. На экране
появится окно New Data Access Page (Новая страница доступа к данным),
как показано на рис. 6.3.
Использование страниц доступа к данным 109

И Microsoft Л е с е » ШШ
I Fill? Edif View Insert Format Tools Window Help

' U Страны 1

Фирмы

Код фирмы 02
Название фирмы YSI incorporated
Код страны 03
Адрес Yellow Spring
Ohio 453S7
USA
Fa*' 513 767 9353
Адрес 2

Примечания

Страна USA

*«,"' '•" ••/ Fi!


_" «L Ф1 ipi it = I W I : 1 of 26 • И

Рис 6 2

3. В этом окне задайте последовательность команд AutoPage => Columnar (Ав­


тостраница => По колонкам).
4. Укажите, какая таблица или запрос содержит информацию, которую нужно
вывести на страницу.
5- Щелкните по кнопке ОК. Если в предыдущем пункте вы выбрали базовой
таблицей Фирмы, то в результате получите страницу доступа к данным,
представленную на рис. 6.2.

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


с помощью мастера страниц
Мастер страниц обладает достаточно широкими возможностями. Мы подробно
рассмотрим их на конкретном примере.
1. В окне базы данных выберите опцию Pages (Страницы) в разделе Objects
(Объекты).
2. Щелкните по кнопке New (Новый) на панели окна базы данных. На экране
возникнет окно New Data Access Page (Новая страница доступа к данным),
выведенное на рис. 6 3. Теперь переходите к шагу 3. Вместо кнопки New мож­
но активизировать опцию Create data access page by using wizards (Создайте
по Создание страниц доступа к данным

New Data Access Page

Existing Web page


page Wizard
AutoPage. Columnar

Create a ne1».1 data access


page without using a '/jizat d I

Choose the table or quer) where


the object's data comes from.

OK Cancel

Рис 6 3

страницу доступа к данным с помощью мастера). В этом случае переходите


сразу к этапу 5.
3. В окне New Data Access Page выберите опцию Page Wizard (Мастер страниц)
4. Выберите таблицу или запрос, где содержится та информация, которую сле­
дует вывести на страницу.
5. Щелкните по кнопке ОК. В результате появится окно Page Wizard (см
рис. 6.4).
6. Выбрав таблицу, вы можете перенести поля из нее в будущую форму с поме
щью кнопки > I (перемещение одного поля) или » I (перемещение ера i

Page Wizaid

Which held-: do you want on your page 7

Vou can choose from more than one table or query,

Tables/Queries

|ТаЫе Страны
ГЗ
Available Fields: Selected Fields'

К О Д фирмы
Примечания Название фирмы
К О Д страны
Адрес
Адрес 2
Примечания

Cancel Next > Finish

Рис 6 4
Использование страниц доступа к данным 111

всех полей). В нашем примере на страницу перенесены все поля из таблицы


Фирмы и поле Страна из таблицы Страны. Таблица Страны вызывается из
вкладки Tables/Queries (Таблицы/Запросы) после того, как вы разобрались
с полями из предыдущей таблицы Фирмы.
7. Щелкните по кнопке Next.
8. На экране вновь появится окно Page Wizard. В его правой части показаны
перенесенные вами поля, а в левой - поля, по которым вы можете упорядо­
чить расположение данных на странице. Выбор и фиксация этих полей про­
изводится аналогично предыдущему. Раскрыв вкладку Priority (Приоритет),
вы выбираете те критерии, по которым будут группироваться данные. В на­
шем примере это страна и название фирмы (см. рис. 6.5). Если вы не собира­
етесь пока структурировать информацию, щелкните по кнопке Finish (За­
вершение). В этом случае на экране возникнет форма в режиме конструктора
(Design View), как показано на рис. 6.6. Если размеры и расположение по­
лей вас устраивают, то щелкните по кнопке View (Просмотр). Появится
страница доступа к данным, которую вы уже видели на рис. 6.2. Процесс
создания страницы доступа к данным закончен. Возможно, вы захотите
внести в страницу какие-то коррективы. Это можно сделать как раз в ре­
жиме конструктора, о чем будет сказано чуть ниже. Пока же отметим самое
важное: если на настоящем этапе работы вы не воспользовались возмож­
ностью упорядочить данные, то какие бы правки ни вносились в форму в ре­
жиме конструктора, общая структура страницы сохранится неизменной.
Листать ее вы сможете только по фирмам, и переход к другой стране будет
происходить лишь тогда, когда вы будете просматривать данные по другой
фирме.

Page Wizard

Do you want to add any grouping


levels' Adding gioupmg levels
result in a read-only page
Название фирмы
^од фирмы
ВШ ^J КОД фирмы, Код страны, Адрес,
Адрес 2, Примечания

Priority

Grouping Options ,. Cancel <Back Next > Finish

Рис 6 5
112 Создание страниц доступа к данным

В Microsoft Access шш
I
File Edit Vie"' In nt Format Tools Windnw Hr-lp

m - у rf • ^ _' • в # [g [f
Normal - Tahnrna -r lu - В I U ЦЕ Д
1
1 ' — — • ——

| l 3 P a g e 7 : Data/ • .iDlxl

Headei CDhpMblWlZ j
Код ф| Plltl
Назван ie фирг 1Ы
Код ст )ЗНЫ
Адрес

Адрес

Примем анич

• i i >

Стран;
. . . I I I I
Navigat lonSect on: <t* pubiWiz
I
• | C'MpHfclWlZ | O o f 12 »
I ~l ~ \~ I i I I I ^)
<l I
.4 l>
Рис 6 6

9. Теперь щелкните по кнопке Next и перейдите к следующему шагу, который


показан на рис. 6.7.
10. мастер страниц предлагает рассортировать данные по определенным парамет­
рам (кодам). Максимальное количество параметров, по которым можно про­
вести отбор, равно 4. В нашем примере сортировка производится сначала по
коду страны, а затем по коду фирмы. После этого снова щелкните по кнопы
Next.
11. На последнем этапе работы мастер страниц предлагает вам выбрать одну из
двух опций (см. рис. 6.8): Open the page (Открыть законченную страницу)
или Modify the page's design (Перед просмотром внести в страницу какие-
либо изменения в режиме конструктора). В последнем случае мастер пред­
лагает дополнительную возможность: Do you want to apply a theme to your
page? (Хотите ли вы использовать различные варианты оформления стра­
ницы?) Имеются в виду цвета и фоновый узор Если вы согласны, устано­
вите флажок в соответствующей ячейке. После этого вам будет предложена
Использование страниц доступа к донным 113

Page Wizaid
What sor* order do you want for detail records 7

\ o u can sort records by up bo four fields, in either


xxxxxxx ascending or descending older

[ 1
1 t- пд странь!
~3 ill
1 IZH 1 1<C
1=1
1
2 If ид фмрмы|
"3 Ji]
1 1 1 ] Jjj
1 1«
а1 = ] Ii 1=1
1 •3] J

ш
Cancel <Eack Next > Finirh

Рис 6 7

1 Page Wizard

What title do у ou want fur your page 7


J(Wb
[IlTpbHtl
\^ ^
&
»i.

9". That's all the information the wizard needs to create ^our
"3 page

r Do you want to open the page in Access, or modify the


page's design 7

(" Open the page.

(•" Modify the page's design

f Do you want to appl/ a theme to your page'

Г Display Help on working with the page 7


-- - -- -

Cancel < Back Finish

Рис 6 8

еще одна опция: Display Help on working with the page (Вывести на экран
справку, связанную с обработкой страницы). Модификация страницы в ре­
жиме конструктора представлена на рис. 6.9. Сделав выбор, щелкните по
кнопке Finish.
114 Создоние страниц доступа к данным

В Microsoft Access • |Page7 : Data Access Page) Н И В

I \ АЛ аы D <= ^ И ЕВ _i п га \ • '

^ File £dil V'w Ir-,tri- Fjrrnar Т-ю1, V_ir d J * н-lp _ \fl\xj

Headmg I - Ы" r a - 2-t - В / U E 5 31 *^ *^ |= •= S* - A -


Header Страны Страна | *|

•i&sri '. , . , 1 1 1 i i i i i i i i i,
Header 1 Страны
.1 Название фирмы
'ofOUpO»fLTp.aH|:l | 1 [ I 1 1 1 i l l'.'I
| _Ф]| | HaiEdrine фирк 1 I 1 1 I I 1 ! I 1 I 1 I I
Header ФирмыУЛг f\ \
К|эл4ир||ы |
гфд страны |

*арес

А арес 2

Г нимеча 1ИЯ

Navtqat onSect on Фир MblWl2 Ф\ 1


H * | -I-upMbiWc 10 j l o f 12

Navrga* onSection Страны Название фирмы г. J

и ?
H < | Страны Название фирмы 10 j 1 of 12 • И > * »>' * '"'
i i г i I i l i i
* ' 11
Navigat on5ect on Страны Страна
I -
РИС 69

Законченная страница доступа к данным выглядит так, как показано на рис. 6.10
Внимательно изучите рис б 10 и сравните то, что на нем изображено, с вложен­
ными таблицами и формами, которые обсуждались в главе 4. Как видите, упоря­
дочив и отсортировав информацию с помощью мастера страниц, вы получили
вложенную страницу доступа к данным. В самом деле, слева от окна Страны рас­
положен значок <Q>|. Он уже знаком вам по вложенным таблицам. Если щелкнуть
по этому значку, запись Страны раскроется, и слева от окна появится другой зна­
чок - сз|, а также новая запись - Название фирмы (см. рис. 6.11).
Как вы уже знаете, «плюс» указывает на присутствие скрытой записи, а «минус >
сообщает, что она развернута. Щелкнув еще раз по значку ф|, вы получите полно­
стью раскрытую страницу (см. рис. 6 12). Если щелкнуть мышью по значку ==•]
можно свернуть страницу, и она будет выглядеть так, как показано на рис. 6.10.

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


в режиме конструктора
Выше мы рассмотрели создание страницы доступа к данным с помощью AutoPagc
(Автостраницы) и Page Wizard (Мастера страниц), которые позволяют достаточ­
но легко и быстро выполнить эту работу. Еще один распространенный способ
Использование страниц доступа к данным 115

Ш Microsoft Access шш
File Edit View Insert Format Took- Vjnduw Help

111 Страны шш

I GroupOfСтраны- |umted Kmqdom


v | Страна

14 4 I Страны-Страна 1 of 10 и >*»(*y>'$l'il'Z'Y

Ы
Рис <5 10

Ы Microsoft Access 1ШХ]


File Edit View Insert Format Tui-.L Vundiw Help

ku ' 0 c3i
| ^ Страны H-lnlx

. , йгоирОгСтраны- (united Kingdom


R:l Страна
, GroupOtCTpaHbi- |Randox Laboratories, Ltd
_vil Название фирмы

И < | Страны-Название фирмы 1 of 1 '<• •'to'-'


и < | Страны-Страна 1 of 10 • И " . ,

«1

Рис 6 И

создания страницы - использование конструктора С нашей точки зрения, конструктор


Действительно нужен тогда, когда требуется внести какие-либо исправления, о чем
шла речь в предыдущем разделе. А вот создание страницы посредством конструк­
тора - не самое рациональное решение. Тем не менее рассмотрим и такой вариант.
Чтобы войти в режим конструктора, надо открыть окно базы данных (см. рис
•J1), выбрать опцию Pages в разделе Objects и выполнить одно из следующих дей­
ствий:
• активизировать опцию Create data access page in Design view (Создать
страницу доступа к данным в режиме конструктора);
116 Создание страниц доступа к данным

( У Micro t o l l Access

| File Edit \_icw Insert For mat Tools Window Help

: ';./-. - « | B dj J
м- У rJ ai ' e, -*!'
| ' j j Страны
шт ШЕШ*

, , , GroupOfCTpaHbi- lunited Kingdom


=>! Страна
. - GroupOfCTpanbi- |Randox Laboratories, Ltd
^l Название фирмы
Код фирмы 05
Код страны 02
Адрес Diamond Road, Crumlin, Co Antrim, BT29 4QY
Fax 44 1849 422413

Адрес 2 Галкин В А
Ten 265 44-05

Примечания

gjj < | ФирмыW12 1 Of 1 • »i i ^ - >'Л *•* _;. v i V Cj} I _J

К <| Страны-НазЕднпe фиг. ты 1 rf l >, i. • K< s • ''i* ^|ЩР^ V (31


f
K < | Страны-Страна 1 of 10 • м >'* •\;, /o ^i
«1 Tf 1 •!

Рис <5 / 2

• щелкнуть по кнопке Design на панели окна базы данных;


• щелкнуть по кнопке New на панели окна базы данных, а затем выбрать оп
цию Design view.
В любом случае на экране появятся (см. рис б 13) пустой бланк страницы и па
нель инструментов (Toolbox) с набором кнопок, которые предназначены для до
бавления и настройки информационных элементов страницы (в терминологш
Access 2000 - элементов управления).
Над пустым бланком крупным шрифтом набрано указание' Click here and
type title text (Щелкните здесь и напечатайте текст заголовка) Последуйте это
му совету и задайте имя страницы. Дальше вы формируете страницу с помощью
панели Toolbox практически так же, как в предыдущих версиях Access создава
ли формы или отчеты Любая страница доступа к данным строится следующим
образом вы помещаете на нее с помощью инструментов панели необходимые
элементы управления и форматируете их. Табл. 4.1 содержит описание этих эле­
ментов, включенных в панель Toolbox.
Использование страниц доступа к данным 117

ШЕ1
© 9.
- Toh г 1 - 1 г' - В / U S S 3=

Fie Edir ijr- v In rrt Fotr ot T -. -.k Acd ч H^lp

"3
Я Page8 : Data Лесе»» Page QsE

ДШ*1
[
k \
Section Unbound Лд abl

' pа (S

m
ЕЕ _i

- fj

El

Ы
Рис 6 13

Чтобы перенести на пустой бланк нужный элемент, следует щелкнуть мышью


по его символу, расположенному на панели Toolbox Символ отделится от панели,
и его надо поместить в любую точку страницы, при этом она будет определять
точку левого верхнего угла элемента. Теперь с ним можно работать: вводить с его
помощью информацию, перемещать текст, изменять его размеры и т.д Если по­
том вы вновь захотите использовать этот элемент, щелкните по нему мышью
В левом верхнем углу экрана появится большой маркер, а в остальных - маркеры
поменьше. С их помощью можно менять расположение и размер элементов управ­
ления Когда вы решите, что страница наконец закончена и готова к просмотру,
Щелкните по кнопке J l j View (Просмотр) на панели в верхней части того диало­
гового окна, в котором вы создаете страницу. Вот теперь вы увидите ее в оконча­
тельном варианте'

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


1. В окне базы данных активизируйте опцию Pages в разделе Objects
2. Укажите, какую страницу доступа к данным нужно открыть.
3. На панели окна базы данных щелкните по кнопке Open
118 Создание страниц доступа к данным

Открытие страницы доступа к данным в Internet Explorer


Для этого надо выполнить одно из следующих действий:
• в среде Access откройте страницу базы данных в режиме Design view или
в Page view, а затем выберите опцию Page Preview (Предыдущая Web-стра­
ница) в меню File;
Q если Internet Explorer является по умолчанию вашим Web-браузером, i
в программе Windows Explorer дважды щелкните по имени HTML-файл .
чтобы открыть страницу в Internet Explorer, не заходя в Microsoft Access.
При создании страницы доступа к данным в этих режимах Access 2000 автома­
тически сохраняет се в текущей папке как HTML-файл и добавляет соответству­
ющий значок в окне базы данных.

Передача страницы доступа к данным


по электронной почте
В отличие от традиционных форм и отчетов, страницы доступа к данным сохра
няются в отдельном HTML-файле, а не в файле базы данных Microsoft Acce^
с расширением .mdb. Поэтому пользователь легко может пересылать страницы ни
электронной почте или публиковать их на Web-серверах в виде статических
HTML-страниц. Кроме того, в них допускается включать другие компоненты,
с которыми работает система Microsoft Office - в частности, электронные табли­
цы Spreadsheet и диаграммы Chart. Существующие формы легко обновить, про
образовав их в страницы доступа к данным.
Страница доступа к данным связана с источником данных в интерфейсе OLh
DB, то есть с БД либо в Microsoft Access, либо в Microsoft SQL Server. Для работг1
со страницей пользователь должен иметь доступ к этой БД. Следовательно, баз i
данных Microsoft Access или Microsoft SQL Server, которая предоставляет исход
ную информацию OLE DB для страниц доступа к данным, должна размещатьс :
на разделенном сервере или компьютере. Тогда и другие пользователи смогуi
просматривать страницы и работать с ними в Web-браузере или в тексте письм
электронной почты. Лучше разместить базу данных на разделенном сервере ил г
компьютере до того, как будет создана страница. Рассмотрим противоположным
случай: вы этого не сделали. Значит, если вы сформируете страницу, а затем пере
местите базу данных, с которой она связана, то вам придется изменить связь не
ходных данных OLE DB со страницей. В режиме конструктора следует щелкнут
правой кнопкой мыши по значку базы данных на панели Field List (Список по
лей) и выбрать опцию Connection (Соединение).
Теперь поговорим непосредственно о передаче страницы доступа к данным И"
электронной почте. Выполните следующие действия:
1. В окне базы данных активизируйте опцию Pages в разделе Objects. Затем
выберите имя страницы, которую нужно переслать.
2. В меню File в строке меню выберите сначала опцию Send To (Послать), а по­
том - Mail Recipient (Получатель сообщения). Страница доступа к данным
открывается в Page Design view (Режим конструктора страниц), поэтом}'
Использование страниц доступа к данным 119

при необходимости можно перед отсылкой страницы конкретному адресату


внести в нес изменения - например, добавить какие-то сведения или приме­
чания,
3. Введите имена получателей в ноля То и Сс. Имена разделяются точкой с за­
пятой (;). Если вы хотите выбрать имя получателя из уже существующего
списка, активизируйте опцию То или Сс.
4. По умолчанию имя откроется в строке Subject (Субъект), и там его можно
заменить другим. Можно также произвести дополнительные операции пе­
ред отсылкой.
5. Щелкнуть по кнопке Send (Отправить) в заголовке сообщения.

Экспорт страницы доступа к данным


в существующую базу данных
При экспорте страницы доступа к данным в уже существующую базу данных
(Microsoft Access или Microsoft Access Project) вы экспортируете, в сущности,
ссылку на связанный HTML-файл. Сам он остается на прежнем месте, что позво­
ляет иметь две страницы доступа к данным, указывающие на один и тот же свя­
занный HTML-файл. Если вам это не нужно, сохраните одну из страниц под дру­
гим именем, используя команды Save As (Сохранить как) и Save As Data Access
Page (Сохранить как страницу доступа к данным) в меню File. Затем удалите
страницу, которую вы только что создали.

Список полей
Опция Field List (Список полей) позволяет легко добавлять информацию из при­
ложений Microsoft Access и SQL Server в страницу доступа к данным. Достаточно
выбрать в списке имя нужного поля и перетащить это название на страницу. Каж­
дое поле поддерживает прямую динамическую ссылку, которая связывает стра­
ницу доступа и данные. Таким образом, поле «прикреплено» к информации и опе­
ративно обновляется при изменении страниц доступа к данным. Если вы создаете
новую связанную форму или отчет, на экран автоматически выводится список по­
лей, даже если по умолчанию он был выключен.
Чтобы просмотреть список полей, надо открыть форму, отчет или страницу
в режиме Design view, а затем щелкнуть по кнопке в | , которая расположена на
панели дизайна страницы (Page design). На рис. 6.14 вы видите, как выглядит спи­
сок полей для страницы, показанной на рис. 6.12.

Сводная таблица
Компонент PivotTable (Сводная таблица) создается в Microsoft Access или
Microsoft Excel и включается в страницу доступа к данным. С помощью PivotTable
пользователи могут просматривать данные отчетов, выполнять их динамическую
Со
ртировку и фильтрацию, группировать сведения по строкам или столбцам, по­
лучать суммарные значения и изучать их отдельные составляющие. Все это по­
зволяет эффективно обрабатывать как небольшие объемы данных, так и крупные
Ма
ссивы информации. Формат, в котором изначально представлены данные,
120 Создание страниц доступа к данным

определяется форматом страницы, однако при необходимости его легко изменит ь


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

Создание сводной таблицы


для страницы доступа к данным
1. В режиме конструктора (Design view) вызовите панель инструментов.
2. На панели инструментов в меню Insert (Вставка) активизируйте опцию
Office PivotTable.
3. На странице укажите место, в котором следует разместить верхний левым
угол сводной таблицы.
4. Чтобы выбрать источник данных для сводной таблицы PivotTable, восполь­
зуйтесь одним из следующих способов:
- предположим, вам нужна информация из текущей базы данных Microsoft
Access 2000 или Microsoft SQL Server. С помощью кнопки н] вызовите
список полей страницы доступа к данным. Затем перетащите в сводную
таблицу ту таблицу или запрос, которые вы хотите использовать в этом
компоненте. Access 2000 автоматически установит для опции Data Source
control (Управление источником данных) на панели свойств сводной таб­
лицы значение MSODSC. Теперь вы сможете использовать в компоненте
тот же элемент управления, что
и в таблице. Будет установлена
также опция Data member (Эле- Database |p a ge |
m ж
. мент данных) для имени таблицы ^ dbS mdb
или запроса, на которых осно­ 3 <£j Tables SI
ван компонент PivotTable. Пос­ ; В П Name AutoCorrect Log !
ле этого переходите к пункту 6; € 3 Related Tables
1
- если вы хотите обратиться к внеш­ [13 Object Type j
OD Object Name
нему источнику данных, вызови­ I
те панель свойств компонента IB Control Name 1
PivotTable и задайте последова­
53 Property Name P
53 Old Value —
тельность команд: Data Source => S3 New Value
Connection => Connection Editor H П Менеджер
(Источник данных => Связь => >Z$ Related Tables
Редактор связей). Затем вызо­ 53 Номер
вите таблицу Provider (Агент) =. Код фирмы
z\
и выберите провайдера OLE DB,
с помощью которого вы восста­ i d r i -i v л - .
новите данные. Наконец, акти­
визируйте таблицу Connection Рис 6 14
и введите информацию о связи
в данные, которые вы хотите использовать для компонента PivotTable list
Чтобы получить справку о диалоговом окне Data Link Properties (Свойства
указателя данных), щелкните по кнопке Help в нижней части этого окна
Резюме 121
5. Откройте раздел Other на панели свойств сводной таблицы PivotTable. Те­
перь выполните одно из следующих действий:
- чтобы использовать данные из определенной записи в пределах базы дан­
ных, активизируйте опцию Data member и выберите нужный элемент из
списка;
- чтобы использовать для отбора данных запрос или команду (например,
выражение SQL), сначала щелкните по кнопке Command text (Текст ко­
манды), а затем напечатайте в окне этот текст. (О том, как должен стро­
иться текст вводимой команды, вы можете прочесть в документации
к внешней базе данных.)
6. Используя панель компонента и панель свойств компонента (PivotTable
Property Toolbox) для добавления итоговых данных, продолжайте корректи­
ровать вид компонента PivotTable и задавать его свойства до тех пор, пока
этот элемент управления не будет полностью отвечать вашим требованиям.

© • Чтобы создать сводную таблицу PivotTable, которая использует данные


из таблицы Microsoft Excel, нужно поместить их на Web-страницу. Если
вы хотите открыть ее внутри страницы доступа к данным, сделайте
это в Microsoft Access, а затем добавьте элементы, связанные с базой
данных Microsoft Access или Microsoft SQL Sewer;
• если вы добавляете сводную таблицу PivotTable к групповой странице до­
ступа к данным (странице, содержащей сгруппированные данные), ее
список появляется для каждой отдельной группы сведений и содержит
только относящиеся к ней записи. Например, на странице, где информа~
ция сгруппирована по годам в соответствии со списком PivotTable, кото­
рый содержит данные о ЧС, появится список для каждого года, содержа­
щий только сведения о ЧС этого года. В любой момент можно вывести на
экран список PivotTable не более чем для одной группы;
• вы можете создать диаграмму, связанную со списком PivotTable. Тогда
при его корректировке в диаграмму будут автоматически внесены со­
ответствующие изменения.

Резюме
1. В Access 2000 введен новый тип файла - страница доступа к данным (Data
Access Page), созданный для просмотра данных из Internet или intranet и ра­
боты с ними. Страница доступа загружается в базу данных Access 2000 или
SQL-сервера, но может также создаваться и загружаться вне Microsoft
Access. Страница доступа к данным способна включать данные из других
источников - например, из Microsoft Excel. Кроме того, страницу доступа
к данным используют при работе непосредственно в базе данных или проек­
те, создаваемом в Access 2000.
2- Для взаимодействия Access 2000 с окружающей средой страницы доступа
к данным значительно полезнее, чем статические копии отчетов. Если
122 Создание страниц доступа к данным

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


статических данных, то страницы доступа к данным используются для вво-
да сведений и их редактирования, для передачи данных внутри БД/проект,
для информационного обмена Access 2000 с внешним окружением и для опе­
ративной связи по электронной почте
3. Для создания страниц доступа к данным в Access 2000 есть специальный па­
кет - Data Access Page Toolbox. В нем есть инструментарий, используемый
разработчиками форм и отчетов, и новые средства, которые специально
предназначены для создания страниц доступа к данным в Web-среде. Нуж­
ный инструмент легко выбрать с помощью курсора. Как и другие стандарт­
ные наборы инструментов, Data Access Page Toolbox доступен из меню.
4. Сформировать страницу доступа к данным можно одним из следующих спо­
собов:
- с помощью Auto Page (Автостранпца);
- с помощью Page Wizard (Мастер страниц);
- в режиме Page View (Конструктор страниц).
Открыть уже существующую страницу доступа к данным можно:
- в режиме Page View;
- в Internet Explorer.
Все эти способы подробно рассмотрены в главе.
5. Кроме того, в Access 2000 можно создать и включить в страницу доступа
к данным компонент PivotTable (Сводная таблица). С его помощью пользо­
ватели могут просматривать данные отчетов, выполнять их динамическую
сортировку и фильтрацию, группировать сведения по строкам или столбцам,
получать суммарные значения и изучать их отдельные составляющие. Все
это позволяет эффективно обрабатывать как небольшие объемы данных, так
и крупные массивы информации.
Глава V I I
Конвертирование баз
д а н н ы х из других
программных сред

• Процесс конвертирования баз данных


• Импорт базы данных БД ЧЭС
• Импорт базы данных Контроль ЧС

Мы уже говорили о том, что по мере появления новых, более совершенных СУБД
все актуальнее становится проблема использования данных, которые накоплены
в информационных банках предыдущих, в том числе и морально устаревших вер­
сии. И сами эти СУБД, и организованные в них сведения очень разнообразны по
составу, структуре и форматам данных, а также по программной основе. Эти БД
часто создавались разными организациями и разработчиками, а какие-либо пра­
вила, четко регламентирующие создание банков данных, отсутствуют. Несмотря
па это в большинстве случаев информация, в какой бы форме она ни содержалась,
сохраняет свою ценность, например, когда речь идет о статистических данных.
Следовательно, нужно уметь использовать сведения независимо от того, в СУБД
какого типа они хранятся.
В решении этой проблемы на сегодняшний день наметились два основных на­
правления:
Q применение конвертеров, которые преобразуют данные из одного формата
в другой. Наборы таких конвертеров, хотя и не всегда достаточно полные,
есть практически во всех СУБД, и пока это основной путь решения про­
блемы;
1 24 Конвертирование баз данных из других программных сред

• использование технологии ODBC (Open Database Connectivity). O D B C -


открытый интерфейс доступа к базам данных ил прикладных программ. О^
позволяет работать с документами «чужих» для конкретной БД форматов.
В настоящей главе рассматривается первый способ решения проблемы. Речь
пойдет о конвертировании в Access 2000 двух баз данных, созданных в различных
СУБД, Б различных организациях, в разное время п разными авторами. (Отме­
тим, что по понятным причинам при разработке этих БД никакой предпроектной
структуризации данных не производилось.) Первая - база данных по чрезвычай­
ным экологическим ситуациям (БД ЧЭС) - была создана в программной среде
Clarion версии 3.0 (MS DOS) в 1990 г. в Государственном институте прикладной
экологии (ГИПЭ). Вторая - Контроль ЧС - в программной среде FoxPro версии
2.5 (Windows 95/98) в 1997 г. в Главном управлении Федерального агентства пра­
вительственной связи и информации (ГУИС ФАПСИ). Обе базы данных ведутся
в течение ряда лет и содержат информацию о чрезвычайных ситуациях, происхо­
дивших на территории России. Таким образом, эти две БД дополняют друг друга.
Мы объединим их с новой базой данных - Контрольно-измерительные прибо­
ры, процесс создания которой в среде Access 2000 был подробно описан в преды­
дущих главах. Полученную таким путем объединенную БД следует рассматривать
как часть будущей, более широкой базы данных. Вообще говоря, совсем не обяза­
тельно стремиться к тому, чтобы все файлы содержались в одной БД - как и всегда
в жизни, гигантомания должна иметь свои пределы. Но это уже иная проблема, ко­
торая не имеет отношения к проблеме конвертации БД и не влияет на ее процесс.
Как показывает опыт, при конвертировании баз данных могут возникнуть еще
две трудности:
Q- несовпадение кодов словарей;
• различие между форматами полей даты и времени в разных БД.
Первая проблема носит чисто технический характер. Она вызвана тем, что в раз­
ных БД могут использоваться различные словари для одних и тех же понятий или
объектов. Это, как правило, неизбежно, если для данного класса понятий отсут­
ствуют словари, утвержденные на федеральном уровне. Здесь возможен простой
выход: переводите все файлы, где используются «спорные» понятия, на единые
коды (либо перекодируйте словари, либо оставьте для этих понятий только один
словарь).
Вторая трудность связана с тем, что в СУБД разных семейств установлены раз­
личные временные точки отсчета, поэтому вам придется дополнительно форма­
тировать соответствующие поля. Более подробно такие ситуации рассматривают­
ся ниже.

Процесс конвертирования баз данных


Итак, перед началом конвертирования вы имеем:
• базу данных Контрольно-измерительные приборы, созданную в программ­
ной среде Access 2000;
зоцесс конвертирования баз данных 125

базу данных БД ЧЭС, сформированную в среде Clarion 3.0;


базу данных Контроль ЧС, разработанную в программной среде FoxPro 2.5.
Наша цель - объединить все эти базы данных в одну, расположенную в про­
граммной среде Access 2000. Вся дальнейшая обработка информации будет про­
исходить в этой новой БД. Чтобы решить поставленную задачу, вы будем импор­
тировать базы данных в Access 2000, одновременно преобразуя их из исходных
форматов в новый.
Существуют ли какие-либо альтернативы такому решению? Да, теоретически
их две:
• если структуры файлов двух или нескольких баз данных совпадают, можно
свободно переносить информацию из одной БД в другую. Однако, как уже
говорилось, такая ситуация крайне маловероятна;
• можно не импортировать нужные файлы в БД, а связать их с таблицей Access.
Отметим, что файлы являются источниками информации, а в таблице Access
содержатся только ссылки на соответствующие сведения. Тогда база данных
Access останется в своем первоначальном виде, а все изменения будут про­
исходить в связанных файлах. Однако в таком случае усложняется ведение
комплексной БД: если файл данных был перемещен, то вы не сможете про­
сматривать и редактировать его, пока не обновите информацию о местопо­
ложении этого файла.
Технология импорта для каждой из двух конвертируемых баз данных несколь­
ко различается.
Импорт БД ЧЭС по необходимости состоит из двух этапов. Clarion 3.0 - до­
вольно старая программная система, поэтому она содержит очень небогатый на­
бор конвертеров. Из них практическую ценность имеет лишь конвертер данных
из формата DAT в формат программы dBase3 - DBF. Именно этим инструмен­
том вы и воспользуемся. Следующим шагом будет импорт файлов с их одновре­
менным конвертированием из базы данных формата dBase3 в БД Контрольно-
измерительные приборы в формате Access 2000 - MDB. Конечно, указанное имя
этой базы данных уже не будет соответствовать ее содержанию, и его придется
изменить.
Двухэтапным будет также и перевод базы данных Контроль ЧС из формата
в формат, но по другим причинам. Дело в том, что при всей мощности и гибко­
сти Access 2000 из этой версии (по сравнению с Access 97) исчез конвертор
форматов данных FoxPro. В результате, даже несмотря на родственный фор­
мат (DBF), с которым работают СУБД семейства dBase, при попытке прямого
импорта файлов из FoxPro в Access 2000 с помощью конверторов возникают
трудности с преобразованием текстовых файлов: во-первых, не конвертируют­
ся файлы типа Memo, во-вторых, текстовые строки конвертируются с искаже­
ниями, так что понять эти тексты нельзя. Поэтому порядок работы будет та­
ким: первый шаг - переносим данные из FoxPro в Access 97, второй - из Access 97
в Access 2000.
1 26 Конвертирование баз данных из других программных сред

Импорт базы данных БД ЧЭС


Начнем с краткой характеристики базы данных БД ЧЭС.

Первый этап: импорт данных из среды Clarion в dBase


Сначала посмотрим, как выгляди! фрагмент этой базы данных. На рис. 7.1 nptvi
ставлена часть окна базы данных - ответ на запрос об авариях на магистральны
трубопроводах, которые произошли на территории Российской Федерации в 1995
По каждой из чрезвычайных ситуаций, содержащихся в этом списке, можно п•
лучить (в электронном или печатном виде) более подробную информацию.
Для импорта базы данных используем конвертер Ccvt, который входит в с
став программного обеспечения среды Clarion (см. рис. 7.2). Как видно из piicyi
ка, конвертер предоставляет не слишком широкие возможности преобразован и
форматов: либо в текстовый файл на языке Basic, либо в универсальный обмен
ный формат DIF, либо в один из форматов языка dBase. Однако Basic нам в да i
ном случае не нужен, a DIF не получил широкого распространения. Значит, ост
ется, как мы уже договорились, преобразовывать данные в формат dbf.
Как и раньше, мы будем рассматривать конвертацию данных на примере одн
го файла. Возьмем самый представительный в базе данных БД ЧЭС файл
Filel.dat, показанный на рис. 7.2. В сущности, само формальное преобразован!i
происходит предельно просто. Выберите с помощью клавиатуры (а не мыши, 'i,
как MS DOS вполне может обходиться и без нее) выходной формат (Output Тур
и имя выходного файла (Output File), который назовите Filel.dbf. Теперь нажми

1 *™ А • :\ • | а | ВЦ g f g AJ

Рис 7 1
импорт базы донных БД ЧЭС 127

Рис. 7 2

клавишу Enter. Указывать файл-источник (Source File) не надо: имя этого сис­
темного файла Clarion введет сам. На данном этапе и произойдет преобразование:
появится требуемый файл Filel.dbf. Если, вводя имя этого файла, вы не указали
его расположение, то он будет помещен в ту же директорию, в которой нахо­
дится конвертер Ccvt. Казалось бы, дело сделано, и можно переходить к следую­
щему этапу конвертирования.
Однако не все так просто. В dBase действует ограничение на длину имени поля -
оно не может превышать 10 символов. Кроме того, при конвертации в название
включается префикс. Например, имя поля PEREDAL после преобразования пре­
вратится в FIL_PEREDA. Но в результате конвертации точно так же будет выгля­
деть и имя другого поля - PEREDAB. Тогда окажется, что в файле Filel.dbf содер­
жатся два поля с одинаковыми именами, что недопустимо. Конечно, такая проблема
разрешается относительно легко: войдите в систему dBase и там исправьте имя фай­
ла Поскольку данная ситуация является частной, здесь она подробно не рассмат­
ривается. Но очень важно помнить, что при переносе файлов из одной СУБД
в другую (даже если речь идет о реляционных СУБД) необходимы повышен­
ные осторожность и внимание. В следующем разделе будет показано, что описан­
ный выше эпизод - не единственный случай, когда могут возникнуть проблемы.
Так или иначе, первый этап импорта файлов завершен (как вы помните, осталь­
ные файлы конвертируются точно так же). Можно переходить ко второму шаг}'.

Второй этап: импорт данных из dBase в Access 2000


Теперь нам нужно импортировать в базу данных Контрольно-измерительные при­
боры файлы из базы данных БД ЧЭС, конвертировав их при этом из формата dBase.
128 Конвертирование баз данных из других программных сред

Импорт файлов
Снова откроите окно базы данных. Напомним, что необходимо выполнить след
ющие действия:
1. Из окна Access 2000 открыть базу данных по ее имени (БД ЧЭС). В резул
тате на экране отобразится начальная форма (см. рис. 4.24).
2. Щелкните по кнопке _©| на панели инструментов базы данных. На экра:
появится окно базы данных (см. рис. 3.1).
3. Если начальная форма вам почему-либо мешает, уберите ее, щелкнув г
кнопке закрытия окна.
Теперь в меню базы данных выберите опцию File (Файл), а в открывшемся по.
меню - Get External Data (Внешние данные). Затем активизируйте опцию Impoi i
(Импорт), после чего на экране появится одноименное окно Import. Вам приде
ся пройти по дереву файлов в поисках базы данных в формате DBF, которую к i
получили в результате первого этапа работы (см. предыдущий раздел главы). К а ,
и раньше, возьмем в качестве примера файл Filel.dbf. Чтобы увидеть его либо др\
гие файлы этой базы данных в формате DBF, надо в поле Files of type (Файл!
типа) активизировать или какую-либо модификацию dBase, или опцию All files
(Все файлы). В противном случае файлы формата DBF будут невидимы. Hail
дя нужный файл и пометив его, щелкните по кнопке ^ import J (см. рис. 7.3 i
Если все прошло нормально, то Access 2000 выдаст сооощенис Successfully im­
ported 'FILEl' ('FILEl' успешно импортирован), как показано на рис. 7.4. Щели
ните по кнопке ОК.

| Import ВЕЭ1
Look in: _ J dBase j <- (tj ® X CL, Ш - то* -
_J] Filel.dbf
Р^ч _-3]Olad.dbf
•Mr ' J]Wa5te.dbf
^5

\_ 1 *
1
1

^^S='-*'44
File name:
^k£jMi J & • Import
i Wet/ Folders •
^^^ШВЯ U^jjgyeAs^m^bf^ Cancel
шшшшшшшшшш^
Рис. 7.3
Импорт базы донных БД ЧЭС 129

1 Microsoft Access • 1

1 ) Sue cessfully imported 'FILE 1 Г.

0K
' '.

Рис. 7.4

Теперь надо закрыть окно Import, и тогда вы увидите, что в окне базы данных
появилась новая таблица Filel (см. рис. 7.5).

Поля даты и времени


Итак, второй этап импорта прошел успешно, и кажется, что с базой данных все
в порядке. Однако приглядимся повнимательнее к импортированной таблице
(см. рис. 7.6), особенно к полям даты и времени FILDATAY, FIL_TIMECH,
FIL_DATAS, F1LTIMESO. (Вы помните, как образовались эти имена? К исход­
ным названиям полей файла Filel.dat при преобразовании его в формат DBF сле­
ва добавляются префиксы FIL_, а общее имя поля «обрезается» до 10 символов.)
На рис. 7.6 эти поля сгруппированы вместе, чтобы их удобнее было просматри­
вать. Значения перечисленных полей выглядят необычно, и вы поймете, в чем
дело, перейдя в режим конструктора с помощью кнопки Ы,-\. Окно режима

Ы Microsoft Access
File Edit View Insert Tools Window Help
m*i
Й' аё-М*?
dbl: Database
Ш\ 3
t^Open k£ Design j^New X

Create table in Design view


Create table by using wizard
Create table by entering data

232
Менеджер
Назначение
Приборы, представленные на рынке2
Страны
Типы приборов
фирмы

ai-<*8g^i.i -«•>- d
Рис. 7.5
5-_
130 Конвертирование баз данных из других программных сред

В Microsoft Access - (FILE1: Table! l-la"J?


• file Edi View Incur Г n , ,i PE L I * Tools j/jndD Help il£j£

ea: ?J • ПО- • eg-^- ©-


id- У e a^
ML_VID] FILJ3ATAY
« i\ l\ ^Ъ M »•*©£]. ©.
| Fll__TIMECH | FIL_OATAS | FILJTIMIESO | FILJ4AMIECH ]FIL_RESl| F I L _ N A M E R E 7 FIL ME]]
J_l 1Q305 70699 0 00 70894 0 Обнаружение рзэл 1 1 Российская ф( fP
10305 70890 0 00 70S92 5760001 Обнаружение ргуп 1 1 Российская ФЕ 11
10109 70890 0 00 70691 D Выброс газа из СКЕ 1 1 Российская ФЕ 51
10305 70891 0 00 70891 0 Обнаружение ртуп 1 Российская ФЕ 11
10109 70883 0 00 70884 С Аварии на магистр 1 1 Российская ф< 41
10109 70883 0 00 70885 0 Аварии на магистр 1 1 Российская ФЕ 41
10305 70683 0 00 70885 0 Обнаружение (утрг 1 1 Российская ФЕ 81
10301 70885 0 00 70886 0 Авария с выброса* 1 1 Российская ФЕ 11
10305 70880 0 00 70883 0 Обнаружение (утре 1 Российская ФЕ 21
10305 70В8Э 0 00 70884 0 Обнаружение ртуп 1 1 Российская ФЕ
10302 70861 0 00 70861 0 Аварии на транспо ' 1 Российская ФЕ 21
10101 70868 0 00 7087D 0 Авария грузового г 1 1 Российская ФЕ 31
11002 70893 12 20 70897 4320001 Прорыа дамбы зол 1 1 Российская ФЕ 21
10302 70902 0 00 70904 450D001 Аварийный слиь бе 1 Российская ФЕ 21
10301 70909 0 00 70911 0 Отравление людей 1 1 Российская ФЕ 21
10305 70904 0 00 70912 0 Обнаружение ртун 1 Российская ФЕ 21
10305 70912 0 00 70918 0 Обнаружение ртуп 1 1 Российская ФЕ 21
10202 70918 0 00 70918 0 Выброс нефти и ее 1 Российская Фб 51
30303 70919 0 00 70921 0 Загрязнение водно 11 Российская ФЕ 21
30303 70921 0 00 70921 0 Загрязнение водно 1 Российская Ф: 21
10801 70921 0 00 70921 0 Авария на канализ 1 1 Российская ФЕ 21
10302 70901 0 00 70901 0 Аеэр«я топливозап 1 Российская ФЕ 81
10305 70903 0 00 70904 0 Обнаружение ртуп 1 1 Российская ФЕ 11
10302 70923 0 00 70924 0 Авария на транспо 1 1 Российская ФЕ 41
10302 70918 0 00 70925 0 Утечка аммиачной 1 1 Российская ФЕ 21
10101 70925 0 00 70925 0 Авария грузового г \ 1 Российская ФЕ
Re cod i* | * I 1 ,i |'l|>»J « Н И ^
Рис 7 6

конструктора показано на рис. 7.7. Оказывается, эти поля, которые должны при­
надлежать к типу Data/Time (Дата/Время), после преобразования относятся
к типам Text (Текст) или Number (Числовой).
Внесите необходимые исправления. Задайте для полей тип Date/Time (Дата
Время). В разделе Field Properties (Свойства полей) для полей дат F1L_DATAV
и FIL_DATAS установите значение свойства Short Date (Краткая дата), что соот­
ветствует изображению даты 09/12/1999, а для полей времени FIL_TIMECH
и F I L T I M E S O - значение свойства Short Time (Краткое время), что соответству­
ет изображению времени 12.36. Раз уж мы взялись наводить порядок, давайте зада
днм для свойства Caption (Заголовок) перечисленных полей соответственно значе­
ния Дата ЧЭС, Дата сообщения о ЧЭС, Время ЧЭС, Время сообщения о ЧЭС

Путешествия во времени
Теперь посмотрим, что у нас получилось. Перейдя в режим формы с помощью
кнопки • -1 (см. рис. 7.7), вы обнаружите крайне любопытную картину. Поля вре­
мени теперь имеют привычные русскоязычные имена и выглядят нормально, если
не считать того, что в большинстве случаев в эти поля введены нулевые значе­
ния. (Заметим, что это не ваша вина; информация о времени ЧЭС и уж тем бо­
лее о времени передачи сообщения поступает далеко не всегда ) Но взгляните на
поля дат. На календаре базы данных должен стоять 1995 год - год, указанный
Импорт базы данных БД ЧЭС 131

дЩИШ.ЦШШЫЦЦШЛ шп
JsJiU

?- g» С? • S -Й • О.
Description

Field Properties

Default Value
j )ta type det^ oires the kjnd of values that irers L-ЗП 5to>e m the fHd
Validation R jle
Pte-^s H for telpon data type-:
validation Tc*t
Peg jned
Allow 2^0 Length
1ПОе<Н
Unicode Curnpfession

Рис 7 7

в запросе. А в таблице, которая представлена на рис. 7.8, вы видите 2094 год. Этот
забавный факт имеет вполне рациональное объяснение, связанное с тем, что на­
зывается несовпадением в исходных установках различных СУБД. Если не задать
заранее точное значение типа поля1 - а для даты и времени это Date/Time (Дата/
Время), то каждая введенная дата будет заноситься в память СУБД в виде число­
вого выражения. Оно представляет собой количество дней, прошедших от даты,
принятой за точку отсчета (ей присвоено значение 1). Это имеет определенный
смысл' при необходимости вы сможете выполнять с датами арифметические
Действия. Если вы вводите значение времени, оно сохраняется в памяти в виде
Десятичной дроби, которая равна прошедшей на данный момент части дня. (За
точку отсчета принимаются 12 часов ночи.) А вот исходная дата в каждом се­
мействе СУБД может быть разной. Например, в различных редакциях пакета
Office, частью которого является Access, такой датой является 1 января 1900 года.
В версиях языка dBase (одну из которых мы использовали) это 1 января 1800 года.
Теперь вам понятны числа, которые появились в полях дат сразу после конвер­
тации файла Filel в Access 2000 (см. рис. 7.6). А вот сутки во всех семействах
СУБД начинаются в полночь, и тут при всем желании трудно придумать что-то
оригинальное.
У яого понятия есть синоним - «формат данных», что, на наш взгляд, более точно Но в настоящей
книге под форматом данных понимается тип расширения файла базы данных

132 Конвертирование баз данных из других программных сред

I B Microsoft Access ШШШ BZEH


F.le Edit view Insert FQrrrut Records Tpol'E и^тНол' Help

, o Й Н S u " Jf 4a IB •' ? J • ОЛ "S -Й - @ -


M • H i a ? * Qa I S •' • < £1 I I , "a ** •• ^ B-41- ITJ .

IP F 1 L E 1 : Table
Дата ЧЭС | Время ЧЭС |Дата сообщения |Вра мя соовщвния|
08/24/2094 12 40 08/26/2094
FIL_RESP
•япо
| FIL_NAMIERE| FIL_MECTO | FIL^ !
1 Российская Ф< 6113200 1132С
7

08/26/2094 03 15 08/26/2094 1 Российская Ф( 7110400 1104С


08/26/2094 17 25 08/26/2094 1 Российская Ф< 9110500 1105C-J
08/27/2094 09 00 08/23/2094 00 00 1 Российская Ф< 9110800 1108С
08/29/2094 08/29/2094 1 Российская Ф( 5116500 1165С
08/24/2094 08/30/2094 1 Российская Ф( 3116000 11 БОГ
07/24/2094 00 00 07/29/2094 Э Украина 0
09/10/2094 00 00 09/11/2094 00 0П 1 Российская Ф( 2111400 1114С
09/09/2094 09/10/2094 00 00 1 Российская Ф( 5116500 1165С
09/09/2094 10 30 09/12/2094 1 Российская Ф( 8117600 117ВГ
о 03/24/20941 00 OOiO 04/21/2094! 00.00: 11 Российская Ф(- 4119200 • • !
03Я4/2094 00 00 04/21/2094 00 00 1 Российская Ф< 4118700
03/05/2094 00 00 04/21/2094 00 00 1 Российская Ф< 4118000 1180С
03/05/2094 00 00 04/21/2094 00 00 1 Российская Ф( 4115700 115ГС
03/20/2094 00 00 04/21/2094 00 00 1 Российская Ф( 4118000
03/23/2094 00 00 04/21/2094 00 00 1 Российская Ф* 6115200 1152С
05,90/2094 00 00 06/23Д094 00 00 1 Российская Ф( 5116500 11 КГ J
05Л5/2094 00 00 06/23/2094 00 00 1 Российская Ф< 4113600 1ПСС
05/04/2094 00 00 06/23/2094 DO 00 1 Российская Ф< 411.8700 1187Г.
05/09/2094 00 00 06/23/2094 00 00 1 Российская Ф( 4115300
08/10/2094 12/30/1899 00 00 1 Российская Ф( 9111000
09/16/2094 10 15 ОЧ/1КД094 1 Российская Ф( 2112000 112ПС
09/15/2094 04 30 09'16'2U94 1 Российская Ф( 8117600 1176Г-]
Реcold i* | < | | 106 » 1 H|»*| ol 858 •1 1 -1
, _1 •&
Рис. 7.8

Возникает естественный вопрос: а почему нельзя при конвертации данных в dBa


установить для полей дат соответствующий формат, а не цифровой, который бь
использован в нашем примере? К сожалению, в dBase задано жесткое огранич
ние на длину поля Date - 8 бант. Если вы считаете необходимым использова-
четырехзначные символы для указания на год (вспомните страх проблем:
2000 года!), то в указанный лимит явно не укладываетесь: поля дат получатся пр ••
сто пустыми, что вас, разумеется, не устраивает.
Однако, объяснив этот печальный факт, вы не избавились от необходимости ис­
править положение. Чтобы сделать это, воспользуйтесь операцией замены-вставки
Сначала выделите столбец Дата ЧЭС, щелкнув кнопкой мыши по его имени. Теперь
в меню Access 2000 откроите таблицу Filel в режиме конструктора (см. рис. 7.8). Акти­
визируйте опцию Edit (Правка) и выберите Find (Найти). Можно, не входя в меню,
просто применить комбинацию клавиш Ctrl+F. В результате на экране появится
окно поиска-замены Find and Replace (Найти и заменить), как показано на рис. 7.9.
Теперь откройте вкладку Replace (Заменить) и установите в этом окне следую­
щие значения полей:
• Find What (Что найти) - /2094 (часть поля в столбце, которая подлежит
замене);
• Replace With (Чем заменить) - /1995 (год, устанавливаемый в порядке за­
мены);
Импорт базы данных БД ЧЭС 33

Find and Replace 1*1


Find Replace
1
Find What: |1И!Я1
3 Find Next

Cancel

Replace With |/.« 3 Replace

Lock In:
1 3 Replace All

Match: | д п / Part of Field


3 < < Less

Г Match Case
Search: |AII
3 Г

Рис. 7.9

D Match (Исправить) - Any Part of Field (Любая часть поля). Данная опция
задается стрелкой прокрутки;
J Search (Искать) - All (Везде). Задается стрелкой прокрутки.
После этого следует щелкнуть по кнопке Replace All (Заменить везде). Затем
повторите описанную процедуру для столбца Дата сообщения. В ходе операции
поиска-замены по всем полям этих двух столбцов значение года - 2094 - будет
заменено на 1995. Итоговый вид таблицы после внесенных исправлений представ­
лен на рис. 7.10.
Но и это еще не все. Если вы сравните сообщение о ЧЭС, полученное из исход­
ной базы данных в среде Clarion, и его изображение после конвертации в Access 2000
(см. выделенную запись 106 на рис. 7.10), то обнаружите одно различие, кото­
рое, конечно же, свойственно всем записям. Согласно информации в исходной
базе данных, авария на магистральном трубопроводе произошла 23.03.95 г. В но­
вой БД этому событию соответствует другая дата - 24.03.95 г. В чем тут дело?
Детальная проверка объясняет причину такого сдвига во времени: в разных
СУБД заложены разные установки насчет того, как представлять дату 29.02
в високосном году. Это и проявляется при преобразовании базы данных. Там за
несколько лет накапливаются большие массивы информации, и в каждом висо­
косном году 29 февраля происходит своеобразная «мутация»: в преобразован­
ных записях все даты отличаются от исходных на +1 день. Через 4 года сдвиг
Увеличивается еще на 1 день, и т.д. Как видите, здесь необходима корректиров­
ка, и осуществить ее технически несложно; потребуются лишь внимательность
11
Методичность. Просто сравните выбранные вами контрольные записи в исход­
ной БД с их отображением в новой, итоговой базе данных и определите границы
п
°Дмассива с конкретным значением сдвига (например, +1). Теперь исправьте
Данные этого подмассива с помощью операции поиска-замены так, как было по­
казано выше.
1 34 Конвертирование баз данных из других программных сред

|ЕЗ Microsoft Access 1-loJx


File Edit View Insert Format Pecordo Toe Is Windo v Help
1
i D e J H l a t ' j . i b e ' ' '•'> Ь - аа ng-Й • о.
y - i H a a ? * m © • ^ -•- и i\ .--•а м •* * © й• о.
F I L E l : Table -iDlxj
FIL^VIPY | FIL_NAMECH | Дата ЧЭС | Время ЧЭС {Дата сообщения! Время сообщения] FIL_RESP | FIL.tQ
10305 Обнаружение ; 06/27 Л 995 09 00 03/26/1995 0U 00 11 Poccm
30303 Загрязнение в( 06/29/1905 08/29/1995 POCCHI
20203 Обвалы грунта 06/24/1995 08/30/1995 POCCKU
30303 Загрязнение ei 07/24/1995 00 00 07/29/1995 Украиг- I
10801 Авария на кан. 09/10/1995 00 00 09/11/1995 0П 00 11 РОССИ!
30303 Загрязнение р< 09/09/1996 09/10/1995 00 00 11 РОС СИ; ,
D
10109 Авария на мап 09/09/1995 10 30 09/12/1995 occm
101091 Авария на мап| 03/24/1995! 00 00 04/21/1995' 00.00 11! дВВД
10802 Авария водоес 03/04/1995 00 00 04/21/1995 00 00 11 D O C C m
10201 Пожар в цехе i 03/05/1995 00 00 04/21/1995 00 00 11 Россн*
10302 Авария грузов' 03/05/1995 00 00 04/21/1995 00 00 11 POCCHI
10109 Авария на скв< 03/20/1995 00 00 04/21/1995 00 00 11 Россш
30202 Превышение Г 03/23/1995 00 00 04/21/1995 00 00 11 3 ОС-СИ»
10201 Пожар на мета 05/20/1995 00 00 06/23/1995 00 00 11 D 0 C C I U
10205 Пожар иэобутн 05/05/1995 00 00 06/23/1995 0000 11 э О С С И (
D
10701 Авария на эле! 05/04/1995 00 00 06/23/1995 00 00 11 occm
3
10109 Авария на кон; 05/09/1995 00 00 06/23/1995 00 00 11 оссш
D
10203 Сход вагонов t 03/10/1995 12/30/1899 00 00 11 occm
10301 Авария с выбр 09/16/1995 10 15 09/16/1995 Pdccm
10305 Разлив ртути е 09/15/1995 04 30 09/16/1995 Purcm
10305 Обнаружение ( 06/26/1995 00 00 11 Рос cm
10109 Авария на мап 09/25 '1935 15 07 09/26/1995 00 00 11 Poccm
10301 Авария с выбр 09/30'1ЛП5 00 20 09/30/1995 00 00 11 Prxuu
лл nn na/qn/iQQc. ПЛ Л П 11
Re cord и | « ( I 10в » I » i l » * i ofese - ^

Рис 7 10

Сортировка записей
И, наконец, последняя операция: таблицу базы данных желательно, хотя и не обя­
зательно, отсортировать. Операция сортировки записей в Access 2000 очень про­
ста. В окне конструктора (см. рис. 7.10) выделите тот столбец, по которому требу­
ется сортировать записи. Сама сортировка производится с помощью одной из
двух кнопок: £i] или gjj. Посредством первой из них вы располагаете записи по
возрастанию: для цифровых символов - от 0 до 9, для текстовых - от А до Z. Вто­
рая кнопка, соответственно, используется для сортировки записей по убыванию.
Щелкните по одной из кнопок.
Теперь оглянемся назад и посмотрим, что уже сделано и что еще предстоит вы­
полнить.
Вы преобразовали и импортировали в Access 2000 один файл (Filel) базы дан­
ных БД ЧЭС из СУБД, созданной в среде Clarion. Но, во-первых, вы импортиро­
вали только часть информации (данные лишь за 1995 год), а в БД ЧЭС накопле­
ны записи с 1990 года. Во-вторых, в БД ЧЭС есть еще несколько словарных
файлов, которые тоже нужно перенести в новую базу.
Что касается первой части вопроса, то можно, конечно, пополнить базу данны4
новыми записями точно так же, как данными 1995 года. Впрочем, для осущеа
вления этой типовой операции вполне достаточно обычного SQL-запроса п.
Импорт базы данных Контроль ЧС 135

File £dtt ^iew Insert Format Records Tools Window Help

S ^ B # Й У P ' * Ь - с£ ' =g м- о-
у - s # a v- <f / ' • *1 И ъъ М •« * © -Й1 - О-
1Гм FILEl: Table • -|П|Х| - J
Виды ЧС |Нанм9ноыни'| Дата ЧЭС [ Врем* ЧЭС [Дата сообщания[Врамл сообщения! Код рвспуб пм[ Наймем]
• 10205 Пожар в хило!.. Jii/02'iq% 12/30/1699 00 00 11 Росси - '
10302 Аварии на трак 01/02/1995 00 00 01/02/1995 00 00 11 Росси
10205 Пожар на узле 01/02/1995 12/30/1899 00 00 11 Росси
20307 Сильный дожд 01/03/1995 00 00 12/30/1899 00 00 0
10101 Сход вагонов i 01/03/1995 14 55 12*30/1899 00 00 11 Росси
20307 Сильный дожд 01*3/1995 00 00 12/30/1899 00 00 0
10301 Отравление лк 01/05/1995 12/30/1899 00 00 11 Росси
10301 Пишевое отраЕ 01/05/1995 12/30/1899 00 00 11 Росси
10201 Пожар в гараж 01/06/1995 12/30/1899 00 00 11 Росси
10205 Пожар в здани 01/07/1995 12/30/1899 00 00 11 Росси
10205 Пожар в жилок 01/07/1995 12/30/1899 00 00 11 Росси
10201 Пожар на Teppi 01,08/1995 12/30/1899 00 00 11 Росси
10101 Авария грузов! 01/09/1995 00 0U 01/11/1995 00 00 11 Росси
10107 Дорожно транс 01/09/1995 12/30/1899 00 00 11 Росси
30102 Заболевание л 01/11/1995 12/30/1899 00 00 11 Росси
10201 Пожар на шве! 01/11/1995 12/30/1899 00 00 11 Росси
10802 Авария на вод 01/13/1995 12/30/1899 00 00 11 Росси
10205 Пожар в клубе 01/14/1995 12/30/1899 00 00 11 Росси
10201 Взрыв в катет 01/18/1995 12/30/1899 00 00 11 Росси
10803 Авария котла к 01/19/1995 12/30/1899 00 00 11 Росси
30102 Групповое эаб> 01/19/1995 12/30/1899 00 00 11 Росси
[1 10107 Дорожно транс 01/19/1995 12/30/1899 00 00 0 Росси
I 10301 Отравление лк 01/19/1395 12/30/1899 00 00 11 Рогси
i 1Л1Г1Я П п п л ^ п - т п я н г ni/1Q/iqQ^ ОПП/1Я99 пппл 11 Рпггит]
Ci-.orf " I - I I 1 • | ы | > » 1 of 646 •1
I •I

Рис. 7 11

присоединение, о чем будет рассказано в главе 9. (Правда, вам все равно придется
заниматься устранением временного сдвига.)
Импорт словарных файлов производится так же, как перемещение файла Filel.
Поскольку файлы подобного типа не содержат полей даты и времени, никаких
дополнительных проблем здесь не возникает.
В завершение работы надо привести базу данных в привычный вид. Ограниче­
ния на длину имени поля практически отсутствуют, поэтому дайте всем полям
в файлах русскоязычные названия. Вы уже начали делать это немного раньше -
в разделе «Поля даты и времени» - с помощью поля Caption (Заголовок) кон­
структора таблиц. В своем заключительном варианте таблица Filel представлена
на рис. 7.11, а окно базы данных - на рис. 7.12.

Импорт базы данных Контроль ЧС


Технология импорта базы данных Контроль ЧС в основном та же, что и в преды­
дущем случае. Как вы помните, исходная база данных существует в среде FoxPro.
Поскольку в программном обеспечении Access 2000 отсутствует конвертер фор­
мата FoxPro, на первом этапе надо импортировать файлы данных в Access 97 (где
нужный конвертер есть), а уже затем, на втором этапе работы - из среды Access 97
fi
Access 2000. Снова подробно рассмотрим эти преобразования на наиболее
136 Конвертирование баз данных из других программных сред

| Ш Microsoft Access ••Jnlxl


J File Edit View Insert l o o Is Window Help !
j D e£ t •• v ' :. *; •- ':}:.- а л - . • °5 / - ?
с • d b l : Database •IJalxl
Щореп k £ Design i t ] New > -a "V :':;: 111

Objects llTilBCreate tabte in Design v i e w B


S]J Create table by using wizard
П
0J Create table by entering data
Щ CLRES
[1 Ш Filel

в ^^ Щ MYI4
u
=i И И Ш
Щ
REGION
TIPCHS
_-, ЯШ
^ ЧЙР Щ UtCRCHS
«•-J*
•Ш Менеджер

Groups ЦП) Назначение


(ПИ Приборы, представленные на рынке2

^ l| ЦЩ Страны

1
Ш Типы приборов
ШВ Фирмы

<1 1 >
Рис. 7.12

показательном примере - на файле ES_oper.dbf, одном из тех, где сосредоточена


вся основная фактическая информация.

Первый этап: импорт данных из FoxPro в Access 97


Как выглядит исходная запись базы данных Контроль ЧС в формате DBF среды
FoxPro, показано на рис. 7.13.
Последовательность действий при конвертации указанного файла практичес­
ки полностью совпадает с первым этапом импорта базы данных БД ЧЭС. Еще раз
перечислим необходимые шаги, но очень кратко.
1. Откройте окно базы данных в Access 97. В принципе можно было исполь­
зовать любую БД в Access 97, так как импортируемый файл в ней долго
не задержится. Но ради чистоты эксперимента все же откройте новую
базу данных в Access 97 и назовите ее dbl.mdb, как и будущую БД
в Access 2000. Однако поместите открытую вами базу данных в другую
(по сравнению с dbl.mdb в Access 2000) папку, чтобы программа Windows
не возражала, так как одновременное присутствие на одном жестком дис­
ке Access 97 и Access 2000 может вызывать конфликты. Окно этой пустой
базы данных показано на рис. 7.14.
Импорт базы донных Контроль ЧС 137

Li I
фалл
И НИМИ
Правка Поиск

Спраьм
гн^п
Республика Кони
Усинск

ДяТЙ ЧС : 22/05/97

Виц ЧС: Аварии на нефтепроводах

В 28 км от города Усинска произошел разрыв магистрального подземного нефтепровода диаметрам


700 мм- Разлив нефти на поверхности около 2000 кв. метров. Нефтепровод перекрыт. Ведутся работы
по очистке загрязненной территории. МЧС РФ проинформировано. Причина и ущерб аварии
устанавливаются

А
Рис. 7.13

2. Войдите в меню базы данных и задайте ряд команд: Файл => Внешние дан­
ные => Импорт.
3. Найдите файл ES_oper.dbf в исходной БД (см. рис. 7.15). Не забудьте ука­
зать в этом окне тип выбранного файла.
4. Щелкните по кнопке импорт |.
5. В ответ на сообщение Выполнен импорт ES_oper, щелкните по кнопке ОК.
6. В окне базы данных появится новая таблица ES_oper.
Если вы теперь откроете таблицу ES_oper, (см. рис. 7.16), то увидите, что
даты в исходной и в импортированной базах данных совпадают и отображаются

^ Microsoft Access l-ln|x|


Q& У _fi - -a ®
0> d b l : база данных гЗ
ПИ Таблицы _§1 Запросы ) E l Форк Отчеты S Макросы «<£ Модули

-оздать

[Готово NUM

Рис. 7.14
1 38 Конвертировоние боз данных из других программных сред

Импорт
~3 т\ &\тЩ --ГИГ
Имя
J ] Classp.dbf
1 Размер 1 Тип
1 Кбайт DBF
j Изменен
10/16/19..
1 d Импорт 1

_j] Classq.dof 1 Кбайт DBF 10/16/19.. Отмена I


_j] Classr.dbf 2 Кбайт DBF 09/01/19..
Отбор...
_j] Classt.dbf 1 Кбайт DBF 04/01/19..
_d] Classtr.dbf 1 Кбайт DBF 04/01/19..
_j] Es_dg dbf 1 Кбайт DBF 04/01/19..
&Щ*1Л!Ж.ВВ 975 Кбайт DBF 04/26/19..
j ] Pegion.dbf 6 Кбайт DBF 03/29/19..
_j] Region_d.dbf 1 Кбайт DBF 03/26/19.,
^yj Tipchs.dbf 13 Кбайт DBF 10/07/19.. "
Найти файлы, отвечающие условиям:
Имя ф зила: _jj Текст/свойство:
+ w
Хип файлов: Microsoft FoxPro ( .dbf) \ Дата изменения:

По умолчанию устанавливаются не все типы файлов. Для их добавления служит кнопка "Выбор компонентов" в
разделе "Доступ к данным" при устано&г.е. Другир типы данных есть и в Ofhce 97 V'aluPack.

Найдено файлов: 20.

Рис. 7 15

Microsoft Access •MJnlxll


о с#и § а ? ©, -' ' 25- an- og-^l- О
м- в ' § а ? m ' • * <*'' SI XI ъъ~~ ** »*•* &-М- 5)
М ES O P E R : таблица ШШ-ЬЫ
DAY | OBJ | KES | SES I TES | DEXU | CES | Ob_iJ
• 01/01/1997 11320210 30115 0 Кемеровская об. 01/01/1997 Ново
01/01/1997 11800340 30106 D 01*1/1997 Стер
01/01/1997 12711615 30110 0 Ханты - Манснйс! 01/01/1997 Окгя!
01/01/1997 11450010 10603 0 01/01/1997 Мое»
01/01/1997 11450010 10Б03 0 Москва 01/01/1997 Mock
01/01/1997 11490010 10206 0 01/01/1997 Новп
01/01/1997 11051467 10201 0 01/01/1997 ШКОТ
01/01/1997 11410050 10206 0 Ленинградская о 01/01/1997 ВОЛК
01/01/1997 11920280 10206 0 09/29/1997 Нижн
: 01/01/1997 11710450 10101 0 01/01/1997 Тобо
01/02/1997 11410410 10206 0 01/02/1937 # CBBTI
01/02/1997 11450010 10903 0 09/29/1997 МоСк
01/02/1997 11B70240 10200 0 01/02/1997 Сосн
01/03/1997 12441110 10603 0 10/27/1998 Били-]
3J П.» -I'll 1 . |.l !>•! «a 6348 •I _1 -J
•1 1 •
jPe КИИ Таблицы ним ' ' '••"'

Рис. 7.16

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


свободно: проблем, которые пришлось решать при импорте предыдущей БД.
в этом случае не будет. Переходите ко второму этапу конвертации.
Импорт базы данных Контроль ЧС 139

Второй этап: импорт данных из Access 97 в Access 2000


Импорт файлов на втором этапе происходит практически так же, как и па первом,
однако стоит отследить имеющиеся различия. Итак, второй этап включает в себя
следующие шаги:
1. Откройте окно базы данных в Access 2000 (см. рис. 7.12).
2. Войдите в меню базы данных, а затем задайте ряд команд: File => Get
External Data => Import (Файл =» Внешние данные => Импорт).
3. Найдите файл ES_oper.dbf в исходной базе данных (см. рис. 7.15). Чтобы
файлы с таким расширением были видимыми, предварительно укажите в этом
окне соответствующий тип файла (или «Все файлы»).
4. Щелкните по кнопке Вт import |.
5. На появившееся сообщение Successfully imported 'FILE1' ('FILE1' успеш­
но импортирован) следует ответить ОК.
6. В окне базы данных появится новая таблица ES_oper.
Пока все в порядке, но не забывайте, что вы импортировали только один файл,
хотя и самый большой - ESoper. Однако в базе данных Контроль ЧС содержит­
ся еще много словарных файлов. Проведите для каждого из них аналогичную
двухэтапную процедуру импорта.
Опустим промежуточные детали, подробно рассмотренные на примере файла
ES_oper. На рис. 7.17 представлено окно новой базы данных в Access 2000, в кото­
рой собраны наконец все файлы - как свои, «родные», так и импортированные.

У Microsoft Access ГЛ5ТЗП


File Edit View Insert Tools Window Help

СПЙ aa у *^ b- ОД ' a" a s * ! - GJ


dbl: Database R3
Щ1]0реп k £ Design JDNew X

Objects 0J Create table in Design view a CLASSQ


Ej Create table by using wizard
m CLASSR
0j Create table by entering data
m ClASST
•ED CLASSA
m CLRES
CLASSC
m ES_OPER
И CLASSCC
m Filel
11 ClASSD
m MVN
Ш CLASSE
m REGION
m CLASSG m REGION_D
m CLASSL m TIPCHS
Lroups m CLASSO m UKRCHS
CLASSP
*m М е н е д ж е р
.i 1 ;
Sf>
Рис. 7.17
140 Конвертирование баз данных из других программных сред

В заключение надо русифицировать имена полей в файлах, подобно тому как


это было показано на рис. 7.11 для файла Filcl из базы данных БД ЧЭС. Посвя­
щать изменениям каждого файла по отдельному рисунку нет смысла - файлоц
слишком много.
Кроме того, эти изменения будут рассмотрены в последующих главах, когда
речь пойдет о программировании в базе данных.

Резюме
1. По мере появления новых, более совершенных СУБД все актуальнее стано­
вится проблема использования данных, которые накоплены в информаци­
онных банках предыдущих, в том числе и морально устаревших версий.
2. В решении этой проблемы на сегодняшний день наметились два основных
направления:
- применение конвертеров, которые преобразуют данные из одного форма­
та в другой. Наборы таких конвертеров, хотя и не всегда достаточно пол­
ные, есть практически во всех СУБД, и пока это основной путь решения
проблемы;
- использование технологии ODBC (Open Database Connectivity). ODBC -
открытый интерфейс доступа к базам данных из прикладных программ
Он позволяет работать с документами «чужих» для конкретной БД фор­
матов.
В настоящей главе рассмотрен первый способ решения проблемы.
3. Как показывает опыт, при конвертировании баз данных, кроме собственно
преобразования форматов СУБД, могут возникнуть еще две трудности:
- несовпадение кодов словарей;
- различие между форматами даты и времени в разных БД.
4. В процессе конвертирования, который описан в настоящей главе, необходи­
мо преобразовать в программную среду Access 2000 базу данных БД ЧЭС,
сформированную в среде Clarion 3.0, и базу данных Контроль ЧС, разрабо­
танную в программной среде FoxPro 2.5. Третья БД в этом интегрированном
банке данных - Контрольно-измерительные приборы - создана непосред­
ственно в среде Access 2000. В результате все эти базы данных должны функ­
ционировать совместно.
5. При переносе файлов из одной СУБД в другую необходимы повышенные
осторожность и внимание, так как различие в исходных установках, поло­
женных в основу той или иной СУБД, может привести к самым неожидан­
ным коллизиям.
Глава VIII
Общие вопросы
программирования
в Access

• Сравнительная характеристика языков


программирования в Access
• Выбор языка программирования

Сравнительная характеристика языков


программирования в Access
В Access пользователь может работать с тремя языками программирования:
• SQL (Structured Query Language) - структурированный язык запросов. Это
формальный стандартизованный язык высокого уровня, содержащий сред­
ства непроцедурной (не требующей программирования) спецификации за­
просов;
• макросы;
• VBA (Visual Basic for Applications) - объектно-ориентированный язык про­
граммирования.

Язык SQL
Язык SQL - это внутренний язык Access 2000, на котором формулируются запро­
сы. В принципе SQL используется не только в среде Access 2000; он вообще широ­
ко применяется в работе с реляционными базами данных. Поскольку сегодня
142 Общие вопросы программирования в Access

подавляющее большинство БД относится именно к этому классу, язык SQL зна­


чительно облегчает пользователю работу с различными СУБД.
Запросы - основной способ получения сведений пз базы данных. С помощью
запроса вы можете отобрать определенную информацию и рассортировать ее по
значениям полей. Очень важно, что запросы позволяют фильтровать данные, то
есть выбирать именно ту информацию, которая удовлетворяет определенным, за­
ранее заданным условиям. Запросы можно применять при создании форм, отче­
тов, страниц доступа к данным. Использование запросов удобно при разработке
таблиц и добавлении новых записей в уже существующие таблицы, при удалении
записей, поиске дублирующихся данных и т.д. Работая с языком SQL, вы исходи­
те из существующей организации БД и более или менее стандартного набора опе­
раций, хотя структура самого запроса иногда бывает достаточно сложной. Прав­
да, в запросе нежелательно использовать слишком разветвленные логические
выражения: формального запрета на них нет и запрос построить можно, однако
получившаяся структура будет громоздкой и неудобной. (Для подобных случаеь
в Access есть средства программирования.) Чтобы запустить запрос, следует создать
событие - команду, которая распознается формой, элементом управления формы
или отчета. Таким событием может стать, например, щелчок по какой-либо кон­
кретной кнопке. Однако пользователь должен еще задать область применения за­
проса, так как он не запускается автоматически даже при возникновении события.

Макросы
Макросы, или макрокоманды, представляют собой заранее созданные списки дей­
ствий - программы, которые выполняются после щелчка пользователя по кнопке
или после других определенных действий (возникновение ошибки, открытие, за­
крытие элемента управления и т.д.). Каждое действие макроса выполняет опреде­
ленную операцию: например, установка значения, открытие или закрытие фор­
мы, диалогового окна и др. Макрос предназначен для объединения нескольких
различных действий, представляемых макрооператорами, в одну процедуру, ко­
торая легко может быть вызвана. В отличие от SQL, макрооператоры тесно связа­
ны с командами данного программного продукта, в частности Access.
В макросах все команды обычно выполняются по очереди. Исключением явля­
ется ситуация, когда в макрос введено некоторое логическое условие, которое
может изменить последовательность операций.
Макрос в среде Access состоит из перечня действий, которые в пошаговом ре­
жиме выполняются в случае наступления определенного события. Допустим, мак­
рос запускается, когда пользователь щелкает по командной кнопке, закрывает
форму или активизирует панель управления текстовым документом, открывшим­
ся в окне. Макрос может выполняться также при выполнении тех или иных усло­
вий. Например, условные макросы могут отображать окно сообщения, если
вводимые в поле данные имеют определенное значение. Макросы создаются
в специальном окне макросов - Macro Builder (Построитель макросов).
Сопоставляя возможности макросов и языка SQL, отметим, что область при­
менения первых заметно шире. Макросы могут использоваться для ситуаций,
Сравнительная характеристика языков программирования в Access 143

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


полнения разветвляющихся операций (например, в условных логических выра­
жениях). Макросы удобны для простых ответов на события, но имеют свои огра­
ничения и не всегда помогают пользователю справляться с разнообразным
сложностями, возникающими в реальной практике, особенно если речь идет об
Access. Например, нельзя использовать макрос для того, чтобы задать обработку
события или выполнить цикл действий по записи транзакций. Макрос не возвра­
щает значение, поэтому не может применяться для извлечения введенной пользо­
вателем информации, рассчитанного значения или результата сравнения.
Теоретически нет препятствий к тому, чтобы включить в макрос процедуру
VBA. Однако на деле все обстоит скорее наоборот: макросы используются как
составная часть этих программ, тем более что любой макрос легко конвертиро­
вать пли включить в процедуру VBA.

Процедуры VBA
Как уже отмечалось, макросы обычно представляют собой только линейную по­
следовательность действий. Но на практике этого недостаточно - требуется весь
аосенал средств программирования: ветвления и циклы, вызов вспомогательных
процедур и передача параметров, организация диалога с пользователем, проверка
и изменение состояния различных элементов документа и т.д.
По сравнению с SQL и макросами язык VBA является более современным, раз­
витым и сложным, поэтому может использоваться для выполнения любых дей­
ствий в ходе работы приложения. Данный язык включает в себя объекты, семей­
ства, события, методы, процедуры, операторы и свойства. Программа VBA - это
процедура, которая выполняет определенную операцию или рассчитывает и воз­
вращает значение. Кроме того, очень важно, что VBA - язык программирования,
управляемый событиями. Иначе говоря, с помощью программы VBA можно уста­
новить необходимую реакцию объекта Access на определенное событие. Итак,
язык VBA позволяет сделать все, что выполняют макросы, и даже существенно
больше. В принципе с помощью VBA можно создавать и запросы. Однако специ­
ализированный язык, каким является SQL, приспособлен для этого значительно
лучше. (Ниже будет показано, что использование языка SQL в самом деле замет­
но упрощает построение запросов.)
Существуют два вида процедур VBA: подпрограммы (subprocedures) и функции.
Подпрограммы выполняют одну или больше операций, однако не возвращают
значение. Функции не только выполняют операции, но и возвращают значение.
В справочной системе Access вы найдете множество примеров процедур событий.
Эти процедуры можно скопировать и связать со свойствами события элемента
управления. Затем вы можете изменить код и имена переменных, чтобы они соот­
ветствовали вашему приложению. Для создания собственных процедур исполь­
зуйте Code Builder (Построитель программ).
После проведенного краткого сопоставления сформулируем некоторые реко-
(ендации по выбору языка программирования.
Cofiiii rue - это действие, которое может инициироваться пользователем, оператором VBA или самой
сие i смой.
144 Общие вопросы программирования в Access

Выбор языка программирования


В приложении легко создавать и применять макросы и SQL-программы, но иног­
да вам придется использовать язык VBA. Рассмотрим такой пример. Сообщения
об ошибках, которые выводит система, обычно носят довольно абстрактный ха­
рактер и скорее вызывают новые вопросы, чем дают ответы. Чтобы облегчить ра­
боту пользователя, лучше отключить вывод таких сообщений и заменить их на
короткие информативные «диагнозы», дополненные советами по решению про­
блем. Все это можно сделать только с помощью программы VBA.
Макросы выполняются с заданными значениями аргументов. Аргументы - это
параметры, используемые при вычислении значений функций и при выполнении
процедур. Аргументы заключаются в круглые скобки. Если в ходе работы значе­
ния аргументов требуется изменить, то вы должны написать процедуру VBA. Как
видите, выбор между макросами и кодом VBA зависит от того, что вы хотите сде­
лать. Макросы могут осуществлять простые операции - такие как просмотр отче­
та или выключение панели инструментов. Некоторые задачи можно выполнять
только с помощью макросов (например, определенные операции при первом за­
пуске базы данных или установление соответствия между комбинацией клавиш
и командой).
Access 2000 содержит много встроенных внутренних функций наподобие
Date() и Pmt(), которые возвращают значения при указании аргументов. Внутрен­
ние функции доступны и для макросов. Если вы хотите сами создать функции, то
должны использовать соответствующие процедуры VBA. Кроме того, эти про­
граммы позволяют создавать и модифицировать объекты точно так же, как и мас­
тера. С помощью процедур VBA вы можете изменить оформление и функции эле­
ментов управления формы и других объектов. Отметим, что процедуры легко
открывать, поскольку они хранятся как модули. (Макросы содержатся отдель­
но во вкладке Macro (Макросы) окна базы данных.)
Итак, программирование с помощью VBA имеет ряд преимуществ. Еще раз
подчеркнем их:
• процедуры VBA находятся внутри определения формы или отчета. Если вы
перемещаете или копируете эту форму или отчет в другую БД, то процеду­
ры VBA автоматически перемещаются вместе с ней, в отличие от макросов
(последние придется переместить или скопировать отдельно);
• если ни одна из встроенных в систему функций не удовлетворяет-вашим
требованиям, то язык VBA позволяет создавать процедуры, состоящие из
специализированных функций. Впоследствии они могут также использо­
ваться вместо сложных выражений;
• макросы обрабатывают все множество записей. С использованием процедур
VBA можно просматривать и обрабатывать записи по отдельности, изменяя
команды в зависимости от установленных значений;
Q аргументы макроса нельзя изменить во время его работы. Напротив, когда
выполняется процедура VBA, ей можно передавать другие значения или
определять переменные в качестве аргументов;
Резюме 145
J процедура VBA позволяет обнаружить ошибку, перехватить сообщение о ней
и заменить его на более информативный для пользователя совет;
• язык VBA чрезвычайно удобен для создания определений объектов БД и для
манипулирования ими. Вы можете изменить свойства этих объектов, а так­
же добавить или удалить элементы управления.

резюме
1. Access предоставляет пользователю возможность работы с тремя языками
программирования:
- SQL (Structured Query Language) - структурированный язык запросов.
Это формальный стандартизованный язык высокого уровня, содержащий
средства непроцедурной (не требующей программирования) специфика­
ции запросов;
- макросы;
- VBA (Visual Basic for Applications) - объектно-ориентированный язык
программирования.
2. Каждый из этих языков занимает определенную функциональную нишу.
В настоящей главе был приведен краткий обзор возможностей этих языков
и даны общие рекомендации по их использованию.
Глава I X
Программирование
на я з ы к е SQL
• Типы запросов
• Запросы на выборку
• Создание объединенной выборки
• Запрос на удаление записей
• Удаление дублирующихся записей
• Перекрестный запрос
• Работа со средой Access 2000 без ее инсталляции

Как уже говорилось в предыдущей главе, главной «специальностью» язык


SQL является конструирование запросов пользователя к базе данных. Поэто
му программирование на языке SQL, в основном, - это формирование таки:
запросов.

ТИПЫ запросов
Запросы являются основным средством просмотра, изменения и анализа инфор
мацни, которая содержится в одной или в нескольких таблицах базы данных.
В этой главе, а также в главах 10 и 11, рассматриваются запросы, относящиеся
к предметной области, обсуждаемой в настоящей книге.
Перечислим важнейшие типы запросов:
• select query (запрос на выборку);
Q action query (запрос на изменение);
• SQL query (SQL-запрос).
Гипы запросов 147
Запросы на выборку позволяют извлечь информацию, рассчитать показатели
И создать перекрестные ссылки, но не изменяют данные в таблицах. Запросы на
изменение дают возможность корректировать информацию, которая содержится
в таблицах.
Существует четыре вида запросов на изменение:
j make-table query (запрос на создание таблицы) - создает новую таблицу на
основе данных, которые уже размещены в одной или нескольких таблицах;
j delete query (запрос на удаление) - удаляет все записи из одной или не­
скольких таблиц на основании критериев, заданных пользователем;
• append query (запрос на присоединение) - добавляет целые записи или
только указанные поля в одну пли больше таблиц;
• update query (запрос на обновление) - изменяет данные в существующих
таблицах на основании информации в окне конструктора.
Эти запросы могут формироваться в окне конструктора запросов.
SQL-запросы предназначены для решения более сложных задач и не создаются
в названном окне, а кодируются с использованием операторов SQL. Ниже пере­
числены варианты SQL-запросов:
3 union query (запрос на объединение) - совмещает в одно поле поля, кото­
рые расположены в одной или нескольких таблицах или запросах;
J pass-through query (запрос к серверу) - позволяет забирать информацию
непосредственно из ODBC-таблиц (ODBC - Open Database Connectivity,
средства работы с открытыми базами данных), так как напрямую связыва­
ется с сервером, а не с таблицами системы Access;
• data definition (запрос па определение данных) - вносит изменения в опре­
деление таблицы, то есть позволяет формировать и удалять таблицы, добав­
лять в них поля и создавать их индексы;
• subquery (подзапрос) - создает оператор внутри существующего запроса на
выборку или изменение. Подзапрос выбирает подмножество записей, уже
извлеченных главным запросом.
Выполнение любых задач, связанных с таблицами, подразумевает использова­
ние языка SQL. Запросы первых трех типов, перечисленных выше, встраиваются
в средство просмотра SQL в окне запроса. Чтобы сформировать подзапрос, введи­
те команду SQL SELECT в строке Критерии (Criteria) сетки Design (Конструктор).
Запросы в обеих редакциях Access (97 и 2000) могут создаваться как с помо­
щью конструктора (Query Design), так и посредством мастера (Query Wizard). На
наш взгляд, конструктор удобнее: во-первых, его операции оформляются более на­
глядно, во-вторых, из конструктора легко переходить к инструкциям в форме SQL
и наоборот. Тем не менее на конкретном примере будет показано, как формиро­
вать запрос при помощи мастера.
Однако, как вы помните, есть и третья форма представления запроса - ин­
струкции SQL. Между запросом, сформированным посредством конструктора,
и инструкцией SQL существует жесткая и однозначная связь. Поэтому в дальней­
шем мы будем показывать для каждого создаваемого запроса соответствующую
ему инструкцию SQL, а также подробно рассматривать операторы, которые вхо-
Дяг в ее состав.
148 Программирование на языке SQL

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

Формирование запроса с помощью мастера


Откройте окно базы данных и щелкните по кнопке gl Queries |, чтобы перейти во
вкладку Queries (Запросы). Затем выберите опцию Create query by using Wizard
(Создать запрос с использованием мастера).
На экране появится (см. рис. 9.1) окно Simple Query Wizard (Мастер простых
запросов), где содержится вопрос: Which fields do you want in your query? (Какие
поля вы хотите включить в свой запрос?). Также мастер предупредит: You can
choose from more than one table or query (Вы можете выбрать более чем одну таб­
лицу или запрос). Выберите таблицу Страны и с помощью знакомой вам кнопки
» | перенесите все ее поля в будущий запрос. Затем щелкните по кнопке Next.
Пропустите появившееся промежуточное окно, где вам предлагается задать имя за­
проса (по умолчанию это будет Страны Query). Теперь на экране вы видите табли­
цу (см. рис. 9.2), на которую ориентирован сформированный запрос. Одновременно

Simple Query Wizard


Which fields do you want in your query?

You can choose from moie than one table or query

Tables/Queries

|ТаЫе Страны d
Available Field?: Selected Fields

Код
Страна
ШИШЕ

Cancel Next > Finish

Рис 9 1
Запросы на выборку 149

Ы Microsoft Access Щ]
File Edit View Insert Format Records Tools
i Window Help

Ы, - 0 # B. v- • -.
1
lis Страны Query: Select Query HIsID ^
Код | Страна | Примечания
01 Страна не укч:
• 02 United Kingdom
03 USA
04 Германия
05 Италия
06 Россия
07 США
08 Финпяндия
09 Франция
10 Швейцария
* А

Рис 9 2

во вкладке Queries (Запросы) окна базы данных появится имя вновь созданного
запроса - Страны Query.

Формирование запроса с помощью конструктора


Теперь сформируем тот же самый запрос с использованием конструктора.
Как и при запуске мастера, откройте конструктор, выбрав вкладку Queries окна базы
данных. Теперь активизируйте опцию Create query in Design View (Создать запрос
в режиме конструктора). После этого вы увидите окно Show Table (Показать табли­
цу). В нем вам нужно выбрать таблицы и/или запросы, на основе которых следует
сформировать запрос (см. рис. 9.3). Как мы уже решили, это будет таблица Страны.
На экране появится окно конструктора запроса - основного инструмента для по­
строения запроса (см. рис. 9.4). В окне вы видите включенный в него макет таблицы
Страны, которую вы только что выбрали. Кроме того, в окне расположены поля
репликации (в данном случае они нас не интересуют) и поля таблицы: Код, Стра­
на и Примечание. Щелкните дважды по каждому из них, и эти поля будут поме­
щены в бланк запроса, расположенный в нижней части окна (см. рис. 9.5). Как
видите, запрос действительно очень прост, и на этом его формирование можно счи­
тать завершенным. Если вы теперь закроете окно конструктора с помощью обычной
кнопки-«крестика», то Access 2000 попросит вас подтвердить выполненные операции
или внесенные изменения (см. рис. 9.6): Do you want to save changes to the design of
query 'Query Г? (He хотите ли вы сохранить изменения, сделанные в запросе За­
прос 1?). Если вы соглашаетесь, система предложит назвать запрос. По умолчанию бу­
дет предложено имя Query с каким-либо порядковым номером - в нашем случае, как
показано на рис 9.6, это Queryl. Затем вы выходите в окно базы данных (см. рис. 9.7).
150 Программирование на языке SQL

1 Show Table •••


Tables J Queries | Both | Add

Close
ES OPER »
Filel
MYM
REGION
REGION _D
TIPCH5
UKRCHS
Менеджер
Назначение
Приборы, представленные на рынке2

Типы приборов
Фирмы

Рис 9 3

Ы Microsoft Access - IQueryl: Select Query]


[§l File Edit View Insert Query Tools Window Help -ISlxf
D c£ У , 5 • п л • rJ' ^ -^ • (3 .
•• У . &• ! <Ъ Е А» - Cf V

Страны T1
s_GUID A
sjjneage

Страна
Примечания _^

dJ ^

Рис 9 4

Перед вами та же БД, что была показана на рис. 7.17, только там открыта вклад­
ка Tables (Таблицы), а на рис. 9.7 - вкладка Queries (Запросы). Дальше есть два
варианта. Вы можете открыть запрос из окна базы данных или щелкнуть по кноп­
ке { |. В обоих случаях произойдет запуск запроса, и на экране появится таблица
(см. рис. 9.2).
Запросы но выборку 151

Ы Microsoft Access шз
File Edit Vie, I n » it Cjuei^ Ton I; Window Help

D \3 У X 4n IB Ь - сю - й' °S -M - (*) -
г5 All й
1
lis Queryl: Select Query шш 3
Страны
s_GUID ~3
1
sjjneage
Код
Страна
Примечания _^

Field
an Страна Прнм»=-чзнич —
Table LTpaHti Страны Страны —
Sort
Shov-1 0 0 0
riteria •
or
-1 1 >г
d

Рис 9 5

Microsoft Access

Do you want to save changes to the design of query 'Queryl'?

Yes No Cancel

Рис 9 6

Представление запроса на языке SQL


Теперь посмотрим, как будет выглядеть наш запрос на программном языке. Пере­
веденный на этот язык, он называется «инструкция SQL» и представляет точный
анало1 запроса, сформированного в окне конструктора, представленный в кодах
языка SQL Предполагается, что если бы пользователь захотел написать данный
запрос на SQL, то он (запрос) выглядел именно так, как показано в этой инструк­
ции. Чтобы увидеть такую инструкцию SQL, дважды щелкните правой кнопкой
мыщц в верхней части окна конструктора, где уже сформирован запрос (см. рис 9.5).
В появившемся контекстном меню выберите опцию SQL View (Режим SQL).
В результате вы перейдете в окно просмотра инструкций SQL. Это же окно мож­
но открыть и другими способами:
CI в меню View (Вид) панели меню Microsoft Access активизировать опцию
SQL View (Режим SQL);
152 Программирование на языке SQL

j File Edit V i e * Incert Toole Window Help

Е
Щ о р е п j ^ Design cflNew X е 7-"|:::Г YA

Create query in Design view


Create query by using wizard
(5 Query 1

# fffiWffif

Рис 9 7

а щелкнуть по стрелке прокрутки рядом с кнопкой • -1 на панели инстр\


ментов Microsoft Access, а затем снова выбрать SQL View.
Текст инструкции SQL приведен на рис. 9.8. Рассмотрим ее подробнее.
Любой запрос в форме SQL состоит из нескольких ключевых слов и начинает
ся с команды SELECT. Она определяет возвращаемую информацию как набор запи
сей и указывает, какие поля должны быть выбраны в ответ на запрос. Если пост
SELECT нет других ключевых слов, то будут возвращены все записи. Следующп
элементы строки, которая начинается ключевым словом SELECT, - это Код, Стран
и Примечания. Они задают поля, включаемые в результат запроса.
Согласно синтаксическим правилам языка SQL, перед именем каждого поля
указывается имя таблицы, которой принадлежит это поле. Названия таблицы и поля
разделены точкой, а каждая пара значений (например, Страны.Код) отделяется
от следующей пары запятой.
Ключевое слово FROM определяет таблицу, откуда производится выборка. В дан
ном простейшем запросе используется одна таблица - Страны, не связанная с другп
ми. Поэтому после FROM никаких ключевых полей нет.
Ключевой параметр WITH OWNER ACCESS OPTION не является обязательным. Он по
зволяет пользователям, которым обычно не разрешается работать с базовыми
таблицами, выполнить запрос и просмотреть его результаты - поля, включен
ные в запрос Таким образом, пользователь получает право ограниченного досту­
па к данным таблицы.
Запросы на выборку 153

I Q Microsoft Access HJnlxl


iy File Edit View In;eit Qnei/ Tools Window Help

»
1 is1 Query 1 : Select Query • _1пЫ_il
SELECT Страны Код, Страны Страна, Страны Примечания
FROM Страны
WITH OWNERACCESS OPTION,

Рис 9 8

Запросы с использованием групповых операций


Эта группа запросов предназначена для первичной обработки полученной ин­
формации - ее суммирования, осреднения и т д. Такие запросы особенно полез­
ны, когда нужно регулярно представлять обобщенные справки для руководства
компании.
Еще один пример простого запроса: необходимо получить справку о том, сколь­
ко человек погибло в результате различных аварий за два с лишним года - с нача­
ла 1997 по март 1999 гг. Полная информация по этому вопросу аккумулирована
в файле Es_oper. В каждой записи о конкретной аварии сведения о жертвах со­
держатся в поле В том числе погибло.
Запрос, построенный таким образом, востребует данные только из одной таб­
лицы - Es_oper.
Чтобы сконструировать этот запрос, сначала, как и в предыдущем примере, от­
кройте окно базы данных. Затем задайте команды Create Query in Design view =>
Show Table (Создать запрос в режиме конструктора => Показать таблицу), как по­
казано на рис. 9.3. В появившемся окне выберите опцию Esoper. На экране воз­
никнет окно конструктора запроса (см. рис. 9.9). В макете таблицы E s o p e r на этом
рисунке найдите интересующее вас поле В том числе погибло и щелкните по нему
Дважды.
Итак, поле В том числе погибло зафиксировано в бланке запроса. Теперь по­
думаем, как получить сумму значений этого поля по всем записям. Суммирова­
ние - стандартная операция, и пользователю не надо специально организовы­
вать сложение (хотя при большом желании вы можете сделать это). Для этого
^ожно использовать опцию Групповые операции. Щелкните по кнопке т\ на
панели инструментов базы данных, и в бланке запроса появится дополнитель­
ная строка Total (Итоги). (Обратите внимание, что на рис. 9.4 ее нет.) Если вы
те
перь щелкнете в строке Total на пересечении с полем В том числе погибло, то
154 Программирование на языке SQL

Ы Microsoft Access I-1D|X|


I File Edit Viev Insert Query Tools Window Help
j D \3 У
IE - H & 4a !' r§] . °П г А"
1
{is Query! : Select Query ВЕЗ •

Lh.
ES_OPER
Пострадало E-cercclJ
Б том числе рамем
Рамено детей |
Б том числе погиб
Погибло детей _jj

LJJ
1
J
Field: Е: том чиспе погиб п —
Table: ES OPER —
Total: ^^^^^^^^
Sort: I
Show: А>лЭ П П
Criteria: flin

or: Мах
Count ±>r
StOev
Var
First .
«1 1 •!

Рис. 9.9

появится стрелка прокрутки, которая позволяет открыть список групповых опе­


раций:
• Group by - команда, включаемая в инструкцию SQL. Эта опция позволяе
добиться того же результата, что и выполнение следующих действий: созда
ние итогового запроса в окне запроса, а затем выбор для соответствующел
поля групповой операции в строке Total (см. рис. 9.9);
• Sum - функция, выполняющая суммирование значений в поле;
• Avg - операция, позволяющая вычислить среднее арифметическое набора
чисел, которые содержатся в указанном поле запроса;
• Min - функция, возвращающая минимальное значение из набора значений
которые содержатся в указанном поле запроса;
• Мах - функция, возвращающая максимальное значение из набора значении
которые содержатся в указанном поле запроса;
• Count - операция, с помощью которой вычисляется количество записей
возвращаемых запросом;
• StDev - функция, которая возвращает значение среднеквадратичного от­
клонения. Последнее вычисляется исходя из набора значений, содержащих­
ся в указанном поле запроса;
Запросы на выборку 155
• Var - функция, возвращающая значение дисперсии. Дисперсия вычисля­
ется в соответствии с темп значениями, которые содержатся в указанном
поле запроса;
j First - операция, возвращающая первое число из набора значений, которые
содержатся в указанном поле запроса;
j Last - операция, возвращающая последнее число из набора значений, кото­
рые содержатся в указанном поле запроса;
j Expression - функция, возвращающая результат выражения, которое содер­
жится в указанном поле запроса;
• Where - функция, которая определяет, какие записи из таблиц, перечислен­
ных в предложении FROM, следует включить в результат выполнения инструкций
SELECT, UPDATE или DELETE.
Из приведенного списка вы, конечно, выберете Sum, так как вас интересует
(если вы еще об этом не забыли) суммарное количество погибших. Активизиро­
вав соответствующую опцию (см. рис. 9.9), закройте окно конструктора запроса
[I сохраните изменения (см. рис. 9.6). Теперь следует назвать новый запрос или
согласиться с именем, предлагаемым по умолчанию (ято, конечно же, Query с по­
рядковым номером, - в данном случае Query 2). Под полученным именем новый
запрос будет «прописан» в окне базы данных. Если вас такой вариант не устран­
яет, вы можете воспользоваться кнопкой j j . Если вы теперь откроете этот зап­
рос, то получите ответ, представленный на рис. 9.10. Здесь указано имя функции
(Sum of), имя активного поля (В том числе погибло) и количество погибших за
весь период (4008 человек).

| В Microsoft Access HEIDI


File Edit View Insert Format
Records Tooh Window Help

His1 Query2 : Select Query B E I E 3 |


SumOIB том числе погибло |
• 400:3
LI 1

Рис. 9.10

Уже показанным раньше способом перейдем к инструкции SQL (см. рис. 9.11).
По сравнению с инструкцией SQL, изображенной на рис. 9.8, здесь появилось
Два новых элемента - AS [SurnOf В том числе погибло] и GROUP BY ES_0PER [В том числе
погибло]. Смысл первого из них состоит в следующем. В Microsoft Access имена
полей (здесь - поле В том числе погибло), указанные в режиме SQL окна запроса,
используются в режиме таблицы в качестве заголовков столбцов. Чтобы вывести
в
режиме таблицы другие имена столбцов (в нашем примере - SumOf В том числе
156 Программирование на языке SQL

Ш Microsoft Access
| File Edit Viev Insert Query Tools Window Help
пшш
[га - и
в1 Query2 : Select Query
ШЗ
ELECT E'j_OPER.[B топ числе погибло], Sum(E3_OPER.[6 том числе погибло]) AS
[SurnOfB том числе погибло]
FROM ES_OPER
1
GROUP BY ES_OPER,[B том числе погибло]
WITH OWNERACCESS OPTION;

Рис. 9.11

погибло), следует включить в инструкцию SQL зарезервированное слово AS. Это


бывает необходимо, если вы используете статистические функции в запросах, ко­
торые возвращают слишком сложные или повторяющиеся имена полей.
Таким образом, рядом с исходным полем В том числе погибло появляется новое
иоле суммы - SumOf В том числе погибло, поэтому и требуется добавить ключевое
слово AS. Что касается квадратных скобок, в которые заключены имена полей в ин­
струкции SQL, то здесь вы имеете дело со спецификой синтаксиса Access. Если имя
поля не содержит пробелов, Access автоматически помещает название в квадратные
скобки, а если содержит, то может и не поставить их. Поэтому советуем на всякий
случай всегда делать это (окружать имена полей квадратными скобками).
Смысл второго ключевого параметра - GROUP BY ES_0PER. [В том числе погибло] -
состоит в том, чтобы фиксировать необходимость ввода групповой операции по
полю ES OPER.[B том числе погибло]

Запросы с дополнительными условиями


Теперь несколько усложним задачу: введем в запрос критерии отбора. Поначалу
они будут довольно простыми, но постепенно станут усложняться. Как правило,
необходимость в запросах подобного типа возникает эпизодически - при анализе
каких-либо отдельных аспектов рассматриваемой чрезвычайной ситуации.

Запросы, в которых критерием является полное значение поля


Начнем с самого простого условия. Допустим, необходимо узнать, какие фирм
из общего числа предприятий, включенных в банк данных, работают в России. В>
фирмы перечислены в таблице Фирмы, и поиск по запросу будет проводиться
в ее пределах (пока вы создаем только простые запросы, то есть те, что отбирают
данные из одной таблицы). Как открыть окно конструктора запроса и включить
в бланк конструктора нужную таблицу, вы уже знаете. Поэтому начнем сразу с от­
крытого бланка (см. рис. 9.12).
В данном примере нас будут интересовать три поля: Код страны, Название
фирмы и Адрес. Введите их названия в бланк запроса, как вы уже делали это раныпс-
Запросы на выборку 157

Кодфц*ы
Название фир
Код страны
Адрес j j

I ,. i

Код страны Название фирмы Адрес —


Фирмы Фирмы Фирмы —
0 0 0
"06" •
<1 1 •г
Рис. 9.12

Чтобы отобрать именно российские фирмы, воспользуйтесь новым элементом -


критерием. Он вводится в строке бланка, которая так и называется - Criteria (Ус­
ловие отбора). В нашем случае критерий следует указать в единственном поле
таблицы Фирмы, связанном со страной - Код страны. Здесь вы вводите код Рос­
сии - 06 (см. рис. 9.12). Ясно, что это не самый удобный путь: придется или запо­
минать коды разных стран, или тратить время на поиски в специальном справоч­
нике. Проще будет расширить запрос, включив в него две или более таблицы. Мы
обсудим такой вариант чуть позже, а сейчас обратим внимание на один существен­
ный момент. Как вы заметили, в поле бланка запроса Criteria значение кода за­
ключено в прямые кавычки - "06". Когда вы задаете в Access какое-либо символь­
ное выражение в качестве фильтра, условия, критерия и т.д. и приводите это
значение полностью, Access 2000 поставит кавычки автоматически.
Заполнив бланк запроса, закройте окно конструктора. Когда вы подтвердите
выполненные действия (см. рис. 9.6), запрос будет включен во вкладку Query
окна базы данных. Если вы теперь откроете этот запрос, на экране появится таб­
лица, показанная на рис. 9.13. В ней перечислены 8 фирм, отобранных по при­
знаку страны.
Теперь посмотрим, как выглядит инструкция SQL для нашего запроса (см. рис.
9.14). В предыдущих примерах вы переходили в окно SQL из окна конструктора
запроса. Здесь такая возможность сохраняется, но проделать этот переход так же
Просто и из результирующей таблицы вида (см. рис. 9.13). Сначала щелкните правой
158 Программирование на языке SC

В Microsoft Access
File Edit View Insert Format PPC jfds X°oU Window Help

• ЙУ # El v'- ' • Sl- i0- ' nS-^l


M-HJQ? Si 5J ^ Yn
is 1 Query3 : Select Query
Код страны Название фириы Адрес
ОАО "Цвет" С06000 Дзержинск Ннжегор.:одской г,Сп
Нефть-Газ-Наука Москьа
НПП "ЭКОНИКС" 117071 Москва
ЭКОХЕЛП ИНСТРУМЕНТС Москва
АО "ЭКРОС" 199106 Санкт-Петербург
Петербургский институт ядерной физики РАН 188350 Ленинградская обл г Гатчина, Or,, ч
ОКБ ТЕСТ фирмы "Аналитические приборы" 198103 г Санкт-Петербург, Рижский пр 2[
ГЕОХИ РАН

R.eoid " I • II 7 ' | " | " | <,< В

~3
Рис. 913

Ы Microsoft Access гшъ


i File Edit View Insert Query Tools Window Help

is1 QueryS : Select Query


SELECT Фирмы,[Код страны], фирмы.[Название фирмы], Фирмы.Адрес
FROM Фирмы
WHERE (((Фирмы.[Код страны])="06"))
WITH OWNERACCES5 OPTION;

d
J"
Рис. 9.14

кнопкой мыши в строке имени указанно)') таблицы. Затем в появившемся к


текстном меню выберите, как и раньше, опцию SQL View (Режим SQL).
Наряду с теми ключевыми словами, которые вам уже знакомы, здесь вы ви­
дите новое - WHERE с сопутствующими ему параметрами. Это слово - ва
шее в базе данных, когда речь идет об отборе информации. Поэтому пара
WHERE соответствуют критерию, который вы раньше ввели в бланк запроса. -
WHERE не является обязательным, однако если оно присутствует, то должн
довать после FROM. Если не задавать условие WHERE, запрос возвратит все
таблицы.
Золросы на выборку
159

осы в которых критерием является неполное значение поля


• • южним условие, которое нужно задать в запросе. В таблице Filel собра-
Теперь>'<--' ' ", .^г- гг
омаШ'Я обо всех авариях, случившихся в 1995 году. Предположим, нас нн-
на " Н
т ппшь аварии на нефтепроводах. Конечно, можно отобрать те происше-
тересУ то по классификации БД отнесены к группе Аварии на магистральных
ствня ч
лТ :прс
проводах (иоле Наименование ЧС). Однако нам нужны данные об авариях
не ч видах нефтепроводов, а не только на магистрал
магистральных.
F ть пптой вариант: отбирать записи, у которых в иоле Характеристика ЧЭС
инакмся нефтепроводы. Но это слово может находиться в различном кон-
. т е попользоваться в разных падежах и т.д. В качестве критерия в запросе сле-
задать корневую часть слова, которая остается неизменной: в данном случае
«нефтепровод». (Если бы нас интересовали, например, аварии при добыче и транс-
оотнровкс нефти, то пришлось бы учитывать понятия «нефтепромысел», «нефте-
тобыча» и другие. Тогда в запросе фигурировал бы критерий «пефте».) Итак, вне­
сем слово «нефтепровод» в знакомую строку бланка запроса - Criteria (см. рис. 9.15).
Обратите внимание на синтаксическое оформление критерия. В отличие от пре­
дыдущего примера, здесь использован фрагмент текста, то есть часть поля. Поэто-
47 нам понадобятся, кроме прямых кавычек, еще и звездочки. Критерий будет
оформлен так: "«нефтепровод*" (см. рис. 9.15). К символьной последовательности,
помещенной в звездочки, Access 2000 всегда добавляет слово Like (Подобно). Та­
ким образом задается команда на поиск записей, содержащих подобную подстро­
ку. Как уже говорилось, кавычки вы можете и не ставить: Access 2000 не забудет

Ы Microsoft Access шш
! File Ed,t Vie*" Inneit Query Tools Window Help

;•; У Щ о g- J ° п 2 д | | " " „ [ft -Л © - ^ -

ОаШ 3
Filel 1
Бидь ЧГ =J
Наин еновани*
Дата ЧС
БренчЧС zi
bJj
J
Field:
Пострадало Погибло Характеристика Ч - Материальный уще Мате—
Table:
Sort:Ш______ Filel Filel Filel
*т-
Show;
.
Criteria— 0 0 0 0
J.ike """нефтепровод*"
or.
^
.i

Рис. 9.15
160 Программирование но языке SQi

сделать это за вас. А вот звездочки - исключительно ваша забота. Если ко


часть слова, которая используется в качестве критерия, находится на лей " ^
правой границе поля, то с этой стороны звездочку можно опустить. Н 0 к ""'"'
вило, вам неизвестно точное расположение критерия. Поэтому звездочки '^
ставить всегда
В случае, который мы сейчас рассматриваем, в запрос включены все по­
лней. Это можно сделать двумя способами. Первый путь: введите в бланк з-ля за-
аПро
са каждое иоле по отдельности, как вы делали раньше. Второй вариант- ввет
в бланк все поля сразу. Открыв пустое окно запроса, дважды щелкните МЫШЬю
по строке имени таблицы на ее макете, чтобы выделить в нем все поля таблщ
Затем установите указатель мыши в выделенной области и нажмите левую кип
ку мыши. Не отпуская ее, перетащите стрелку указателя в строку Field первогг
столбца в бланке запроса. Теперь отпустите кнопку, и все поля записи будут вве.
дены в бланк.
Отдайте команду на выполнение созданного запроса (как это сделать, уже
обсуждалось). В результате вы получите перечень аварий на нефтепроводах
(см. рис. 9.16).
Теперь посмотрим, как будет выглядеть в данном примере инструкция SQL.
приведенная па рис. 9.17.

Ы Microsoft Access
File Edit View Insert Format Records Tools VV ndow Help

D e; у a a v- ь- ал - • *S -& - LTJ „
id - у # a ^ , , _ 1.

is1 Query4 : Select Query висни


Виды ЧС | На и мв но вэ н HI| Дата ЧЭС | Время ЧЭС |Дэта сообщения Время (^
• 10109 Аварии на мап 01/24/1995 00.00 01/25/1995
10109 Аварии на мап 01/24/1995 00.00 01/26/1995
10109 Авария на мап 03/18/1995 00 00 03/18/1995
10109 Авария на npoi 03/20/1995 00 00 03/21/1995
10109 Авария на мап 04/06/1995 00.00 04/07/1995
10109 Авария на мап 04/13/1995 00 00 04/16/1995
J
10109 Авария на мап 04/20/1995 00 00 04/25/1995
10109 Авария на мап 04/25/1995 00 00 04/26/1995
10109 Авария на мап 04/25/1995 10 30 04/29/1995
10109 Порыв нефтеп^ 06/25/1995 00 17
10109 Авария на мап 06/13/1995 00.00 06/14/1995
10109 Авария на мап 07/17/1995 03.15 07/17/1995
10109 Авария на мап 12/14/1995 04.30 12/16/1995
10202 Возгорание ем 06/16/1995 12/30/1899 J
10202 Порыв и пожар 02/11/1995 12/30/1899
10109 Порыв нефтепр 12/22/1995 12/30/1899 J
Re cord и | ' 11 1 > I и | » » | of 18

Рис. 9.16
на выборку

^ Ф У и [ЬияыЧС], File 1.[Наименование ЧС], File 1.[Дата ЧС], File 1.[Время ЧС], File 1.[Дата сообщения], __\
- i l , r - ^ г о п б щ е н и я ] , File 1. [Код республики], File I .[Наименование республики], Filel .[Код области], __\
* |el.[KMHai
' n r i населенного пункта], File 1.[Название области], Filel.[Название района], File 1.[Название
Fl

пиквндации пос.

WHEREf((Filel.[Характеристика ЧЭС]) Like "'нефтепровод*


^ITHOWNEF ACCESS OPTION;

I d
Рис. 9.17

Как видите, по своей структуре, то есть по составу ключевых параметров, эта


инструкция совпадает с предыдущей. Разница лишь в том, что предложение с ключе­
вым словом SELECT включает не одно, как в предшествующем случае, а все поля
записи. Синтаксические правила записи каждого отдельного поля, естественно,
;;с изменяются.
Разумеется, подобные критерии можно вводить одновременно в разные поля
бланка запроса. В нашем случае вы используете логическую схему «И»: компо­
нентами составного критерия будут отдельные критерии для различных полей за­
писи базы данных. Поясним это на примере, который представляет собой расши­
ренный вариант только что рассмотренной ситуации.
Запросы с несколькими критериями отбора,
заданными в разных полях
Сформулируем новый запрос так: «По информации, собранной в таблице Filel,
выдать справку об авариях на нефтепроводах Тюменской области».
UKHO конструктора для этого запроса показано на рис. 9.18. Как видите, здесь зада-
i два критерия: прежний - "«нефтепровод»", дополнительный - "Тюменская область".
• ово «область» можно было и не вводить: название Тюменская уникально и само
е
°е служит достаточным критерием.) Новый критерий тоже надо заключить
•ЭДочки.Результатом выполнения запроса будет таблица, выведенная на рис. 9.19.
Р<>тите внимание, что в предыдущем примере, где не указывался конкретный
1*Г110Ц, '
оыло отобрано 18 записей. Теперь, как и следовало ожидать, их число со-
'Чтилось записей только 8.
Рь изучим соответствующую инструкцию SQL (см. рис. 9.20). Как видно
че - ИКа' введение нового критерия отбора влияет только на предложение с клю-
лов
Т],п °м WHERE. К этому предложению добавляется логическое выражение
(И)
B()f '
операндами которого являются "«нефтепровод*" и "Тюменская область".
•ном инструкция SQL остается неизменной.
~119
162 Программирование на яэы,Р
?$0

FIIP £dit View Insert Query Tools Window Hp|p

i? Query4 : Select Query


^ИДЩ*р:
FUel

ВИЛЫ ЧС
Н.зиисиое^мИ!
Д«таЧС
Время ЧС _-j

JU
Jj
Field Название области Наэеэние г. эипна Н^Еание смгекта Код ведомства Характеристика Ч
Tabic Filel Filel Filel Fllel Filel
Sort йеГ—q
Show
Criteria
0
Тюменская область
0 0 0 Н
Like "нефтепровод*
—1
pr
or
.1
.

Рис 9 IS

У Microsoft Access
Fie Edit View Insert F j m r FV u i d i lools Wniduvt Help

• G? H § й ^ ъ • ас • »sa-ej.
^- у § a ? £1 51 v ; Ъ *4 »- * © -a • (?).
is1 Query4 : Select Query IFP
Виды ЧС | Наименован^ Дата ЧЭС | Врамя ЧЭС |Дата сообщения! Врв мя с о о б щ е н н л | Код распухли Н
10109 Авария на мап 04/06/1995 00 00 04/07/1995 00 00 1 р

10109 Авария на мап 04/20/1995 00 00 04/25/1995 00 00 , к


10109 Авария на мап 04/25/1995 00 00 04/26/1995 00 00 1 И

10109 Авария на мап 04/25/1995 10 30 04/29/1995 00 00 ^


10109 Порыв нвфтепг 06/25/1995 00 17 00 00 I г

• 10109 Авария на мап 07/17/1995 03 15 07/17/1995 [ -'


10109 Авария на мап 12/14/1995 04 30 12/16/1995 00 00 ••
10202 Порыв и пожар 02/11/1995 12/30/1899 00 00
ТГ
R« coid н| 4 1 6 » 1 »i | » » | or в <l _| _. - 1
V
Рис 9 19

Запросы с несколькими критериями отбора,


заданными в одном поле
Мы уже привыкли к тому, что в одном запросе может быть много Крит
для отбора записей Это вполне естественно, когда речь идет о разных
записи, потому что каждое из них подобно независимой (или почти не
мой) оси координат, а каждый критерий - конкретному значению коорД
по данной оси. Но когда требуется задать несколько критериев отбора
нительно к одному полю записи, задача усложняется. Посмотрим, как
дует решать.
Зопросы на выборку 163

^ p j ) e l [наименование ЧС] ( Filel [Дата ЧС], File) [Время ЧС], Filel [Дата сообщения], File 1 [Бремя сообщения], Щ
ЕиДЬ 1
ЛЕОj Filel [ '" ^1 р,|ё| [наименование республики], Filel [Код области], Filel [Код населенного пункта], Filel [Название области], _J
..од р«:пус г111^ *•, F | j e l [название объекта], FiJel [Код ведомства], File! [Название ведомства], Filel Пострадало, Filel Погибло,
=jel [^36Эние ^ t ' ^ H B C ] , FMel [Материальный ущерб (колнч)] Filel [Материальный ущерб (натур)], Filel Последствия,
:|el [характерис и д и м ф ^ р м а ц и я ] | p,|ei [Необходимая помощь] Filel [Работа по ликвидации последствий] Filel Абонент, Filel [Ki

*' т ^Т<е7поДписа Л , Filel [Название города]

sdOWrtel г н , ] в ание области])» Тюменская область") AND «Filel [Характеристика ЧЭС]) 1*«''нефтепровод* ))
Щ К « 5 5 OPTION,

J-I

Рис 9 20

Предположим, пользователя интересуют аварии не только на нефтепроводах,


юесть при транспортировке самой нефти, но и шире - при транспортировке раз-
1ПЧНЫХ нефтепродуктов: бензина, мазута, газового конденсата и др. Как выбрать
в таком сучае критерий отбора? Можно просто ввести в иоле подстроку «про­
вод», поскольку этот корень входит во многие слова, связанные с нашей темой:
нефтепровод, бензопровод и т.д. Но тогда в выборку неизбежно попадут аварии
на газопроводах (которых тоже немало), что не входит в наши планы. Итак, нам
неизбежно придется задавать несколько критериев отбора для одного и того же
паля записи п связывать их определенными логическими соотношениями. Пока­
жем на конкретном примере, как это делается.
Предположим, надо получить справку об авариях, которые произошли:
3 на нефтепроводах,
3 на мазутопроводах;
Э на бензопроводах;
Э на продуктопроводах.
'Ibi предусмотрели практически все виды нефтепродуктов. Теперь построим
°ответствующий запрос.
ак
°°ыч1[о, сначала откройте пустой бланк запроса и введите туда все поля
11
(последнее делать не обязательно - любые поля можно вносить в бланк
тдетьности). Критерий отбора сформулируйте так:
епровод OR «бензопровод* OR *мазутопровод* OR *продуктопровод*
че говоря, вы выстраиваете логическую схему «ИЛИ». Теперь посмотрим,

Реализуется на практике.
с ок
'но конструктора запроса для таблицы Filel. Как и раньше, введите
r ^ первого критерия: «нефтепровод* - в строку Criteria на ее пересечении
,т ' 1 0 м Характеристика ЧЭС. Следующие значения критериев вводятся
столбце, но в строках, расположенных ниже по вертикали. Каждая из
164 Программирование на языке '

них помечена словом OR (Или), как показано на рис. 9.21. Количество таь-.
практически не ограничено, поэтому составной критерии может включап ДОГ]
точно большое количество операндов. Запустив запрос на выполнение вы
Пс
чите таблицу (см. рис. 9.22). Обратите внимание, что она похожа на резулГ '"Л
щую таблицу, представленную на рис. 9.16, когда вы сформировали запрос с
критерием. Однако в новой таблице отобрано уже не 18 записей, а 21, и спел '
рийных объектов назван, в частности, бензопровод. '<Е

EJ Microsoft Access
File Edit View Insert Query Tools Window Help

aa- C? °S •& - (3 .
Гп -!H '1 g - ! °nl All fi\:> ©-а- д .
^^^™^^™
i? QueryS : Select Query
"•^"•Ч-^Т*]
FUel

Виды ЧС
Наименоеанш
ДатаЧС
Бремя ЧС _J

IU f
Field. Нагеание ведомсте Пострадапо Погиб по Харэктеристиг а Ч г " ' Патер lantHtin ущ* f 1этери.зпьнь • дг-
Table. Filel File 1 Filel Filel Filel Filel
5ort:
Show: 0 0 0 0 0 0
Criteria: lihe """нефтепровод*"
or: J.if-£ '""бензопровод*"
Lih<е- "*мазутопроеод*"
Ое "'продуктопровод* 1
1

1
.!.! .1
4 -1

Рис. 9.21

Наконец, открыв инструкцию SQL (см. рис. 9.23), вы можете лишний р:т° е '
диться: все изменения, которые внесены вами в логические схемы критериев, точ
но отображаются в предложении с ключевым параметром WHERE.
Надо сказать, что структуры критериев бывают самыми разнообразны \ HI He
при их построении вам потребуются точность и аккуратность, чтобы отбор '•'
сей производился правильно. Например, у критериев, выведенных на pHL
неизменяемая часть слова - "*опровод*". Исключением является лишь *нет
вод*". Казалось бы, можно сократить условие в той его части, где вводятся кр
рии. Чтобы при этом исключить записи, связанные с авариями на газопр
сформулируем условие следующим образом:
("•нефтепровод*" OR "*опровод*") AND Not "«газопровод*"
Если вы введете такое условие в запрос, а затем выполните его, то
действительно отберет записи, удовлетворяющие заданному критери •
ко в их число попадут и сведения об авариях, связанных с повреждени •
провода или электропроводки. Поэтому учтите, что похвальное стр
3anp°Cbi
на выборку 65
Ы>
In^tt Fgi mat Ptcorcte Tools Window (Help

•&•' ® .

Название обл| Названия района | Нззазимо об-ь| Код ц д о м с т в | Нзгвзиив_


ME
Коми ССР 31 км Возей - Головные нефтепровод О
Коми ССР Усинский район нефтепровод 102211 Корпораць
Челябинская о г Миасс (85 км юго-заг бензопровод 108100 Департам<
1175DJ3J
Иркутская обл; Тулунский район, г Ту/ нефтепровод 706411 Минтоп зн*
11250540
Республика Бг Туймэзинский р-н, д Я промысловыйi 706411 МИНТОПЗН'

1171044J Тюменская OEJ г Уран (330 км северн* нефтепровод 706411 Минтопэни


11870250 Республика Ко Усинский район, 130 кк, нефтепровод 102211 Корпорац1
11710200 Тюменская OBJ Еатинское месторожде нефтепровод 706411 МиНТОПЭН!
11710200 Тюменская об/ Нижневартовский р-он нефтепровод д 706411 Минтолэн*
Тюменская O6J Нижневартовский paiioi напорный нефп 363100 АО " Р о с т
11710300 Тюменская O6J г Нягань (525 км сев г нефтепровод 706411 Минтопэн*
11670250 Республика Ко Усинский район, 100 ки< нефтепровод 706411 Минтопэж
11710250 Тюменская об; 15 км сев г Нижневар нефтепровод 700411 Минтопэн(
11710250 Тюменская O6J г Нижневартовск нефтепровод 40 акционерн
Кемеровская о 3 км севернее г Анжер< нефтепровод ( О
Mil ^ J of 21 ^

Рис. 9.22

Ш Microsoft Access мы
File Edi- ndow Help

• •E gl. - Ёг в -a • L-j.
? QaeryS: Select Q u e r y
Inlx-
UECT Filel [EiutiHC], Filel [Наименование ЧС], Filel.[Дата ЧС], File 1.[Бремя ЧС], Filel.[Дата сообщения], Filel [Бремя
|Р!ЬГ Н М Я ^ Fl ' el ^ К о л РеспУ^1ЛИКИ]» Filel .[Наименование республики], Filel .[Код области], Filel .[Код населенного пункта],
=£! п ? 6 3 " 1 * о с ™ с т и], Filel.[Название района], Filel .[Нагванме объекта], Filel .[Код ведомства], Filel [Название ведомства],
^ -1 Пострадало, Filel.Погибло, Filel.[Характеристика ЧЭС], Filel,[Материальный ущерб (колич)], Filel [Материальный ущерб
Fl e
\rr ' 1-Последствия, Filel.[Дополнительная информация], Filel.[Необходимая помощь], Filel.[Работа по ликеидаиии
'ROMN™"^' F ' l e l ' A6 ° hKHT < F l l e l • [ К о д абонента], Filel .Подписал, Filel .[Название города]

**№№'el.[Характеристика ЧЭС]) Like "'нефтепровод*")) OP. (((Filel.[Характеристика ЧЭС]) Like "-бензопровод*")) OR


m « S * T e p " C T * a 4 3 C D L l t e ""мазутопровод*")) OR (((Filel .[Характеристика ЧЭС]) Like "*продуктопроеод*"))
I nuv™ERACCE5S OPTION;

Л
Рис. 9.23

V ткосщ и упрощению критериев запроса иногда приводит к нежелательным


"бедствиям.

"Рось/ с параметрами
;,;ц ' ' Д л я получения какой-либо справки приходится неоднократно вводить
Ые з н а
\1ЙГП чения одного и того же параметра. Такая справка называется пара-
'"> со' Скои- Например, на практике сведения об авариях на нефтепроводах обыч-
I ткутся по субъектам Федерации - краям и областям. Для подобных случаев
166 Программирование на языке SOl

полезно иметь готовый типовой запрос: вы вводите в стандартное поле н-


края или области, а в результате выполнения запроса получаете справку сг а""е
ного вида. Такой запрос несложно построить. ' Рт"
Откройте запрос, который был сохранен под именем Query4 (см piir q
В столбец Название области вместо значения Тюменская область поместит
сказку [Введите область] (см. рис. 9.24). Если теперь вы отдадите команд *
выполнение запроса (с помощью кнопки j j пли предварительно сохрани ''
в окне базы данных), то Access 2000 потреоует сначала указать название обла
или края в диалоговом окне Enter Parameter Value (Введите значение папак
ра). Этот этап работы продемонстрирован на рис. 9.25. Вам следует ввести пол!
географическое наименование, а затем щелкнуть по кнопке ОК. Запрос будет вп
полнен для заданного региона. Например, вы вводите значение Тюменская об­
ласть и получаете таблицу, которую уже видели на рис. 9.19. Понятно, что точно
так же можно задать любой другой критерий. Как видите, типовой запрос опера­
тивен и удобен в использовании.

Ы Microsoft Access
j l File Edit view Insert nuety Toul=. W» ulu ' Help

'|C- H - gi . • <t, г AH - й' © - Й - \1),


: Select Query
Filel

ЕмдыЧС —
Нэименог?ани<
Дата ЧС
ЕрсмяЧС _-J

На-.Еание области Название района 1На:-Еание объекта


Ffcl
| К о д ЕЁДОПСТЕЗ
Fill
ХарактеристикаЧ: Материи
3
0 И 0 0
[Введите область] Like ""нефтепровод*"

_L
Ы

Рис. 9.24

Enter Parameter Value


Введите область

OK Cancel

Рис 9.25
выборку 167

q ос Показана инструкция SQL для такого запроса. Вы можете вновь


На Рпс- чго соответствующие изменения уже включены в предложение с клю
л.бедить
' сд " чметром WHERE. В данном случае в этом предложении применяется логи-
чевым пар
к'ТЯ CX•ема ^
ei 1 «И»,
' ^ ' которая
' содержит в качестве операндов и "«нефтепровод»', и при­
веден^ ' -ю выше подсказку. Иными словами, Access воспринимает ее как значение
критерия-
ши
tM ve * 1гье,г 2'«У I"'I Window Help

.
гз
тГс|1| ГЁНДС|Ч ] FilH [Наименование ЧС], Filel.[Дата ЧС], File 1 [Бремя ЧС], File] [Дата сообщения], Filet [бремя сообщения], Filel
~^~(\!*#у\1 Filcl [Наимен:ЕзНие республики], Filel.[Код области], File] [Код населенного пункта], Frlel [Название области], Filel [Назвг
ре1 пу
: 1 f-jgj [Кззеэнне объекта], Filel [Код ведомства], Filel [Название еедомства], Filel Пострадало, Filel Погибло, Filel [Характерист
^t-Tpiiel [Матерпэпьный ущерб (колич)], Filel (Материальный ущерб (натур)], Filel.Последстеия, Filel [Дополнительная информация], -
-if\ [необходимая помощь], Filel [Работа по ликвидации последствий], Filel Абонент, Filel [Код абонента], Filel .Подписал, Filel .{Наэвак-
-орода]

WHERE (((Filel [Н^Еоние области])=[Бведнте область]) AND ((Filel [Характеристика ЧЭСр Like ""нефтепровод*"))!
AITHCWNERACCES5 OPTION,

,1 _ _ I А
Рис 9.26

Запросы с участием нескольких связанных таблиц


Запросы э roii группы применяются, если пользователю необходима информация,
которая содержится не в одной, а в нескольких таблицах.
Для начала вернемся к уже рассмотренному примеру, когда вы создали запрос
а выборку российских фирм из одной таблицы - Фирмы, а в качестве критерия
ипользовали код России - 06" (см. рис. 9.12). Попробуем сформулировать этот
*е запрос более естественным образом, задав условием отбора название страны -
Россия.
Откройте окно конструктора запроса и введите туда две таблицы: Фирмы и Стра­
ны Как п раньше, вы используете таблицу Show Table (Показать таблицу), но
Г|
-'перь по очереди выбираете из нее две или более таблицы (см. рис. 9.3). Вы сно-
iM
Указываете в таблице Фирмы поле Название фирмы, а в таблице Страны -
трана; однако в ячейке Criteria (Условие отбора) столбца Страна вводите
рни Россия (см. рис. 9.27). Отправив запрос на выполнение, вы получите
ЧУ, содержащую отобранные сведения (см. рис. 9.28). Она похожа на табли-
V с 9.13, но вместо кода содержит название страны.
- вы теперь откроете инструкцию SQL, то увидите в ней новый элемент, ко-
• ;з ; азьш ает на связь между таблицами Фирмы и Страны. Это ключевое слово
ипе
' vm рация INNER JOIN доступна в любом предложении FROM и позволяет
,ть сам
,Я1 ое простое связывание - объединить записи двух таблиц, если их
1е П о л я
',Ъе содержат одинаковые значения. При этом INNER JOIN определяет
'"' им' МЬ ' е та ^ ли ЦЫ, а другое ключевое слово ON - объединяемые поля, кото-
К)т
одинаковые значения.
168 Программирование на языке SQL

Q Microsoft Access
j File Edit View Insert Query Tool: Window Help

[Dt*@ . «L • oil • G? *g -a • C?j .'


|П - H g i - ! ° n z AII - rj? \ © -a - СЭ .
i ? QueryS : Select Query

Фирмы Страны
5 GUID -^J
Кодфц*** s_Lmeage
Издание фир Код
Код страны ssT Яг5ЯИИ
Адрес _^J Примечания _ J

Ш _tT

Field: НЗЗЕ эмие фирмы Страна -1


Table: Фирмы Страны
5ort:

Show; 0 D
Criteria;
и "Россия" • •
or:
«i i •г
ы if

Рис. 9.27

1 В Microsoft Access п|х|


File Edit View insert Format Records Tools ' ^Window Help

D cs В a a v; es ь- °§-м~ »

м- s §ЙУ ш Z-I1\ ъ ©V
1
lis QueryS : Select Query ^^^
Название фирмы | Страна
pAO "Цвет" Россия
1
Нефть-Газ-Наука Россия
НПП "ЭКОНМКС" Россия
ЭКОХЕЛП ИНСТРУМЕНТС Россия
АО "ЭКРОС" Россия
Петербургский институт ядерной физики РАН Россия
ОКБ ТЕСТ фирмы "Аналитические приборы" Россия
ГЕОХИ РАН Россия

«1
*
1 л
Рис. 9.28

Теперь попробуем усложнить задачу и сформировать универсальный запрос


Предположим, вы постоянно работаете с той частью объединенного банка данных,
которая включает сведения о контрольно-измерительных приборах. Иначе гово­
ря, вы имеете дело с базой данных Контрольно-измерительные приборы. ВзМ
Запросы но выборку 169

IШ Microsoft Access
! File Edit View Insert Query Tools Window Help

iИ • H S - ! • -
1
is QueryS : Select Query
3.ELECT Фирмы.[Ha:-.E.dHhe фирмы]. Страны.Страна
FROM Страны INNER JOIN Фирмы ON Страны.Код = Фирмы.[Код страны]"
WHERE (((Страны.Страна)="Россия"))
WITH OWNERACCE5S OPTION;

Рис. 9.29

приходится создавать запросы, очень разнообразные по своему построению. Од­


нако вам некогда вникать в структуру таблиц и связей между ними, а также раз­
бираться в том, какие таблицы нужны для подготовки ответа на какой-либо
запрос. Необходимо более простое решение. Конечно, можно построить запрос
с параметрами, но есть и другой путь. Он не противоречит первому варианту,
d скорее дополняет его.
Введите в окно конструктора все таблицы базы данных Контрольно-измери­
тельные приборы со всеми их связями (см. рис. 1.11). (Позднее дело дойдет и до
других БД в составе объединенного банка данных.) Ничего не изменяя в ее струк­
туре, будем в бланке запроса формировать запросы различных типов.
Допустим, вы хотите узнать, какие приборы используются для измерения тех
или иных физических параметров. На рис. 9.30 показан бланк соответствующего
запроса. Б этом же окне конструктора вы видите макеты всех таблиц, содержащих­
ся в нашей базе данных.
(Отметим, что не все таблицы будут привлекаться в конкретных запросах.)
На рис. 9.31 выведена результирующая выборка записей, полученная в ответ
на ваш запрос.
Предположим, теперь пользователь интересуется другой проблемой: каки­
ми приборами для измерения кислотности занимается менеджер по фамилии
Флеминг. На рис. 9.32 показан заполненный бланк соответствующего запроса.
Вы видите, что здесь в разных столбцах введено два условия отбора: "*кислотн«"
и Флеминг". В то же время перечень таблиц и схема связей между ними остаются
неизменными. Результат выполнения этого запроса приведен на рис. 9.33. Ото­
браны сведения лишь о тех приборах для измерения кислотности, которыми ве-
Дает менеджер Флеминг.

Пояснения к инструкции SQL


Теперь более подробно исследуем инструкцию SQL, приведенную на рис. 9.34. Мы
"есколько раз усложняли структуру запроса, поэтому и инструкция нуждается
b
определенном комментарии.
170 Программирование на языке SQL

Ы Microsoft Access
File Edit View Insert Quel у Tool; Window Help

w
All „ й" \ © ^

i? Queryfi : Select Query


Назначение Приборы, . Ф1фМЫ Менеджер
£._Gerieration _ l l Номер моделг-lJ Кодфц»ы _d *. *
•-_GUID Категория Название фис Номер
•.Jjneagi
Код
Назначение _^J
J Примечание! — '
Примечание2
Год по KaiancjJ
Код страны
Адрес
Адрес 2
J
_J
Кид фирмы
Ф НИИЛИЯ
Имя
—I
d

Типы при... Страны


5 GUID
sjjneoge
4 йеп_Примеча!
Код т т а 1 5_Generation
Тип
£ 5_GUID
Примечания s_Lineage _^J

Field. Назначение Тип Номер модели


Table Назначение Типы приборов Приборы, предстае
Suit
Show 0 0 0
Cntena • •
or:
. I I

Рис 930

В предложении с ключевым словом SELECT содержится перечень используемых


в запросе таблиц и их полей, как уже говорилось, группы (Имя таблицы Имя поля)
разделяются между собой запятыми, а внутри группы имя таблицы отделяется от
имени поля точкой. Если в имени есть пробел, оно заключается в квадратные скоб­
ки. Параметр SELECT имеет следующий синтаксис:
SELECT [предикат] { * | таблица « | [таблица ]поле_1
[AS псевдоним_1] [, [таблица ]поле_2 [AS псевдоним_2] [, ]]}
FROM выражение [, ] [ I N внешняя База Данных]
[WHERE ]
[GROUP BY ]
[HAVING ]
[ORDER BY ]
[WITH OWNERACCESS OPTION]

Ниже перечислены аргументы ключевого слова SELECT:


• предикат. Задается один из следующих предикатов отбора:
- ALL;
- DISTINCT;
Запросы но выборку 171

В Microsoft Access ЖШ
File Edit \Vvv Ii-ce/t Fur mat R^co/di l o o k Window H?lp

D C& В & Ei ЧУ О-П '

51JJ ;, -41 - О .
a
аБЕЗШЕНЕЯЗЯ Гт
Назначение Тип Номер мода пи
HU н-.-иение н* у, а'лни ирогптиграф Odyssey High Performance 1С Sys
Н-значение не указано хроматограф Odyssey Basic 1С System
Н-лначение не указано хроматограф SRI Gas Chromalograph 8610C
11 морение солености проводимости и температуры воды Многпорам Измер YSI 30 SCT Meier
H-i значение не указано Фотометр YSI 9000
И пррение содержания хлоридов аммония, нитратов, Hmpt Фотометр YSI 9100
(1 морение параметров грунтовых вод Многпорам Измер YSI 3000 T-L С Meier
И пррение мутности м температуры Изм Мутности YSI 80 Turbidity Meter
Одновременное изменение растворенного кислорода соле»- Многпорам Измер YSI 85 DO ^Conductivity Meter
И мерение содержания кислорода Изм Раствор 02 YSI 55
И мерение растворенного кислорода, температуры провоД1 Многпорам Измер Grant/ YSI 3800
Д пговременный мониторинг растеоренного кислорода пров Многпорам Измер YSI 6000
11 мерение растворенного кислорода Изм Раствор 02 YSI 50B
(I мерение растеоренного кислорода Изм Рэстеор 02 YSI 52
П..мерение температуры проводимости, кислотности и раст! Многпорам Измер YSI 800
11 мервние проводимости, кислотности и ионов 7 е почренж Многпорам Измер YSI 3560
И.мерение кислотности, проводимости, редокс потенциала Многпорам Измер YSI Логгерная с ма контроля
Измерение кислотности проводимости редокс потенциала. Многпорам Измер YSI Логгерная с ма контроля
Назначение не указано Флюориметр
Record м | . 1 ["'"^ •1*МИо17е iL J

Рис 931

Ш Microsoft Access
ШЕ\
File Edit w Insert Quer Icr ЬИр

• c# В
•- гЭ-
Ц.^,.Ш.Н.!ЛЯ!ЯЯ
ма
Назначение
.^Generation
Приборы,
Hi Мир МОДсЛк.^!
Фирмы
Кодф»фМ4 - l l
Менеджер
4- л
1
тегория Название фиг; 1 Номер
.Jjneage Примечание 1 —* Кпд страны Код фирмы
Код J Примечание! ндрес —' IЗМИЛИЯ —1
Назначение Ч Гол по к а г а т • ] Адрес 2 zl Ииа zi

Типы щи I. . Страны
,_GU1D А
••^Lineagp "Ьеп_Примеча1
Код типа s_Generahon __
Тип
Примечания 5 Jjneage _^J

ш А
FHd На>начемир_ Нон^с мод Tin
7аЫе Назначение Типы пр'иаорсв ПрИГиры, Пр-гДСТЗЕ Менеджер

Lite "кислотн*

«I I
.п
Рис 9 32
172 Программирование на языке SQL

- DISTINCTROW;
- ТОР.

Предикаты ограничивают число нозвращаемых записей. Если предикат не


указан, по умолчанию используется ALL. Это означает, что выбраны все ноля
заданной таблицы или таблиц;
• таблица. Указывается имя таблицы, из которой надо отобрать записи;
• поле_1, поле_2. Указываются имена полей, откуда следует отбирать данные. Све­
дения будут извлекаться из полей в том порядке, в каком они перечислены;
• псевдоним_1, псевдоним^. Задаются имена, которые станут заголовками столб­
цов вместо названий, заданных по умолчанию;
• выражение. Здесь указываются имена одной пли нескольких таблиц, содержа­
щих необходимые данные;
а внешняя База Данных. Вводится имя тон базы данных, где расположены табли­
цы, которые указаны с помощью аргумента выражение, но находятся за преде­
лами текущей БД.
При выполнении операции SELECT Access 2000 находит указанную таблицу пли
таблицы, извлекает из нее (из них) необходимые столбцы, выделяет строки, кото­
рые отвечают условию отбора, а затем сортирует или группирует результирую­
щие строки в заданном порядке. (Отметим, что инструкции SELECT не изменяют
ни самих данных, ни их расположения в БД.)

Ы Microsoft Access l-ln|x|


File Edit View Ipsei t Forrridt Records '^/mdow Help
V, n a •

ПU Ъ M
о.
luerjo: Select Query 1-laM
Назначение Номер модели I Фамилия
_L
[^онитиринг кислотности, прсеоднммсти, р Многпирям 11.мер YSI 1-ИГТРМ.Э мониторинга Флеминг
Измерение кислотности, проводимости, р; Многпорзм Из мёр Анализатор роды Флеминг
Измерение кислотности, проводимости, рг Иногпо|им Измер Измеритрпьная система Флеминг
Измерение кислотности, проводимости, ре Многппрям И"-м^[ YGI Логгерн.^я с ма контропя Флеминг

' 1 " 1 » 1 of 4

Рис 9.33

Ы Microsoft Access пшш


File Edit View Insert Query Tools Windovv Help

D & an - Й" ° S S - L?J .


С -<Э - 3 •

10
is" Оаегуб : Select Queer Г№1
•ELECT Назначение Назначение, [Типы приборов] Тип, (Приооры, представ пенные на рыике2] (Номер модели], Менеджер Фамилия
FROM (Страны INNER JOIN (Фирмы INNER JOIN Менеджер ON Фирмы [Код фирмы] = Менеджер [Код фирмы]) ON Страны Код = Фирмы [Код
страны]) INNER JOIN ((Типы приборов] INNER JOIN (Назначение INNER JOIN [Приборы, представленные на рынке2] ON Назначение Код =
[Приборы, представ ленные на рынке2] [Код назначений]) ON (Типы приборов] [Код типа] = [Приборы, представленные на рынке2] [Код
типа]) ON Фирмы [Код фирмы] = [Приборы, представленные на рынке2] [Код Фирмы]
WHERE (((Назначение Назначение) Like "*кислотн*") AND ((Менеджер Фамилия )="Флеминг"))
WITH OWNER ACCESS OPTION,
d

Рис 9.34
Создание объединенной выборки 173
Обычно слово SELECT является первым словом инструкции SQL, поскольку
большая часть этих инструкций SQL относится к типу SELECT или SELECT. INTO.
Минимальный синтаксис инструкции SELECT таков:
SELECT поля FROM таблица
Чтобы были отобраны все поля таблицы, добавьте символ звездочки («).
Если несколько таблиц, включенных в предложение FROM, содержат одноимен­
ные поля, то перед именем каждого из таких полей следует ввести имя таблицы
и оператор «точка» ( ).
Предложение с ключевым словом FROM описывает связи между таблицами. По
мере усложнения этих связей все более важную роль играет конструкция INNER
JOIN ON, которая имеет следующий синтаксис:
FROM таблица_1 INNER JOIN таблица_2 ON таблица_1 лоле_1 оператор таблица_2.поле_2
Ниже перечислены аргументы операции INNER JOIN:
Q таблица_1, таблица_2. Здесь указываются имена таблиц, записи которых нуж­
но объединить;
Q поле J , поле_2. Задаются названия объединяемых полей. Если они не явля­
ются числовыми, то должны быть однотипными и содержать однотипные
данные. В то же время объединяемые поля могут иметь разные имена;
Q оператор. Выбирается любой оператор сравнения (символы, входящие в каж­
дый оператор, заключены в прямые кавычки):

- ' <,";
- '>, ' ;
- ' < = , ';
- >=,";
- ' О".
Параметр WHERE содержит условия отбора - критерии, вводимые в запрос, - и име­
ет следующий синтаксис:
WHERE условие отбора

Создание объединенной выборки


В предыдущих разделах мы рассмотрели большую группу запросов на выборку,
в том числе запросы с использованием нескольких таблиц, объединенных связя­
ми. Однако в системе Access 2000 предусмотрены и запросы других типов:
• запрос на создание таблицы;
• запрос на добавление записей в таблицу;
О запрос на удаление записей из таблицы;
• запрос на обновление записей в таблице;
• перекрестный запрос.
Запросы всех названных типов могут не только использоваться по прямому
назначению, но и быть частью более сложных, комплексных запросов. Предположим,
174 Программирование на языке SQL

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


Мы подробно рассмотрим пример такого запроса, а заодно и работу с запросами
перечисленных типов.

Пример сложного запроса


Как вы помните, в объединенном банке данных содержатся три базы данных. Все
эти БД имеют различное происхождение. Две из них (БД ЧЭС и Контроль ЧС)
непосредственно связаны с оперативной информацией о всевозможных чрезвы­
чайных ситуациях (ЧС). Следовательно, вполне естественна такая постановка
задачи: получить из этих двух баз данных единую выборку сведений о ЧС опреде­
ленного типа (скажем, происшедших в конкретном регионе).
В том, что таблицы этих БД не соединены связями, нет никакого скрытого под­
воха. Конечно, разное происхождение баз данных наложило отпечаток на их
структуру: записи из различных БД построены неодинаково, отличаются по со­
ставу и формату полей. Все это осложняет работу пользователя В принципе мно­
гие таблицы из разных БД достаточно легко объединить с помощью связей. Од­
нако в каждой базе данных есть свои словари, на которых должны основываться
важнейшие таблицы (об этом шла речь в главе 3 настоящей книги), поэтому коды
одних и тех же понятий могут не совпадать. Информация в базах данных может
дублироваться (дата возникновения ЧС, регион и т.д.). Таким образом, связи меж­
ду обеими БД не реализованы отнюдь не по принципиальным, а скорее по мето­
дическим причинам. Но интеграция возможна и в этих условиях. Мы хотели по­
казать читателю, что система Access 2000 позволяет преодолевать серьезные
трудности, даже если иногда они создаются несколько искусственно.
Итак, приступим к решению поставленной задачи. Оно включает по крайней
мере два этапа:
1. Создать таблицу, в которую будет помещена выборка сведений из одной
базы данных, полученная в соответствии с заданными критериями. Иными
словами, необходимо сформировать запрос на создание таблицы.
2. Добавить в построенную таблицу записи из другой базы данных, удовлетво­
ряющие тем же самым критериям. Это значит, что надо сформировать запрос
на добавление записей в таблицу.

Запрос на создание таблицы


В конечном счете полученная выборка должна содержать поля из таблиц Filel
и E S O P E R . Поэтому сначала сформируйте новый запрос на выборку (Select
Query) Он должен указывать те поля, которые вы хотите скопировать в создавае­
мую таблицу. Как и в предыдущих разделах книги, запрос будет построен с помо­
щью конструктора. Все операции, связанные с созданием запроса, вам уже знакомы.
Итак, введите в него все поля таблицы Filel, а также условия отбора: в поле Назва­
ние области - критерий Название области, в поле Характеристика ЧЭС - крите­
рий Нефтепровод* (см. рис. 9.35). Теперь с помощью кнопки j l проверьте, правиль­
но ли производится отбор (см. рис. 9.36). Убедившись в этом, можете формировать
запрос на создание таблицы. Щелкните по стрелке прокрутки справа от кнопки
Создание объединенной выборки 175

Ы Microsoft Access PHTi


Fil^ ^cJit '^ Imert Query TLUI '^WHJV" HPlp.

is1 Query": Select Query


FUel
1
ЕмдыЧ' 1
НэИменОЕЭНИ
ДатаЧ
Ef-мя И- j j

^
Field Нсг.е^ние r f п э г т н *арэгтер| Tin <,Ч~-"С ЕгемяЧС Дата «общения бр^мя г плющения Код per nvGOHFM
Table FiH File,
Ffcl FH Filel P.lel —
Surf I
Show 0 0 0 0 0 0
nteria Тюменгкая о&пагть Lil^ "нефтепровод*
or
<j i •Г

Рис 9 35

I B Microsoft Access •
IBHBHJnM
File Edit View Insert Fci roar PeL и d T O L !Ь \Ajndnyv hjp|p

• i^ у # & v- © Ь - ^ - eg Л1 - О -
id - н # Ei vc ca П 51 v
;^ M •*« B^- 0 .

Виды ЧС | Наименование Дата ЧЭС | Название оСл| Характеристика ЧЭС j Время ЧЭС [ Чэта сообщвния| В
• 1U1IJJ ^ЕНрИЯ на М'аП U4/T6/19'J5 Ткменская об г В 55 км севернее г Ур< шш 0-1.13Г/1У95
1010Э Авария на м^п 04/20/1995 Тюменская O6J UJ за ветхости произои. 00 00 04/25/1995
10109 А&ария на wan 04/25/1995 Тюменская O6J Неустановленный тракт 00 00 04/26/1995
10109 Авария на мап 04/25/1995 Тюменская O6J В Нижневартовском pai 10 30 04/29/1995
10109 Порыв нефтепр 06/25/1995 Тюменская O6J ВО время экскаваторно 00 17
10109 Авария на мап 07/17/1995 Тюменская O6J На комплексном сборне 03 15 07/17/1995
10109 Авария на мзп 12/14/1995 Тюменская об; Произошел порыв напо 04 30 12/16/1995
10202 Порыв и поч'т[: 02/11/1995 Тюменская ofj Из за коррозии металла 12/30/1899 J
*
Re ,o,d н| 41 1 • | и | . . | о. a -I I

'I I As

Рис 9 36

g] -J - Query Type (Тип запроса) на панели инструментов (см. окно, показанное на


рис. 9.35) Активизируйте режим Make Table Query (Запрос на создание табли­
цы). Можно выбрать ту же опцию, открыв меню Query (Запрос) на панели ин­
струментов (см. рис. 9.35). После этого Access 2000 попросит вас назвать таблицу.
Назовите ее просто Выборка1 (см. рис. 9 37). Запрос на выборку будет автомати­
чески преобразован в запрос на создание таблицы, как показано на рис. 9 38. Если
теперь вы отдадите команду выполнить этот запрос, то во вкладке Tables (Табли­
цы) окна базы данных появится таблица Выборка1. Ее содержание полностью со­
ответствует тому, что вы видели на рис. 9 36 Остается осуществить вторую часть
задачи: сформировать и выполнить запрос на добавление записей в таблицу.
176 Программирование на языке SQL

Make Table ш
Make New Table OK
Table Name рЯЗВЁЁП ~3 Cancel
<• Current Database
С Another Database

Рис 9 37

SJ Microsoft Access ГТПТЙ]


] Eile Edit View Insert Query Tools Window Help

П.-[М1^'Г4 • !°г
i? Query7 : Make Table Query BSD
Filel
*
1
Виды ЧС 4
Наименовани<
Дата ЧС
Время ЧС J
^
Field Дата ЧС Название области Характеристика Ч Время ЧС дата сообщения Время сообщения —
„Table Filel Filel File! Flel Filel Filel —
Sort
Show 0 И 0 13 0 0
Criteria Тюненская область Lite *нефтепроеод*
or
•1 1 .г j j

Рис 9 3S

Запрос на добавление записей в таблицу


Такой запрос позволит добавить в уже имеющуюся таблицу новые записи из дру­
гой таблицы Существенно, что таблицы могут быть как похожими, так и различ­
ными по структуре, они могут иметь неодинаковое количество полей с разными
именами Итак, чтобы включить новые данные в таблицу, надо сначала создать
и выполнить обычный запрос на выборку, а затем указать, в какие именно поля
какой таблицы следует поместить поля с новыми записями
Создайте запрос на выборку из ES_OPER и укажите в нем условия отбора за­
писей По структуре эта таблица отличается от таблицы Filel
В частности, основная текстовая информация таблицы E S O P E R содержится
в поле Текст сообщения Поэтому условия отбора данных в запросе, который вы
создаете, будут отличаться от критериев, введенных для таблицы Filel Посколь­
ку необходимо отфильтровать записи об авариях на нефтепроводах Тюменской
области, в запросе на выборку введите в поле Текст сообщения следующее выра­
жение «Тюменск* AND нефтепровод* (неизменяемые части слов - с учетом того, что
Создание объединенной выборки 177
говорилось выше о возможности употребления слова в разных падежах) Сфор­
мированный запрос показан на рис 9 39
Теперь задайте тип запроса (Query Type) Пусть это будет Append Query (За­
прос на добавление) На экране вновь появится окно Append (Добавить) В нем
следует выбрать опцию Table Name (Присвоить имя таблице) Так как вы уже
вводили ее имя на предыдущем этапе, просто щелкните по стрелке прокрутки
и в открывшемся списке укажите позицию Выборка1 Затем активизируйте оп­
цию Append To (Добавить записи)

Q Microsoft Access ГЛпГ*1


j File Edit View Insert Query Tools Window Help
| O ^ Q 6 . 1 , ' X lb В •$ | <n j & • £h - j й" i °S -Л - ф
JO - Q • G> &. v ! * lb © ¥ i *"> r5 -1 ! | °n z A" с? ч © i n - о.
i? QueryS: Select Query пша
ES_OPER 1
Дата ЧС
Код насепепи
Код вида ЧС
Масштаб ЧС _ J

^
Field Tefcr сообщения Дата обноеяения и Признак коктрдгтя населенный пункт—
Table ES OPER
Sort
Show
Criteria Like Тюменск* And Like ""нефтепровод*

-d ^
Рис 9 39

Щелкните по кнопке ОК, и на экране возникнет окно Append Query (Запрос


на добавление) Перед тем как отдать команду на его выполнение, обязательно
укажите, в какое поле таблицы-получателя Выборка1 надо поместить данные из
соответствующего столбца таблицы ES_OPER Как вы помните, эти две таблицы
различны по структуре, а также по набору и формату полей Поэтому соответствие
обоих полей определяет пользователь согласно табл 9 1

Append 11 i*i
-Append To
Table Name
OK
]
Cancel
F Current Da
С Another D.
F >e fj.j'ne Менеджер
Назначение

Рис 9 40
178 П р о г р а м м и р о в а н и е на языке SQL

Таблица 9 1 Соответствие попей при добавлении записей

Поля таблицы ES OPER Поля таблицы Выборка!

Дата ЧС Дата ЧС
Код населенного пункта Код населенного пункта
Код вида ЧС Виды ЧС
Текст сообщения Характеристика ЧС
Дата обновления информации Дата сообщения
Населенный пункт Название города
Пострадало всего Пострадало
В том числе погибло Погибло
Материальный ущерб Материальный ущерб
Абонент Абонент

Введите имена полей из столбца Выборка1 в поля Append To тех столбцов, име­
на которых указаны в таблице ES_OPER (эту операцию, к сожалению, придется
выполнить вручную). Готовый запрос на добавление вы видите на рис. 9.41. Те­
перь осталось только щелкнуть по кнопке j l . В результате запрос выполнится,
и на экране появится таблица Выборка1. На данном этапе согласно условиям от­
бора в таблицу включено 8 записей из таблицы Filel. На втором шаге, в соответ­
ствии с теми же критериями, добавляется еще 9 записей из таблицы ES_OPER
(см рис. 9.42). Название итоговой таблицы Выборка1 автоматически заносится
во вкладку Table окна базы данных. Обратите внимание, что в тех потях, которые
не приведены в табл. 9.1, информация отсутствует.
Итак, вы убедились, что Access 2000 позволяет объединять сведения из таблиц
с разной структурой записей. Это очень важно в практической работе.

1Q Microsoft Access • -|П|Х|


1
File £dlt ^-< [i P t Query I I I' LindjW HPlp

• t£ У -о *, - an • й> =g -£ . d j .
• • H -'• *\ - I °n T AH . a' в -а - щ.
1
His Query8 : Append Query 1. | п | х ^1

ES_OPER d
Дата ЧС
Код населенн
Кол ьида ЧС
Масштаб ЧС _^J

LdJ ^
field Материопьный уще Причина Ч'-
Table
Р.зненс д>=теи Е том чигле погибп Погибло детей
Е5 OPER Е5 OPER
Потери
Е5 OPER ES OFER

Sort
Еэ OPER ES OPER

Append To Погибло Матери эпьный ущ<
Criteria
or
•J 1 •Г

Рис 9 4}
Запрос на удаление записей 179
Э Microsoft Access • Jnlxl
£le Edit View \\wrt Format Re йГСИ Tcml W H «luvV H." Ip

D & и a a v-' -j * ' - Ь - ол- ' eg -S - Oil.


v
^- и a a У и ' • - £1 л! ; "й A »«»/ © - 4 1 - 0
• Выборка! : Table ^J
Виды ЧС | Наименование Дата ЧС |Назваиме обл|Хэрактеристи{ -И*|
Время ЧС | Дата Сбобщви| Время соо<
• (l0109 Авария KJ нэп 04/06/1^95 Тюменская of]; В 55 км ceeeph 00 00 00 04/07/1995 00 00
10109 Авария нэ мап 04/20/1995 Тюменская об; Из за ветхости 00 00 00 04Л5/19Э5 00 00
10109 Авария на мап 04/25/1995 Тюменская O6J Неустановлени 00 00 00 04/26/1995 оооо
10109 Авария на мап 04/25/1995 Тюменская D6J В НижневэртоЕ 10 30 00 04/29/1995 00 00
10109 Порыв нефтепр 06/25/1995 Тюменская O6J Во время экск 00 17 00 01/09ЛЕ
10109 Авария на мап 07/17/1995 Тюменская O6J На комплексно 03 15 00 07/17/1995
10109 Авария на мап 12/14/1995 Тюменская O6J Произошел по| 04 30 00 12/16/1995 01/1 ЗЛЕ
10202 Порыв и пожар 02/11/1995 Тюменская O6J Из за коррозии 00 00 00 00 00
10301 03/07/1997 03/07/1997
10301 04/27/1998 Тюменскз 05/05/1998
10301 11/17/1997 Тюмени 11/21/1997
10301 01/31/1997 09/29/1997
10301 01/19/1999 Тюменская. 01/29/1999
10301 05/24/1997 Тюме> 05/24/1997
10301 07/30/1998 Тюменская 08/04/1998
— 10301 07/25/1997 Тюменская о 07/25/1997
10301 07/27/1997 D Тю«, 10/20/1997
*
R* ccid t'\ I] 1 • I n 1>»l о М 7 .| | Jj •1

Рис 9 42

Запрос на удаление записей


Базы данных не только используются по прямому назначению; часто возникает
необходимость произвести в них некоторые вспомогательные, служебные опера­
ции. Например, время от времени базу данных надо чистить: там обнаруживают­
ся дублирующиеся записи, устаревшая, бесполезная информация и т.д.
В принципе можно удалить запись из БД и без помощи запроса, а непосред­
ственно из формы, как описывалось в главе 4. Кроме того, можно просто открыть
таблицу и удалить выбранную запись Однако суть проблемы именно в этом сло­
ве - «выбранная». Когда число записей в таблице растет и их счет идет на тысячи,
определение «жертвы» превращается в сложное и трудоемкое мероприятие. Ис­
пользование запроса на выборку помогает решить такую задачу.
В окне конструктора создайте обычный запрос (см. рис. 9.4). Затем с помощью
уже хорошо известной вам кнопки rg] ~| откройте меню Query Type (Тип запроса)
и активизируйте в нем опцию Delete Query (Запрос на удаление). Теперь надо
ввести в запрос критерии отбора записей для последующего удаления. Здесь тре­
буется уточнить, какие именно записи должны быть уничтожены.
Так как речь идет о базе данных но ЧС, то в ней не предусмотрено накопление
и хранение информации о дорожно-транспортных происшествиях - подобные
сведения должны содержаться в другом банке данных. Однако по разным причи­
нам в нашу базу данных (в частности, в таблицу ES_OPER) такая информация
иногда попадает. Пользы от этого все равно нет, потому что случайные разрознен­
ные записи не дают полной картины по дорожно-транспортным происшествиям.
180 Программирование на языке SQL

Естественно, такие сведения следует удалять. В бланке запроса в ячейке Criteria


(Условия отбора) для поля Код вида ЧС введите код данного типа происше­
ствии - "10101", как показано на рис. 9.43.

Ш Microsoft Access
File Edit Vievv Insert Quei у l o o h Window Help
nm
1
• c£ У "i Ь - ю - й ^ M

О - У •n X!
Й"„> s a - о ,
is1 Queryl2 : Delete Query
^ШШШШШШШ-\Ф\P
ES_OPER d
Дата ЧС
г од насепенн
код еида ЧС
1ЬоитабЧС . J

AA ^
Field Дата ЧС Код наг*- пенного п •'одеидэЧС Масштаб ЧС М е т сообщения Дата обн—
Table E' OPER Е: OPEF Е5 OPER Е5 OPER ES.OfER E5 OPEP —
DeWe. where where Where Where Where Where
Critena: "10101"
or

<l 1 •Г
ы ^

Рис. 9.43

С помощью кнопки !J задайте команду на выполнение запроса. На экране по­


явится сообщение о том, что удалению подлежит 421 запись (см. рис. 9.44). Затем
Access 2000 предупредит: Once you click Yes, you can't use the Undo command to
reverse the changes (Если вы ответите «Да», то не сможете вернуться назад и от­
менить проведенные изменения). Кроме того, система попросит у вас подтверж­
дения: Are you sure you want to delete the selected records? (Вы уверены, что хо­
тите удалить отобранные записи?). Надеемся, что вы исполнены самых серьезных
намерений и решительно ответите Yes, приведя приговор в исполнение. Таким
образом, вы реализуете запрос на удаление, стерев 421 запись, или 6,6% от общего
числа записей в таблице E S O P E R (6348).

[Microsoft Access
You are about to delete 421 row(s) from the specified table.

Once you click Yes, you can't use the Undo command to reverse the changes.
Are you sure you want to delete the selected records'

" Yes 1 No I

Рис 9.44
Удаление дублирующихся зописей 181
1 New Query ШШШ^^Ш?\х\
Design View
Simple Query Wizard
1:;::::'-,ПЭ\
L_—„_jr — "
Crosstab Query Wizard

Find Unmatched Query Wizard


This wizard creates a query
that finds records with
duplicate field values in a
single table or query,

OK Cancel

Рис. 9 45

Удаление дублирующихся записей


При ведении банка данных довольно часто приходится удалять повторяющиеся
записи. Есть два традиционных пути решения этой задачи:
• не допускать дублирования записей непосредственно при вводе информа­
ции в базу данных;
• находить и устранять повторяющиеся записи из уже сформированной БД.
Напомним, что вы работаем с объединенным информационным банком, в ко­
тором собраны разнородные базы данных. Поэтому неудивительно, что для раз­
ных БД эта задача решается неодинаковыми средствами. В последующих главах
мы покажем, как предотвратить дублирование сведений при вводе информации
в базу данных, используя средства языка Visual Basic. А сейчас речь пойдет о том,
как удалять повторяющиеся записи с помощью стандартных запросов.
Когда информация вводится в оперативном режиме из различных источников,
в базу данных тоже могут попасть сведения, дублирующие друг друга. Прежде чем
удалить такие записи, их надо найти. Следовательно, решение проблемы включа­
ет два этапа - поиск повторяющихся записей и их удаление.

Запрос на поиск повторяющихся записей


Начнем с таблицы ES_OPER. В окне базы данных откройте вкладку Queries
(Запросы) и щелкните по кнопке illttew|. Затем в окне New Query (Новый запрос)
выберите позицию Find Duplicates Query Wizard (Мастер запросов на поиск по­
вторяющихся записей). Как видите, создаваемый запрос отличается от тех, что
рассматривались ранее, тем, что он строится с помощью мастера запросов. Послед­
ний содержит три шага, каждый из которых описывается своим окном.
В первом окне (рис. 9.46) мастер спрашивает: Which table or query do you
want to search for duplicate field values? (В какой таблице или запросе вы хо­
тите искать повторяющиеся поля?). Выберите таблицу ES_OPER и продол­
жите работу.
182 Программировониена языке SQL

Find Duplicates Query Wizard


Vhich table or query do you i*<arit to feah.fi for duplicate fiel" values'
1 >.\л хлк m |

3 W, XXX V.-AY. I 1 For example, to find cities with mote than one customer you wuuld
2 у/ли xxx xxx | choose a Customer table below
4 мл xxx xxx р ^

2 xxx xxx ^
CLAS5T J
2 х:.х х г X
CLPEb

Filcl
fT'rN J
REGION
REGION D
TIPCHS
Jll
View

(• Tables <~ Queries <" Belt.

Cancel Next >

Рис 9 46

В следующем окне (см рис. 9.47) вы должны ответить на ВОПРОС: Which fields
might contain duplicate information? (Какие поля могут содержать повторяющую­
ся информацию?) - и указать эти поля. Будем считать, что записидублнруют друг
друга, если в них совпадает содержимое трех полей: Дата ЧС, Код населенного
пункта,-Код вида ЧС. Иначе говоря, мы исходим из того, что в од-ш и тот же день

Find Duplicates Query Wizard


Which fields might contain duplicate information 7

For example, if you are looking for cities with more than one customer, you
would choose City and Region fields here

Available fields: Duplicate-value fields

Дата ЧС
Дата обновления информации. Код населенного пут та
Признак контроля
Населенный пункт
Серийный номер записи
Широта
Долгота
Объект (место) j j

Cancel <Back Next > Finish

Рис 9 47
Удаление дублирующихся записей 183
в данном населенном пункте не могут произойти две или более однотипные аварии.
(Конечно, было бы проще постави гь условием совпадение всех полей. Однако даже
для записей аналогичного содержания это слишком маловероятно: сообщения об
одном и том же событии могут передаваться разными людьми и основываться па
разных источниках информации. Отсюда неизбежность расхождений и просто оши­
бок.) Вы уже знаете, как открыть перечисленные поля в окне мастера запросов, по­
этому здесь представлен лишь конечный результат (см. рис. 9.47).
После этого мастер откроет следующее окно (см. рис. 9.48) и выведет на экран
вопрос: Do you want the Query to show fields in addition to those with duplicates
values? (Хотите ли вы включить в запрос какие-либо поля в дополнение к тем,
которые дублируются?). Рекомендуем добавить поле Номер, где указывается но­
мер записи (чуть позже будет объяснено, зачем). В следующем окне мастер пред­
лагает вам назвать новый запрос.

Find Duplicates Query Wizard


Do you want the query to show helds in addition to those with duplicate values?

1 xxx хм xxx
2 m>. XJX xx>. For example, if ynu chose to look hot duplicate Cit/ values, you could choose
3 XI-.X XI-.X XXX CustomerfJame and Addiess heie
2 xxx хьх ххь
4 x v x"' XT A mailable fields Additional query fields

Дэта обнпБп^ния инфор


Признак контропя
Населенный п^нкт
Серийный номер иапис
Широта
Долгота
Объект |'МРГТГ|'|
d 3ftvwMf.tr-

* mm

Cancel <Въг_к Next > Finish

Рис 9 48

Пока советуем принять имя Find duplicates for ES_OPER (Поиск дублирую­
щихся записей в таблице E S O P E R ) .
Запустив этот запрос на выполнение, вы получите выборку в виде таблицы (см.
рис. 9.49). Здесь аккумулированы записи, в которых повторяются поля Дата ЧС,
Код населенного пункта и Код вида ЧС, определенные выше в качестве критери­
ев отбора. Как видите, таких записей всего 307, или 5,0% от их общего числа -
вполне правдоподобная оценка.

Удаление повторяющихся записей


Если следовать формальной логике, при удалении записей нужно использовать
запрос на удаление. Можно так и сделать, но это не идеальное решение. Попробу­
ем разобраться.
184 Программирование на языке SQL

1 Ш Microsoft Access i ^ H - b M
[ File Edit View Insert Format F ernrd; Tools w»" dow Help

|Ой@#ЙС' * 4§> i , b - iia- °ё-М~ "


>M.- H i i E i ? X. 4n t * 1 l\ .- © V
1
lis Find duplicates for ES_OPER: Select Query
Дата ЧС | Код насаленн| Код вида ЧС |
•i-|n|x|
Номер |_i|
.i. 01/01/199711U50010 110603 53B4H
01/01/1997 11450010 10603 725!
01Л37/1997 11450010 10206 847
01/07/1997 11450010 10206 841!
01/03/1997 12710240 10206 2715 s
01/03/1997 12710240 10206 2784 i
01/08/1997 12710240 10206 3802
02/05/1997 11450010 10206 2289.
02/05/1997 11450010 10206 2197
02/19/1997 11450010 10701 883
02/19/1997 11450010 10701 826'
03/05/1997 11450010 10701 2946
03/05/1997 11450010 10701 2836
Re cord: к I • 11 i > I и I»» оГм7 ?ЩГ zl
Рис. 9.49

Когда вы удаляете определенные записи с помощью соответствующего запро­


са, вы должны ввести какие-то условия отбора. Эти критерии могут быть основа­
ны либо на внешних признаках (нужно отобрать значение, которое равно, больше
или меньше указанного числа или выражения), либо на определенном соотноше­
нии между полями одной записи (заданное соотношение должно соблюдаться во
всех отфильтрованных записях). В условиях отбора не заложено сопоставление
различных записей, а ведь именно это требуется при поиске дубликатов. Сформу­
лировать критерии отбора так, чтобы они позволяли отследить именно повторя­
ющиеся записи, не удается. Если же вы непременно хотите использовать для
уничтожения дубликатов запрос на удаление, попробуйте следующий способ. За­
дайте в качестве условия удаления номер записи, который указывается в запросе,
на поиск повторяющихся записей, как показано на рис. 9.49. (Вот почему поле
Номер следует включить в итоговую таблицу повторяющихся записей!) Чтобы
осуществить эту идею, в строке Criteria (Условия отбора) бланка запроса на уда­
ление введите выражение типа:
N1 AND N ? AND N3 AND.

где:
Q N] - номер первой записи, которую следует удалить;
• N - номер второй записи, которую надо удалить;
• N - номер третьей записи на удаление, и т.д.
Удаление дублирующихся записей 185
Номера этих записей приведены в результирующей таблице повторяющихся
записей (см. рис. 9.49). Однако учтите: вам придется либо вручную переносить
номера из таблицы в запрос (при большом числе записей занятие малоприятное),
либо писать для данной цели специальный макрос.
Однако можно воспользоваться и другим способом. Мы не утверждаем, что он
самый лучший, но в данном случае этот путь действительно проще, чем создание
запроса на удаление. Нужно последовательно применить запросы на обновление
и добавление записей. Итак, в чем суть нашей идеи?
В таблице ES_OPER создается новое поле - назовите его Условие отбора. Вве­
дите в него конкатенацию полей. Конкатенация - это объединение текстуальных,
числовых символов или дат в одной ячейке, которое осуществляется с помощью
оператора & (так называемого аиперсанда). В нашем случае следует ввести поля
Дата ЧС, Код населенного пункта и Код вида ЧС, потому что именно они выше
были заданы в качестве критериев отбора дублирующихся записей. При созда­
нии этого поля разрешается дублирование записей, поскольку они уже существу­
ют. Затем надо скопировать структуру таблицы ES_OPER (без ее содержания)
и в полученной копии в поле Условие отбора задать запрет на дублирование ин­
формации. После этого в пустую таблицу следует добавить записи из исходной
таблицы ES_OPER. Тем самым повторяющиеся записи исключаются, поскольку
их ввод запрещен в поле Условие отбора. Чтобы завершить операцию, удалите
исходную таблицу ESOPER, а ее название присвойте скопированной таблице.
Поле Условие отбора можно также удалить, но лучше его все-таки оставить, что­
бы предотвратить дублирование записей в дальнейшем.
Мы разработали стратегический план операции. Теперь начнем его реализацию.

ВВОД НОВОГО ПОЛЯ


Приступим к формированию и исполнению запроса на обновление. Сначала необ­
ходимо создать новое поле Условие отбора с помощью конструктора таблиц. Так как
об этом подробно рассказывалось в главе 3, здесь мы приводим лишь результат рабо­
ты: итоговый вид поля Условие отбора в конструкторе таблиц (см. рис. 9.50).
Как уже говорилось, в новом поле для исходной таблицы допускается дублиро­
вание: для свойства Indexed (Индексировано) установлено значение Yes (Dupli­
cates OK) - Да (Дублирование разрешается). Когда вы будете сохранять это из­
менение в структуре таблицы, Access 2000 поделится с вами своими сомнениями
(см. рис. 9.51): Existing data violates the new setting for the "Required" property for
field "Условие отбора" (Существующие данные входят в противоречие с новым
значением свойства Обязательное заполнение для поля Условие отбора) - и пред­
ложит подумать: Do you want to keep testing with the new setting? (Вы хотите
продолжить работу при сохранении нового значения?). Здесь возможны следую­
щие варианты ответа:
Q To keep the new setting and continue testing, click Yes (Чтобы сохранить
новое значение и продолжить работу, щелкните по кнопке Yes);
• То revert to the old setting and continue testing, click No (Чтобы вернуть­
ся к старому значению и продолжить работу, щелкните по кнопке No);
186 Программирование на языке SQL

Ы Microsoft Access шш
File Edit Vie'"" In c Hrf Tool. Window Help

""
n- н
' ' ' — ' •
(a i-> с
1• ES O P E R : Table 1_ | n | x |
Field Name I Data Type I Description kl
Код Еида ЧС дополн2 Text
Группы население Text
ТребоЕанич Text J
_•. Услссие отбора Text
zJ
_. __ Field Properties

General Lookup |
Alio
Field See 40 w
Format umc
Input Mast ode
Caption
Default Value corn
Validation Rule pre

Validation Text n
Required 'yes ГСП
Allow Zero Length No i-hi_.
Indexed Yes (Duplicates OK)
hel
Unicode Compression Ves zi d-

'1
Рис 9 50

Microsoft Access
Existing data violates the new setting for the 'Required' property for field
'Условие отбора.'

Do you want to keep testing with the new setting?


* To I eep the new setting and continue testing, click Ves
* To revert to the old setting and continue testing, click No.
* To stop testing, click Cancel.

No Cancel

Рис 951

• To stop testing, click Cancel (Чтобы прервать выполнение операции, вос­


пользуйтесь кнопкой Cancel).
Оставьте сомнения и смело отвечайте Yes В результате вы получите таблицу
ES_OPER с новым пустым полем Условие отбора.

Запрос на обновление записей


Теперь сформируйте запрос на обновление, чтобы ввести в созданное поле Условие
отбора конкатенацию полей - критериев, ио ко горим идет поиск дублирующихся
Удоление дублирующихся записей 187
записей. Как обычно, сначала создайте запрос для таблицы ES_OPER. Чтобы пе
возиться с лишней информацией, оставьте в запросе только одно поле - Условие
отбора. Затем, как и раньше, откройте меню Query Type (Тип запроса) и выберите
опцию Update Query (Запрос на обновление). В строку Update to внесите конкате­
нацию: [Дата ЧС] & [Код населенного пункта] & [Код вида ЧС] (см. рис. 9.52).

Ы Microsoft Access г^тзп


File Edit Vie* Insert Query Tools Window Help

is1 QueryP : Update Query ШШ 3


ES_OPER d
Дата ЧС -d
Код населенн—'
Код вида ЧС
Масштаб ЧС
Текст сообще Ч

sU *\

Field Vr поеме отбор a —


Table ES OPER —
Update То' [Дата ЧС1 Ь, [Код населенного п-/мктз1 8*. [Код вида ЧС1
Cntena'
01

-1 i >г

Рис 9 52

Обратите внимание, что имена полей необходимо заключить в квадратные


скобки, иначе вместо значений полей будут введены их названия. Если вы те­
перь отправите запрос на выполнение, то в поле Условие отбора будут включе­
ны совокупные значения полей, полученные после их объединения. На рис. 9.53,
1де представлена часть таблицы ES_OPER, показан результат операции.

И снова - запрос на добавление


Наконец, в заключение работы по удалению повторяющихся записей скопируйте
ES_OPER в новую таблицу, где в поле Условие отбора будет задан запрет на дуб­
лирование. Для этого в окне базы данных выделите таблицу ES_OPER и после­
довательно воспользуйтесь кнопками 4i| (копировать) и |@,| (вставить). В окне
Paste Table As (Вставить таблицу как) укажите имя новой таблицы - назовите ее
ES_OPERl. Теперь активизируйте опцию Structure only (Копировать только
структуру). (Отметим, что возможны и другие варианты: Structure and Data -
Копировать структуру и данные, а также Append Data to Existing Table - Доба­
вить данные в уже существующую таблицу.) Когда вы щелкнете по кнопке ОК,
188 Программирование на языке SQL

Ы Microsoft Access 15ТЗП


File Edit View Insert Format Pucord; J_on|- Window H.= lp

D c& w, - • Л -
»i 51 ~; ^ #4 ©
| • ES_OPER : Table ^ М ^ ^ Н l-l J
Код вида ЧС ;| Группы насоп Требования | Условна отворэ _±.
• 10/14/19981107001020501
001 001 07/09/19981107003030503
008 031 09/16/19981198001030505
001 001 01/18/19991191012030505
017 031 03/18/19991165001030503
017 031 03/18/19991165001030503
008 031 04/04/19991132012030501
001 006 05/27/19981180001030504
010 031 07/27/19981101253630502
018 002 07/27/19981160001030504
017 001 07/27/19981115132430503
001 001 07/27/19981186001030505
001 001 07/27/19981107001030505 , —
Re cord ч I • || 1 • I »i | > » | of 5927
3 J _L 'I
Рис 953

в окне базы данных во вкладке Tables (Таблицы) появится имя новой таблицы -
ES_OPERl. Откроите ее в режиме конструктора и измените то свойство поля Усло­
вие отбора, которое касается запрета на повторение записей. Сравните значение
этого свойства, установленное для скопированной таблицы (см. рис. 9.55), с ана­
логичным значением для исходной таблицы (см. рис. 9.50).
Теперь займемся формированием долгожданного запроса на добавление. Ал­
горитм создания подобных запросов был подробно рассмотрен в этой главе,
в разделе «Запрос на добавление записей в таблицу», поэтому здесь отметим
лишь одну деталь. В данном случае таблицей-получателем является ES_OPERl,

Paste Table As [Ш
T able Name Ok
|E5_OPEPl
Cancel
Paste Option?
"" structure Only
<~ Structure and Dat
<~ Append Data to Existing Tal

Рис 9 54
Удаление дублирующихся записей 189

\Ш Microsoft Access i^^^^HHJnlxl


File Edit VIP Ir^prt l o o l : Wmdu! Help
D & У А чи a Ъ- ПО' og-M~
• - Q l Ra (S \v • [^ "
II • ES OPER1: Table ^ ^ ^ ^ H _ -l> 1
Field Name \ Data Type | Description |
_• >СЛиЕие О т б о р а Те., г

. , Field Proper tier.

General ] Lookup | An
Field Size SO index
Furrnat
Input Mask
уЬмъ
^ ^ H
d speeds
up
search
caption ^ ^ H es
Default Value 4 H | and
Validation Rule ' *"""'" urting
Validation Text on
Requu ed the
Allow Zero Length field,
По
but
Indexed A may
Unicode Comoression Ves
A <;lni,\j

<l j ±fi
Рис 9 55

a таблицей-источником - E S O P E R . В ходе выполнения запроса Access 2000 по­


жалуется вам на то, что не можег включить в таблицу-получатель какое-то ко­
личество записей, поскольку в ней не допускается наличие дубликатов. Именно
к этому вы и стремились! Отбросив угрызения совести, смело отвечайте Да.
Итоговый вид бланка запроса показан на рис. 9.56, а очищенная от повторяю­
щихся записей таблица ES_OPERl - на рис. 9.57.
По поводу последней необходимо небольшое пояснение.
Если вы обратитесь к результирующей таблице повторяющихся записей, кото­
рая представлена на рис. 9.49, то убедитесь, что она включает 307 дубликатов. Меж­
ду тем исходная таблица ES_OPER содержит 5927 записей, а таблица E S O P E R 1 -
5754. Значит, удалено всего 173 записи.
В чем причина такого расхождения? Дело в том, что таблица повторяющихся
записей содержит все дубликаты, а при удалении уничтожаются лишь вторые,
третьи и т.д. копии. Первый же экземпляр сохраняется, так как после удаления
дубликатов он остается единственным. Правда, Access 2000 не утруждает себя
размышлениями о том, какой именно вариант записи следует уничтожить; но это
уже другой вопрос.
Теперь, чтобы завершить всю операцию, удалите из базы данных таблицу
ES_OPER, а ее имя присвойте таблице ES_OPERl. Что касается поля Условие
отбора, то при желании его можно убрать. Однако мы уже рекомендовали вам не
торопиться с этим: наличие поля позволит предотвращать дублирование записей
при последующем вводе данных.
190 Программирование на языке SQL

Ы Microsoft Access
Fjle Edit View In.eit Query loolc vvmctjuvi Help
О Сё У . J( 4 3 f ' - Ь • о-а - Й* °ё -И -
• • Н • & 42 Г" " • ••- « <>а г ли Й' \ ©-Й1 L4.
iui.iiumiun.i.u.inaiHM МЗ
ES OPER 1
Номер
zl
ДатаЧС
Код населен
Код вида ЧС
d
^

ы
Рис 956

1 В Microsoft Access • Н Inlxl


File Edit View Insert Format Pecords; j0|s bVmdow Help

• tS В & & v" * ' • "l, • ой - ' °$ -а • О -


у- в а а ? £1 51 ъъ ** >• * е м- д.
• ES O P E R 1 : Table .M-hM
Номер | Дата ЧС | Код кчаолёнь | Код вида ЧС | Масштаб ЧС | Т е к с т сообщения | Дата обмовлцЧ
• 5247 0MJ1/199 7 110511 4L 1U201 Q 01/01Л99
5316 01/01/1997 1152CJ2J 30115 0 К е м "рйЕ:СК5я об 01/01/199
5329 01/01/1997 1 1 4 1 С Ж 10206 0 Ленинградец о 01/01/199
725 01/D1/1997 1145О01 10603 0 01/01/199
3760 01/01/1997 1149CJ01 10206 0 01/01/199
2641 01/01/1997 11B0Q34 30106 0 01/01/199
1565 01/01/1997 1192C32S 10206 0 09/29/199
5400 01/01/1997 12711 61 30110 0 XaHTfci • М а н т й о 01/01/199
3720 01/01/1998 1130CD01 20101 0 г Петропаыов 02/04/199
3665 01/01/1998 1145CD01 10702 0 г Москва 02/04/199
4892 01/01/1998 11870)25 10303 0 Р е с п у б л и а Кс 02/04/199
4089 01/01/1998 1198Qin9 10603 0 Республика 02/13/199 .
Retcid "j<lf 1 • | н | » « | of 5 7 5 ^ 1
•I I

Рис. 9.57

Перекрестный згырос
Перекрестные запросы позволяиг подсчитывать данные по двуъ-d и более переменным.
В ситуациях, подобных наше^ерекрестные запросы компактнее, ч;м обычные.
Как правило, при перекрестом запросе первый столбец п о лучасмой в результа­
те таблицы отображает значеэшя одной переменной - это заг-оловш строк. В пер­
вой строке этой таблицы пр»иодятся значения второй пере-меннэй - заголовки
столбцов. На пересечении стр»ош столбцов находится сумма («<оли^ество значений,
Перекрестный запрос 191

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

Построение перекрестного запроса


с использованием мастера
Задача, для решения которой потребуется перекрестный запрос, формулируется
гак: необходимо выяснить, сколько аварий (чрезвычайных ситуаций) определен­
ных видов произошло на территории разных субъектов Российской Федерации
(краев и областей). Источником информации послужит таблица Filel.
Формирование перекрестного запроса лучше всего начать в мастере запросов. Во
вкладке Queries окна базы данных с помощью кнопки gpNew[ выйдите в окно New
Query (Новый запрос), как показано на рис. 9.58. В этом окне активизируйте оп­
цию Crosstab Query Wizard (Мастер перекрестных запросов). Откроется еще
одно окно (см. рис. 9.59). На этом этапе работы мастер спрашивает: Which table
or query contains the fields you want for crosstab query results? (Какая таблица
или запрос содержит те поля, которые вы будете использовать в перекрестном зап­
росе 0 ). В нашем случае следует выбрать таблицу Filel. А что делать, если в какой-
либо другой ситуации одной таблицы будет мало? мастер подсказывает: То include
fields from more than one table, create a query containing all the fields you need
and than use this query to make the crosstab query (Чтобы включить поля из бо­
лее чем одной таблицы, сформируйте запрос, содержащий все нужные вам поля,
л затем используйте этот запрос как основу для создания перекрестного запроса).

1 New Query ^^^^ШШ?Ы\


Design View
Simple Query Wizard
Z. \ Crosstab Query Wizard Ш
Find Duplicates Query Wizard
II!

Find Unmatched Query Wi2ard


This wiza
crosstab '•\ър\а\ s
data in a
spreadsh at

OK Cancel

Рис 9 58

Когда вы сделаете выбор, на экране появится следующее окно мастера перекрест­


ных запросов (см. рис. 9.60), где вам будет задан вопрос: Which fields' values do
you want as row headings? (Значения каких полей вы хотите сделать заголовками
строк?). Всего можно указать не более трех полей. Для нашей конкретной задачи
в качестве заголовков строк послужат значения поля Название области. Щелкните
192 Программирование на языке

Crosstab Query Wizard


Which table or quer\ contains the LMSSO _d
fields you want for the crosstab quen, LLASSP
result'? LASSQ
i_LASSR J
CLHSST

To include fields from more than one .LRES


table, create a query containing all the E c OPER
fields you need and then use thi«=
query to make the crosstab query
view

(' Tables Г Си С В th

farnple
Htaderl JHeader2 JHeader3
T JTML

...

Cancel Next >

Рис 9 59

Crosstab Query Wizard


Which fields values do you want as Available Fields Selected Fields
row h e a d i n g ^
Виды ЧС
Наименование ЧС
You can select up to three fields Дата ЧС J
Бремя ЧС
Дата сообщения
Select fields in the order you want
Время сообщения
information sorted For example, you
Код республики
could sort and group values by
Country and then Region Наименование респус
Код области
Код население го п/н

Sample H&&/4
1 Название об Header 1
|Название обла TOTAL
|Header2 |Header3 1
|Назеание обла
ч
|НазвгзНИР обг\а
^На Е ани»- "|Ьпз

шшшшшпш^
Cancel <Back next >

Рис 9 60
Перекрестный запрос 193
по кнопке Next, a затем укажите поля (не больше трех), значения которых станут
заголовками столбцов В данном случае будет выбрано поле Наименование ЧС
После этого вы оказываетесь в следующем oicie мастера (см рис 9 61), где предсто
нт ответить еще на один вопрос What nuirber do you want calculated for each
column and row intersection? (Что вы хотите вычислить для каждой ячейки, рас­
положенной на пересечении столбца и строш?) Вы уже использовали два поля
Название области - для заголовков строк, аНаименование ЧС - для заголовков
столбцов
Теперь понадобится третья переменная, значения которой можно подсчиты­
вать, причем они должны соответствовать .начениям первых двух полей Глав­
ное, чтобы это третье указанное поле не имею пропусков, то есть нулевых значе­
ний Значит, лучше всего подойдет поле Номер В качестве функции для подсчета
числа значений выберите Count (одна из функций групповой обработки данных)
Иначе говоря, в конце концов будет определено количество значений поля Но­
мер для каждой ячейки, которая находится та пересечении столбца (ЧС опреде­
ленного вида) и строки (того или иного региона Российской Федерации) Ска­
занное иллюстрирует рис 9 61 Теперь, когдавы подготовили все необходимое для
создания запроса, щелкните по кнопке Next

Crosstab Query Wizard


'What number do \ ou want calculated for Fields Functions
each colurrn and row intersectiun?

ЕидыЧС
I
Дата ЧС First
For example you cculd calculate the sum Last
Еремя ЧС
of the field Order Amount for each Пах
Дата сообщения
employee (olumn) by ccuntr/ and region
Е ремя сообщения Г Tin
(row)
h од респуб!ики tDev
Наименование республики Чит
Do /ou want to ^ummari^e ea h row"' г- од области чаг
У од населенного пунгта
fv Yer in ludi- row sure H a j f a H U r - С)И НЭ d
Sample
Н а з в а н и е об Н а и г е н о в а н п Наименован!] Н а и м е н о в а ^ Ц
Название ofjiai Count Номер)
Название обла!
Название облс
Название осп:

Cancel ч Езск Next >

Рис 9 6i

В результате на экране появится окно (см рис 9 62), где в формируемый за­
прос нужно внести последние уточнения Вэ-первых, мастер спросит вас What
do you want to name your Query? (Как вы хэтите назвать ваш запрос'?) В прин­
ципе это ваше дело, но мы бы посоветовали тринять имя, которое по умолчанию
7-119
194 Программирование на языке SQL

Crosstab Query Wizard


What do you want to name your query"-'

|Filel_Oo -.tab

That's all the information the wizard needs to create the query

Do you want to view the quel y, or modify the query design?

(*" \ lew the query

f~ Modify the design

Г Display Help on working "'ith the crosstab query

Cancel ; Back Finish

Рис 9 62

предлагает Access 2000. Filel-Crosstab. Следующий вопрос звучит так: Do you


want to view the query or modify the query design? (Вы хотите выполнить запрос
или изменить его оформление?). Выберите соответствующую позицию переклю­
чателя (sj. Вы твердо настроены выполнять запрос, и дизайн вас не интересует
По этой же причине откажитесь от следующего предложения мастера: Display
Help on working with the crosstab query (Вывести инструкцию по работе с запро­
сом). Теперь остается только щелкнуть по кнопке Finish, и запрос будет запущен
на выполнение. А вот дальше в нашем размеренном сюжете возникает неожидан­
ная интрига - сообщение: Too many crosstab column headers (489) (В перекрест­
ном запросе слишком много заголовков столбцов - 489). Это означает, что даль­
нейшее выполнение запроса невозможно (см. рис. 9.63). Озабоченность Access
вполне понятна.

Crosstab Query Wizard

i V To° many ciosstab column headers (489)


OK

Рис 9 63
Перекрестный запрос 195
Фактически вы объявили заголовками столбцов или нолей все наименования
ЧС в таблице, кроме их дубликатов, которые система не пропустит (вместе с по­
вторяющимися именами таких заголовков было бы даже не 489, а 846). Действи­
тельно, многовато. Объяснение здесь простое: при формировании перекрестного
запроса вы не вводили каких-либо критериев отбора. Впрочем, при использова­
нии мастера перекрестных запросов этого сделать все равно нельзя. Если вы хотите
задать такие условия, то нужно сформировать обычный запрос

Ввод условий отбора записей в конструкторе запросов


В окне базы данных во вкладке Query откройте ваш перекрестный запрос в режи­
ме конструктора (см. рис. 9.64). Теперь надо задать критерии отбора записей. Бу­
дем считать, что нас по-прежнему интересует количество ЧС по регионам, но толь­
ко если эти ЧС связаны с пожарами. Поэтому введите в запрос условие «пожар*,
как показано на рис. 9.65. Если вы отдадите команду на выполнение запроса, то
в результате получите таблицу, фрагмент которой приведен на рис. 9.66.

Ы Microsoft Access
j File Edit View Insert Quel у Tools Window Help I
с? .:>' ©
1
lis Filel Crosstab : Crosstab Query l-lnlxl -i
Filel 1
*
Номер
4
Виды ЧС
Наименован! U
ДзтаЧС -d
^

Field Наименование ЧС Номер Total Of Номер Ног* —


Table Filel Filel Filel Filel —
Total. Group By Group By Count Count
Crosstab Row Headinq Column Headinq Value Row Headinq
Sort
Criteria
or
«I.I >r
Рис 9 64

Предположим, необходимо видоизменить запрос. Нужна справка о числе ЧС по


регионам, но теперь нас интересуют не только аварии, связанные с пожарами, но
и катастрофы на нефтепромыслах, нефтепроводах и других нефтяных объектах. Кро­
ме условия *пожар*, введите еще один критерий отбора - *нефте*, используя схему
«ИЛИ». Иными словами, вы запрашиваете число аварий по регионам, в которых про­
изошли либо пожары, либо аварии на нефтяных объектах. (Если бы вы применили
v
196 Программирование на языке SQL

Ы Microsoft Access Щ]
| File Edit View Insert Query Tools Wirndow Help

IB - У \c'., ik. rv cf •> i ©


i? Filel_Crosstab : Crosstab Query • _ | П | Х |

Filel d
Номер
Виды ЧС
Наименовании
Дата ЧС zj

JJ ^
Field Назеание области Наименование ЧС Номер Total Of Номер: Hof —
Table;
Total'
Filel Filel Filel Filel —
Group 6y Group Bv Count Count
Сг osstab Pow Headmq Column Heading Value Row Heading
Soit,
Cntena "пожар*
01

Рис 9.65

ш Microsoft Access ШЕ1


I File Edit View Insert Format Records Tools Window Help

fS-^i-
1
is Filel Crosstab : Crosstab Query
Название области |Total Ot Номе|| Взрыв и пожа| Взрыв и пожа| Лесной пожз.£]
a
Костромская область 1
Краснодарский край 14
Красноярский край _ 5
Курганская область 4
Курская область
Ленинградская область 7
1 -I
Московская область 20
Мурманская область 3
Нижегородская 1
Новосибирская область 2
Омская область 4
Оренбургская облает}. 1
Орловская область 1
у?2^^-72
Rtcuid: н
LUP '££"&$&&&.

Рис. 9.66
Работа со средой Access 2000 без ее инсталляции 197

схему «И», система Access 2000 стала бы отбирать сведения из регионов, где произо­
шли и пожары, и нефтяные катастрофы, а это уже совсем другой блок данных.) Зап­
рос будет выглядеть так, как показано на рис. 9.67. Обратите внимание: когда вы по­
кидаете ту ячейку в бланке запроса, где было введено первое условие *пожар*, система
тут же преобразует его в Like "*пожар* . Результат этого дополненного запроса вы ви­
дите на рис. 9.68, где показан тот же фрагмент таблицы, что и в предыдущем случае.
Во-первых, среди названий столбцов появились новые заголовки, связанные с нефтя­
ной тематикой. Во-вторых, увеличился список регионов; например, добавилась Ма­
гаданская область, которой раньше не было в этом перечне.

Ы Microsoft Access шш
j j File Edit View Insert Query l o o Is Window Help

• : -> cf ::N ©
1
is FilelCrosstab : Crosstab Query ГЛЕШ
Filel 1
Номер
fj
Виды ЧС
Наименов ЭНИ(
Дата ЧС А
J
Field:
Table:
На:ванне области НаименоЕание ЧС
Filel
Номер Total Of Номер: Ног

—i
Filel Filel Filel
Total: Group Бу Group By Count Count
Crosstab: Row Heading Column Heading Value Row Heading
Sort'
Criteria: Like "*'no*ap*"
ot: *н1эфте'*
<l 1 ..Г
Рис. 9.67

Итак, в настоящем разделе мы подробно рассмотрели структуру перекрестного


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

Работа со средой Access 2000 без ее инсталляции


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

\Ш Microsoft Access -HM_blxl


] File Edit View Insert Format Records Tools Window Help

jM- H j # & ! ? i • t V *" ' £1 51 ъъ м • ж © -^. г:


jis 1 Filel_Crosstab : Crosstab Query
Название области
шшпшш ^
|Total Of Номв|| Авария на нвфт<| Авария на нафтв| Авэртл]
Костромская область 1
Краснодарский край 14
Красноярский край 5
Курганская область 4
Курская область 1
Ленинградская область 7
Магаданская область 1 1
Московская область 20
Мурманская область 3
Нижегородская 1
Новосибирская область 2
Омская область 4
Оренбургская область 1
~
Re cord и | • | | 1 » | и | - * | of 4 3 А1 J -I

РИС 9 68

данных в программной среде Access 2000, а затем установил эту БД иа другой ло­
кальный компьютер, где не инсталлирована ни Access 2000, ни даже пакет Microsoft
Office. Возникает естественный вопрос: может ли пользователь работать на таком
компьютере с созданной базой данных? Оказывается, да, и в настоящем разделе
мы расскажем, как этого добиться.
В главе 8 уже говорилось, что в большинстве СУБД использование языка SQL
фактически является правилом. Наличие общепринятого языка позволяет стан­
дартизировать работу приложений с источниками данных - различными СУБД.
В Windows такую возможность обеспечивает Open Data Base Connectivity (ODBC) -
стандартный набор функций, помогающих обрабатывать информацию на серве­
рах баз данных SQL. Именно ODBC обеспечивает различным программам доступ
к одному и тому же источнику сведений.
Принцип действия ODBC состоит в следующем. Чтобы то или иное приложе­
ние могло воспользоваться информацией из базы данных какой-либо СУБД, не­
обходимо установить драйвер ODBC для баз данных конкретной СУБД. Для каж­
дой СУБД должен быть установлен свой драйвер. Папка, где устанавливается этот
драйвер, обычно так и называется - ODBC - и устанавливается вместе с загруз­
кой Windows. Драйвер ODBC - это динамически связываемая библиотека со
стандартным интерфейсом, которая обеспечивает доступ к базам данных в опре­
деленном формате. Из любого приложения пользователь может легко связаться
с любым из установленных драйверов ODBC и получить доступ к информации
в базе данных, даже если СУБД, где была создана эта база, не инсталлирована на
пользовательском компьютере.
Работа со средой Access 2000 без ее инсталляции 199

В составе пакета Microsoft Office, начиная с самой первой версии, есть програм­
ма MS Query, обеспечивающая доступ к любым данным, для которых установле­
ны драйверы ODBC. Отметим, что MS Query имеет собственный интерфейс
н может функционировать отдельно от Microsoft Office. Мы воспользуемся про­
граммой MS Query, взятой из ранних, русифицированных редакций Microsoft
Office, поэтому в настоящем разделе диалоговые окна будут выводиться на рус­
ском языке.
Рассмотрим работу с MS Query на конкретных примерах.
Сначала откройте папку MS Query, а в ней запустите программу Msqry32.exe
(см. рис. 9.69). На экране появится основное диалоговое окно программы MS
Query, показанное на рис. 9.70.

|Cfc MS query |_|п|х|


j A d d r e s s | _ J ram Files\Common Files\Microsoft S h a r e d \ M S q u e r y j j Fil* »И1
. a li id is »
Up Cut Copy Paste

1Й Customer cdx J | Orddtail dbf


-3| Customer dbf ( Й Orders cdx
UH Employee cdx P ] Orders dbf
-3| Employee dbf (fa Product cdx
MSquery - M s c r e a t e drr Ci] Product dbf
%1 0rvint32 dll
Msqry32.eKe " Msqrv32 aid Щ Supplier cdx
Прило•ение ^ M s a r v 3 2 hip yi] Supplier dbf
Ш Orddtail cdx '•*] з а п р о с ! arv
Изменен
1 0 / 2 8 / 1 9 9 5 00.00
J
J643KE \M M y Computer .4

Рис 9 69

В нем следует воспользоваться кнопкой (тЩ (Открыть запрос). Так вы начнете


формировать запрос на выборку данных из БД в Access 2000, не инсталлируя саму
систему Access. Чтобы убедиться в этом, проведите небольшой эксперимент. Пере­
несите в какую-нибудь другую папку программу, которая запускает Access 2000, -
Msaccess.exe. Тем самым вы блокируете запуск СУБД.
Итак, щелкнув по кнопке Открыть запрос, вы откроете окно Выбор источника
данных (см. рис. 9.71) Здесь можно выбрать опцию MS Access Database, а затем
щелкнуть по клавише Использовать. Однако сначала откройте окно Источники
данных ODBC, показанное на рис. 9.72.
Здесь приведен перечень тех СУБД и вообще файлов других форматов, к кото­
рым можно получить доступ с помощью ODBC. Система Access 2000 далеко не един­
ственная в этом списке. Теперь щелкните по кнопке ОК. После обычной Windows-
процедуры поиска нужного файла вы открываете базу данных dbl.mdb и видите
на экране знакомое окно Добавить таблицу (см. рис. 9.73).
Выберите и добавьте две таблицы. Фирмы и Страны. Данные из этих таблиц
появятся в бланке запроса почти в том же виде, в каком они представлены в режиме
200 Прогроммирование на языке SQL

. Microsoft Query №ГП


Файл
ШШШ ИЗ ШШ Ш 0 Z 3 ШШ ШИЗ LM3

"T't-r "|"^ЩЧЙСЛ. Г :У Г

Рис 9 70

Выбор источника данных Источники данных ODBC


Доступные источники данных Использовать! £ведите источник данных
MS Access Database • admin
IMS Access Database
Отмена
'Visual FoxPro Tablei
другие
Visual FoxPio Database
FoxPro Files
Уд а пить Paradox Files
Text Files
MS Access 97 Database
MS Access Database Id
OK Отмена
Рис 9 71
Создать Удалить

Рис 9 72

конструктора (см. рис. 9.74). Если вы не установите явную связь между двумя таб­
лицами по коду страны, то в результате будет выведен полный набор имеющихся
значений: все фирмы и страны независимо от того, в какой стране находится та
или иная фирма. Чтобы упорядочить информацию, лучше обозначить связь меж­
ду таблицами, что вы и видите на рис. 9.74. Если потребуется перейти из этого
Работа со средой Access 2000 без ее инсталляции 201
Добавить таблицу
Table Лобаеить
Менеджер *]
Назначение
Закрыть
Приборы для измерения кислотнс
Приборы представленные на рын
Словарь стран
Страны
Страны Query
Типы приборов

'Т ирмы в России У .Опции

И
Database ]c \Мои документы \E_jJ

Рис 9 73

1
•"- Microsoft Query ]дЕ]
Файл Правка Просмотр Формат Таблица Критерий Записи Окно
ши и шщгаигзп шщ i щ №?
"•Запрос! пнтзп
Страны Фирмы
Андрее -
Gen_npHMe43h Адрес 2
s_Generation Код страны
s_GUID Код Фирмы
s_Lmeage Название Фир|
Kga ; Примечания J

Код Фирмы | Название Фирмы | Примечания Страна


ГЕОХИ РАН Россия
Sarlm Automation ФИНЛЯНДИЯ
TAAG Португалия
Milton Roy Company Страна не указана
SYR US Systems Страна не указана
НПП "ЭК0НИКС" Россия
Петербургский инстит Россия
ОКБ ТЕСТ Фирмы "Ан Россия
AD 'ЭКРОС" Россия
ишззписьи „..„иац "л1 J >г
Для показа и «ггерия отбора выбери "Г~ПШУГ^Щ\
Рис 9 74

режима в режим таблицы, щелкните по кнопке f^j (Показать/спрятать таблицы).


Режим таблицы показан на рис. 9.75.
Теперь предположим, что нужен список фирм, работающих в России. Иными
словами, вы собираетесь создать запрос на выборку. Для этого воспользуйтесь
кнопкой \$\ (Показать/спрятать критерии). На экране появится бланк запроса
с перечнем условий отбора. Задайте в поле Страна критерий Россия, как показано
202 Программирование на языке SQL

Microsoft Query TrJRI


Файл Праька Просмотр Формат Таблица Критерий Записи Окно 2.

•Запрос! ЕШЗ
Страны Фирмы
s_GeneiaNon .Адрес J
s_GUIO Адрес 2
o_Lineage Код страны
Код Код Фирмы
Примечания Название фир|_
Страна Примечания

Попе Страна
Значение Россия 1
и пи

Код Фирмы Название Фирмы ] Примечания Страна


ГЕОХИ РАН Россия
Sarlin Aufomofion Финляндия
TAAG Португалия
_Millr,n Rr.li Г г . т г . л ,
ft
1«Н1 Запись И "ТЛмТ
•г
Готово ЧИСЛ I

Рис. 9.75

на рис. 9.76. Затем, как обычно, с помощью кнопки j l отправьте запрос на выпол­
нение. (Отметим только, что в данном случае знакомая вам кнопка называется
иначе - Запросить сейчас.) Результирующая таблица, которая содержит отобран­
ные записи, приведена на рис. 9.77. Сохраните запрос, как делали это раньше. Те­
перь его можно вызвать и реализовать посредством кнопки [eg] (Вызвать запрос).
И последнее: если вы щелкнете по кнопке |juj (Показать SQL), то получите текст
запроса на языке SQL.
Таким образом, вы вошли в базу данных системы Access 2000 с помощью драй­
вера ODBC и получили возможность нормально работать. Примечательно, что вы
не инсталлировали саму систему, но получили почти полную иллюзию того, что
находитесь именно в ней.

Резюме
1. Главной «специальностью» языка SQL является конструирование запросов
пользователя к базе данных. Поэтому программирование на языке SQL в ос­
новном - это формирование таких запросов.
2. Основные типы запросов с использованием SQL:
- select query (запрос на выборку);
- make-table query (запрос на создание таблицы) - создает новую таблицу
па основе данных, которые уже размещены в одной или нескольких таб­
лицах;
Резюме 203

•"-Microsoft Query L^HJnlxl


9
Ф аi i n Правка Просмотр Формат Таблица Критерий Записи Огмо

I ]{ЩЩ N Ф OU
m йи \ш [ш ш
"•Запрос! L^LB.Inlxl
Н а з в а н и е Фирмы | Примечания 1 Код | Примечания 1 Opai^i.
• YSl incorporated USA _j
Cole-Parmei Internatioric Cij USA
Alltech из USA
SEMSORTECHNIKMEI 04 Германия
— ,AMEL Instrument 05 Италия
ОАО "ЦЕ-ет" 06 Россия
Нефть-Газ-Начка 06 Россия
НПП 'ЭКОНИКС" 06 Россия
ЭКОХЕЛП ИНСТРУМЕ 06 Россия
АО 'ЭКРОС" 06 Россия
Петербургский инспгг 06 Россия
ОКБ ТЕСТ фирмы "Ан. 06 Россия
— ГЕОХИ РАН 06 Россия
LEEMAN LABS 07 США
Sailin Automation 08 Финляндия
DATA LINK Instruments 09 Франция
Ф и р м а не указана 01 Страна не ч.к;
Wilks Enterprise. Inc 01 Страна не чк<
FCI Envnonrnental 01 Страна не чк;
Milton Roy Company 01 Страна не чк< ,
ИШЗапмсьП IMW1 < J щ>
Для показа и правки критерия отбора выберите Просмотр К 1
fjr ": ,числ [ Г~

Рис. 9.76

- delete query (запрос на удаление) - удаляет все записи из одной или не­
скольких таблиц на основании критериев, заданных пользователем;
- append query (запрос на присоединение) - добавляет целые записи или
только указанные поля в одну или больше таблиц;
- update query (запрос на обновление) - изменяет данные в существующих
таблицах на основании информации в окне конструктора.
3. Запросы могут создаваться как с помощью конструктора (Query Design), так
и посредством мастера (Query Wizard). На наш взгляд, конструктор удобнее:
во-первых, его операции оформляются более наглядно, во-вторых, из
конструктора легко переходить к инструкциям в форме SQL и наоборот. Тем
не менее, показаны и примеры построения запроса с использованием масте­
ра запросов.
4. Возможна и третья форма представления запроса - инструкции SQL. Меж­
ду запросом, сформированным посредством конструктора, и инструкцией
SQL существует жесткая и однозначная связь.
5. В главе были подробно рассмотрены конкретные примеры формирования
запросов различных типов:
- запросы с использованием групповых операций;
- запросы с дополнительными условиями;
- запросы с параметрами;
204 Программирование на языке SQL

1 1 Microsoft Query |п|ж|


н—'
ФйГт ПраЕка Просмотр Формат T&6Jтнца Критср й Записи GKHO 2.

Ю1 N mm и R
1 "«Запрос!
Название Фирмы | Примечания 1 Код 1 Примечания 1
в п|х|
Страна
• ОАО "Цвет" 1 Россия
Нефть-Газ Начка | 06 Россия
нпп 'зконикс" ; 06 — Россия
ЭКОХЕЛП ИНСТРУМЕ. 06 Россия
АО 'ЭКРОС" 06 Россия
Петербчргский ннстит 06 Россия
ОКБ ТЕСТ фирмы "Ан 06 Россия
ГЕОХИ РАН 06 Россия
W i l l Запись 11 \ШП il 1 •J
г • -
Для показа и правки критерия отбора выберите Просмотр К. | Г ! Г "{"" |числ Г 1

Рис 9.77

SELECT DISTINCT Фирмы Адрес. Фирмы 'Адрес 2", Отмена


фирмы Код страны". Фирмы "Код Фирмы',
Фирмы 'Название Фирмы'. Фирмы Примечания.
Страны Страна
FROM 'с \Моидокументы\Банки данными"!'Страны
Страны, 'с \Моидокументы\Банки данны>.\с1Ы' Фирмы
Фирмы
w/HERE Фирмы 'Код страны' = Страны Код AND
((Страны Страна='Россия')|
d

Рис 9 78

- запросы на создание таблицы;


- запросы на добавление записей в таблицу;
- запросы на удаление записей;
- запросы на обновление записей;
- перекрестные запросы,
а также сложные запросы, формируемые на основе перечисленных.
Поскольку в большинстве СУБД использование языка SQL фактически
является правилом, наличие общепринятого языка позволяет стандартизи­
ровать работу приложений с источниками данных - различными СУБД.
В Windows такую возможность обеспечивает Open Data Base Connectivity
(ODBC) - стандартный набор функций, помогающих обрабатывать инфор­
мацию на серверах баз данных SQL. Именно ODBC обеспечивает различ­
ным программам доступ к одному и тому же источнику сведений - напри­
мер, СУБД, не требуя инсталляции этой СУБД. Так, в частности, возможны
доступ и работа с данными, сформированными в Access, без ее инсталляции.
В главе показан пример реализации такой возможности.
Глава X
Программирование
с использованием
макросов

• Функции макросов
• Использование макросов для обработки событий
• Использование макроса
при выполнении сложного запроса

Функции макросов
Макросы бывают двух видов: единичные, то есть состоящие из одной макроко­
манды, и сложные. В последнем случае макрос включает несколько последова­
тельно выполняемых макрокоманд, объединенных общим именем. Каждая мак­
рокоманда осуществляет определенную операцию: установить значения, открыть/
закрыть таблицу, найти запись и т.д. Как правило, макрос автоматически запуска­
ется при наступлении какого-либо события: например, пользователь щелкает той
или иной кнопкой мыши, открывает таблицу, переходит от одного поля к другому
и т.п. Чтобы запустить макрос, надо указать его имя. Если макрос запускается
в ответ на событие, он должен быть присоединен к соответствующему свойству
формы, отчета и т.д. (см. главу 4, например, раздел «Заголовок формы»).
Макросы могут использоваться для выполнения довольно широкого диапазона
операций. Например, макросы позволяют:
206 Программирование с использованием макросов

• открывать отчет для просмотра или печати;


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

Использование макросов
для обработки событий
Наиболее часто макросы применяются для обработки событий. При этом макрос
может функционировать и как самостоятельная программа, и в составе процеду­
ры VBA (Visual Basic for Applications). Первый вариант иы рассмотрим чуть ниже,
а второй станет предметом нашего внимания в следующей главе.

Понятие события
Событие - это любое действие пользователя; щелчок кнопкой мыши, открытие
формы и т.д. Событие может также инициироваться каким-либо оператором
Visual Basic пли самой системой Access. События связываются с формами, отче­
тами, разделами форм и отчетов, а также с элементами управления форм - в част­
ности, с полями. Откликом на событие может быть выполнение процедуры об­
работки событий на языке VBA (о чем речь пойдет Б следующей главе) или
макроса.
Что такое обработка события? Например, давайте посмотрим, как выглядят
свойства поля формы (пусть это будет форма Страны). Откроем ее в режиме
конструктора (см. рис. 10.1).
Надо открыть также список событий, предусмотренных для какого-либо поля
данной формы (например, для поля Код). Для этого следует либо дважды щелк­
нуть левой кнопкой мыши в пределах этого поля, либо Щелкнуть там же правой
кнопкой мыши и в появившемся контекстном меню выбрать опцию Properties
(Свойства). Когда на экране возникнет одноименное окно, откройте в нем вклад­
ку Event (Событие). В результате будет выведен искомый список возможных со­
бытий (см. рис. 10.2).
Событие возникает для этого поля в следующих случаях:
• при обновлении поля (до или после операции);
• при открытии/закрытии поля;
• при активизации/дезактивизации поля, когда оно получает или теряет фокус;
• при использовании кнопок мыши (щелчок, двойной щелчок, движение
кнопки вверх или вниз);
• при использовании клавиатурных клавиш (щелчок по клавише, ее движе­
ние вверх или вниз);
• при перемещении курсора.
Для другого элемента управления (например, для кнопки, текстового поля и т.д.)
перечень событий, предусматриваемых в Access 2000, может быть несколько иным,
но тоже достаточно длинным.
Использование макросов для обработки событий 207

Ш Microsoft Access
File Edit View In:«tt Format Tools Window Help

IБ Страны: Form Ml
• 10 • i • И i I 2 - 1 -

• Form Header
* Detail

Код i't o n

Стран лрана
• *

Дрш Ш-ЯЭг- \ЛЯ Примечания

>г.
Рис 10 1

\\£ Text Box: Код Щх\


Format ) Data
Before Update . .
Event | other
I
|
« Щ Ш
After Update ..

"~"""* ш
On Exit \ \\ ) ' 1 1
On Lost Focus . .
|_
!
On Click
On 0Ы Click . .
On Mouse Down .
On Mouse Move .
1
••
On Key Up
Ни
1
On Key Press . . ,
f-'-ffj;

Рис JO 2

Последовательности событий
Разработчик, который встраивает в систему определенные реакции программы на
действия пользователя, должен учитывать-следующее. Каждая отдельная опера­
ция (допустим, переход от одного элемента управления к другому) может повлечь
208 Программирование с использованием макросов

за собой ряд событий, возникающих в определенной последовательности. Очень


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

Порядок событий элементов управления в формах


События элемента управления возник ают в форме при переводе фокуса на элемент
управления, а также при изменении илш обновлении данных в этом элементе.
Перевод фокуса на элемент управления
Так, при переходе фокуса в форму, в которой выводится один или несколько ак­
тивных элементов управления, или при переходе к другому элементу управления
в этой же форме возникают события On Enter (Вход) и On Get Focus (Получение
фокуса^ в следующем порядке:
On Enter =» On Get Focus.
Названные события возникают также после того, как пользователь откроет фор­
му, то есть после операций Open (Открытие), Activate (Включение), Current (Те­
кущая запись). Последовательность в данном случае такова:
Open (для формы) => Activate (для формы) Current (для формы) => On Enter
(для элемента управления) => On Get Focus (для элемента управления).
Теперь рассмотрим иную ситуацию: элемент управления теряет фокус. Напри­
мер, форма, в которой активизируются один или несколько элементов управле­
ния, закрывается или пользователь п ереходит к другому элементу управления
в той же форме. В таком случае возникают события:
On Exit =» On Lost Focus.
Когда пользователь закрывает форму, события On Exit (Выход) и On Lost Focus (По­
теря фокуса) возникают перед операциями, связанными с этим закрытием: Unload
(Выгрузка), Deactivate (Отключение), Close (Закрытие). Порядок будет таким:
On Exit (для элемента управления) => On Lost Focus (для элемента управле­
ния) => Unload (для формы) => Deactivate (для формы) => Close (для формы).
Изменение и обновление данных в эле менте управления
Предположим, пользователь включает в элемент управления формы новые дан­
ные или изменяет существующие, а затем переводит фокус на другой элемент
управления. Тогда возникают события Before Update (До обновления) и After
Update (После обновления), происходящие в следующем порядке:
Before Update =» After Update.
События On Exit и On Lost Focus для изменяемого элемента управления возни­
кают после событий Before Update и A^fter Update:
Before Update =» After Update => Oni Exit =» Lost Focus.
Если пользователь модифицирует текст, который находится в поле, или изменяет
содержимое поля со списком, то возн икает событие On Change (Изменение).
Использование макросов для обработки событий 209
Отметим, что оно происходит при лнобом изменении содержимого элемента
управления, причем до перехода к другому элементу управления или к другой за­
писи (следовательно, до возникновени:я событий Before Update и After Update).
Если курсор находится в поле, то щелшок по любой клавише, соответствующей
символу, вызывает следующие событиям
On Key Down (Клавиша вниз) => O n Key Press (Нажать клавишу) => On
Change (Изменение) => On Key Up ((Клавиша вверх).
Событие Not in List (Отсутствие в сшиске) возникает, когда пользователь вводит
в поле со списком значение, отсутствующее в этом списке, а затем пытается перей­
ти к другому элементу управления или ж другой записи. Событие Not in List проис­
ходит также после событий клавиатуры ш события On Change (Изменение) для поля
со списком, но до возникновения любых «событий в элементе управления или формы.
Если для свойства поля со списком Limit. To List (Ограничиться списком) задано зна­
чение Да, то сразу после Not in List возшикает событие формы Error (Ошибка):
On Key Down => On Key Press => Om Change => On Key Up => Not in List =>
Error.

Порядок событий записи в фор(ме


События записи возникают в форме в (следующих случаях:
• при переводе фокуса на запись;
U при обновлении содержимого загписи;
• при удалении существующей зашиси/записей;
• при создании новой записи.
Перемещение фокуса по записям и обшовление содержимого записей
При переводе фокуса на запись, существующую в форме, при вводе новых или
изменении существующих данных в защиси, а также при переходе к другой запи­
си той же формы возникает такая последовательность событий:
Current (Текущая запись) => Before lUpdate (До обновления) => After Update
(После обновления) => Current (Текущая запись).
При выходе из измененной записи, шо до входа в новую запись возникают со­
бытия Exit (Выход) и On Lost Focus (Шотеря фокуса). Они происходят для того
последнего элемента управления, на котором находился фокус. Эти события воз­
никают после событий формы Before Update и After Update:
Before Update (для формы) => After lUpdate (для формы) => Exit (для элемента
управления) => On Lost Focus (для элемента управления) => Current (для формы).
При переводе фокуса с одного элемента управления на другой возникают со­
бытия для каждого из этих элементов. Иапример, возможны такие последователь­
ности событий:
• открытие формы и изменение дажных в элементе управления:
Current (для формы) => On Enter (для элемента управления) => On Get
Focus (для элемента управления)) => Before Update (для элемента управле­
ния) => After Update (для элемента управления);
210 Программирование с использованием макросов

Q перевод фокуса на другой элемент управления:


On Enter (для элемента управления 1) => On Lost Focus (для элемента
управления 1) => On Enter (для элемента управления 2) => On Get Focus
(для элемента управления 2);
• перевод фокуса на другую запись:
Before Update (для формы) => After Update (для формы) => Exit (для эле­
мента управления 2) => On Lost Focus (для элемента управления 2) =>
Current (для формы).

Удаление записей
Когда пользователь удаляет запись, в форме возникают следующие события:
Delete (Удаление) =• Before Del Confirm (До подтверждения удаления) => After
Del Confirm (После подтверждения удаления).
Перед этим Microsoft Access обязательно выводит диалоговое окно, предлагая под­
твердить удаление. Если пользователь отменяет событие Delete, то события Before
Del Confirm и After Del Confirm не возникают и диалоговое окно не выводится.

Создание новой записи


Если пользователь переводит фокус на новую (пустую) запись в форме или со­
здает новую запись, вводя символы с клавиатуры, то события возникают в следу­
ющем порядке:
Current (для формы) => On Enter (для элемента управления) => On Get Focus
(для элемента управления) => Before Insert (До вставки - для формы) => After
Insert (После вставки - для формы).
Отметим, что события Before Update и After Update для элементов управле­
ние в форме и для новой записи возншсают после события Before Insert, но до
события After Insert.

Порядок событий клавиатуры и мыши


События клавиатуры возникают в имеющих фокус формах или в элементах управ­
ления формы при нажатии клавиш или при передаче команд клавиатуры.
События мыши возникают для форм, разделов форм и элементов управления
в фюрмах при щелчке по кнопке мыши, если в этот момент ее указатель установ­
лен на форме, разделе формы или элементе управления.
События клавиатуры
Естчи фокус находится на элементе управления формы, а пользователь нажимает
и отпускает клавишу или выполняет макрокоманду Send Keys (Команды клавиа­
туры), имитирующую нажатие клавиши, возникает следующая цепочка событий:
Key Down (Клавиша вниз) => Key Press (Нажать клавишу) => Key Up (Клави-
tna вверх).
При нажатии или отпускании клавиши, а также при выполнении клавиатур­
ной команды, соответствующей символу из набора ANSI, всегда возникают собы­
тия! Key Down, Key Press и Key Up. Если пользователь нажимает и удерживает
клавишу ANSI, возникает иная последовательность событий:
Использование макросов для обработки событий 211
Key Down => Key Press => Key Down => Key Press и т.д.
Это продолжается до тех пор, пока пользователь не отпустит клавишу; тогда
произойдет событие Key Up.
При нажатии и отпускании клавиши, которая не является клавишей ANSI, воз­
никают события: Key Down => Key Up. Если пользователь нажимает и удержива­
ет такую клавишу, то до ее отпускания возникает и повторяется событие Key
Down, а при отпускании происходит событие Key Up.
Если при нажатии той или иной клавиши предусмотрено другое событие эле­
мента управления, то это событие возникает после Key Press, но до Key Up. На­
пример, если нажатие клавиши приводит к изменению текста в поле, то последо­
вательность событий такова:
Key Down (Клавиша вниз) => Key Press (Нажать клавишу) => Change (Изме­
нение) => Key Up (Клавиша вверх)
Если нажатие клавиши вызывает перевод фокуса с одного элемента управле­
ния на другой, то событие Key Down возникает для первого элемента управле­
ния, а события Key Press и Key Up - для второго. Например, если пользователь
изменяет данные в элементе управления и нажимает клавишу TAB для перехода
к следующему элементу, то возникают следующие события:
• для первого элемента управления:
Key Down (Клавиша вниз) => Before Update (До обновления) => After Update
(После обновления) => Exit (Выход) => On Lost Focus (Потеря фокуса);
• для второго элемента управления:
On Enter (Вход) => On Get Focus (Получение фокуса) =* Key Press (Нажать
клавишу) => Key Up (Клавиша вверх).
События мыши
Если указатель мыши установлен на элементе управления формы, а пользователь
нажимает и отпускает кнопку мыши, то возникает следующая цепочка событий
для элемента управления:
On Mouse Down (Кнопка вниз) => On Mouse Up (Кнопка вверх) => Click (Щелк­
нуть по кнопке).
Если фокус находится на одном элементе управления, а пользователь устанав­
ливает указатель мыши на другом и щелкает ее кнопкой, то возникают следую­
щие события:
• для первого элемента управления:
On Exit (Выход) => On Lost Focus (Потеря фокуса);
• для второго элемента управления:
On Enter (Вход) => On Get Focus (Получение фокуса) => On Mouse Down
(Кнопка вниз) => On Mouse Up (Кнопка вверх) => Click (Щелкнуть по кнопке).
Если пользователь устанавливает указатель мыши на элементе управления
в другой записи и щелкает кнопкой мыши, то для формы событие Current (Теку­
щая запись) возникает до события On Enter (Вход) для элемента управления.
Двойной щелчок по кнопке мыши приводит к возникновению двух событий:
Dbl Click (Дважды щелкнуть по кнопке) и Click (Щелкнуть по кнопке). Например,
212 Программирование с использованием макросов

если указатель установлен на элементе управления, который не является кноп­


кой, то двойной щелчок кнопкой мыши вызывает следующую цепочку событий
для элемента управления:
On Mouse Down (Кнопка вниз) => On Mouse Up (Кнопка вверх) => Click (Щелк­
нуть по кнопке) =» Dbl Click (Дважды щелкнуть по кнопке) =* On Mouse Up
(Кнопка вверх).
При двойном щелчке кнопкой мыши на элементе управления, который являет­
ся кнопкой, эти события возникают после второго события Click.
Событие Mouse Move (Перемещение указателя мыши) для формы, раздела или
элемента управления происходит при перемещении указателя соответственно по
форме, разделу или элементу управления. Это событие не зависит от других со­
бытий мыши.

Порядок событий для отчета и разделов отчета


События для отчета и разделов отчета возникают, когда пользователь открывает
отчет для печати или предварительного просмотра либо закрывает отчет.
События отчета
При открытии отчета для печати или предварительного просмотра и последую­
щем закрытии отчета (вариант - при переходе в другое окно Microsoft Access) со­
бытия происходят в следующем порядке:
Open (Открытие) => Activate (Включение) => Deactivate (Отключение) =>
Close (Закрытие).
При переходе из одного окна открытого отчета в другое возникает событие
Deactivate для первого отчета и Activate - для второго:
Deactivate (для отчета 1) => Activate (для отчета 2).
Событие Deactivate отчета происходит также при переходе из окна отчета в дру­
гое окно Microsoft Access. Однако Deactivate не возникает при переходе в диало­
говое окно, в окно формы, где установлено значение Да для свойства Pop Up
(Всплывающее окно), или в окно другого приложения.
При открытии отчета, который создан на основе запроса, Microsoft Access гене­
рирует событие Open до выполнения базового запроса. Благодаря этому можно
включить в отчет условия отбора с помощью макроса или процедуры обработки
события, так как они запускаются в ответ на событие Open. Макрос или процеду­
ра обработки события позволяют открыть специальное диалоговое окно, через
которое пользователь вводит в отчет критерии отбора.
События разделов отчета
Если отчет открывается для печати или предварительного просмотра, события
разделов отчета Format (Форматирование) и Print (Печать) возникают после со­
бытий отчета Open и Activate, но до событий отчета Deactivate и Close. Последо­
вательность будет такой:
Open (для отчета) => Activate (для отчета) => Format (для раздела отчета) =>
Print (для раздела отчета) => Deactivate (для отчета) => Close (для отчета).
Использование макросов для обработки событий 213
Кроме того, либо на стадии форматирования отчета, либо по завершении форма­
тирования, но до наступления события Print могут возникнуть следующие события:
• Retreat (Возврат) - происходит при возвращении в предыдущий раздел от­
чета на стадии его форматирования;
a No Data (Отсутствие данных) - возникает при отсутствии записей в отчете;
• Page (Страница) - возникает, когда отчет отформатирован, но еще не начал
печататься. Вы можете использовать данное событие, чтобы изменить офор­
мление отчета для печати.
Как видите, событий много, и они довольно разнообразны. Это делает объекты
базы данных и элементы управления очень чувствительными к любым действиям
пользователя и к внутренним изменениям, которые происходят в БД. Зато такой
набор событий обеспечивает гибкую реакцию программы практически на каждое
уточнение, вносимое в базу данных.
Обратите внимание на кнопки, которые расположены справа от каждого собы­
тия в таблице свойств элемента управления. Щелкнув по стрелке прокрутки, вы
откроете список имеющихся макросов и сможете подключить к обработке собы­
тия любой из них. Кнопка ^ J позволяет активизировать процедуру обработки со­
бытия на языке VBA. Об этом речь пойдет в следующей главе.

Автоматический перевод фокуса при помощи макроса


Конкретная задача, которую нам надо решить, заключается в следующем. Как
было показано в главе 4, вы используем форму для ввода новых записей. Напом­
ним, что в качестве примера рассматривается форма Страны (см. рис. 10.1). Когда
вы внесем новые данные в первое поле (скажем, в поле Код), курсор по умолча­
нию останется в нем. Однако нам нужно, чтобы он переместился в следующее
поле - Страна, потому что после ввода кода надо указать название страны. Кур­
сор придется переводить вручную. Конечно, это не бог весть какая сложная опе­
рация, но когда таких операций много, пользователь испытывает дополнительные
неудобства. Если применять при обработке событий макросы, подобных непри­
ятностей легко избежать.
Итак, автоматический переход курсора (например, из поля Код в поле Страна)
должен произойти, когда вы завершим ввод информации в поле Код. Следова­
тельно, макрос в данном случае стоит привязать к событию After Update (После
обновления). Однако для поля Код принята несколько другая схема обработки -
с помощью операторов VBA. Подробно она рассматривается в главе 11, но вкрат­
це сводится к следующему. Когда форма Страны открывается, она изначально го­
това к вводу новой записи: в поле Код автоматически устанавливается ее поряд­
ковый номер, а остальные поля пусты. Если пользователь собирается не вводить
новую запись, а заглянуть в какую-либо из старых, он может сделать это с помо­
щью стрелки прокрутки в этом поле. Но программа не знает заранее, какая запись
понадобится пользователю для просмотра, поэтому форма по умолчанию на­
строена на то, что наиболее вероятно: она будет открыта для ввода новой запи­
си. Таким образом, нет необходимости вручную вводить значение в поле Код:
при открытии формы новый код появляется автоматически. Значит, переход
к следующему полю также можно связать с событием Open (Открытие) в окне
214 Программирование с использованием макросов

свойств формы. Но возможен и другой путь: соотнести такой переход с событием


On Get Focus для поля Код в окне его свойств. Мы выберем второй вариант.
Чтобы реализовать его, нужно создать команду перехода к следующему элемен­
ту управления - полю. Используем для этого макрос.
В окне базы данных откройте вкладку Macros (Макросы) и щелкните по кноп­
ке 'inNew|. На экране появится окно конструктора макросов (см. рис. 10.3). В столб­
це Action (Макрокоманда) стрелкой прокрутки надо вызвать выпадающее меню
и в нем выбрать нужную команду - в нашем случае Go To Control (К элементу
управления). (Использовать стрелку прокрутки не обязательно: введите несколь­
ко первых букв названия макрокоманды, a Access 2000 допишет его. Но для этого
вы должны точно знать имя макрокоманды, что бывает далеко не всегда.) В поле
Comment (Примечания) вы при желании можете включить любые комментарии
к макрокоманде. В поле Action Arguments (Аргументы макрокоманды) для каж­
дой из них вводятся специфические параметры. Для выбранной нами макро­
команды Go To Control требуется указать только название того элемента управ­
ления, к которому надо перейти, - Control Name. Естественно, д л я других
макрокоманд аргументы могут быть значительно сложнее, в чем вы убедитесь
дальше. Итак, введите в поле Control Name имя следующего поля формы, в кото­
рое необходимо перейти, - Страна. После этого макрос в окне конструктора можно
назвать (по умолчанию предлагается имя Масго2) и закрыть.

Ы Microsoft Access
File Edit View Insert Run Tool?; Window Help
шш
!У В. I За (р, ' 1 й ^ ^ !^ © д - (3 -
* Macro2 : Macro шш
т Action
GoToControll
GoToControl
Comment
g
GoToPage
GoToRecord
Hourglass
Maximize
Minimize j
MoveSize Action Arguments
MsgBox
Control Name Страна

Moves the focus to a


specified field or
control on the active
datasheet or form.
Press Fl for help on
this achon

UJ

Рис. 10.3
Использование макроса при выполнении сложного запроса 215

Е^ Text Box: Код


Format | Data Esent | other | . All
Before Update
Alter Update
On Change
On Enter
On Exit
On Got Focus ДШЯЗ JP--1
On Lost Focus
On Click
On Dbl Click "~ ~
On Mouse Down
On Mouse Move ___
On Mouse Up
On Key Down ____
On Key Up
On Key Press
HI

Рис. ]QM

Теперь надо связать созданный макрос с событием On Get Focus (Получение


фокуса). В окне поля Код (см. рис. 10.2) щеелкните по стрелке прокрутки в поле
свойства On Get Focus. В выпадающем мееню снова выберите макрос Масго2
(см. рис. 10.4).
Этого достаточно, чтобы установить свяязь созданного макроса с событием.
Окно, где она задана, надо сохранить.
Точно так же задается автоматический пере;ход от одного поля к другому и в этой,
и во всех остальных формах. Единственная огсоворка: как уже отмечалось, в этих слу­
чаях макрос нужно связать с другим свойствош - After Update (После обновления).

Использование макроса
при выполнении сложного запроса
Как вы помните, в предыдущей главе описывзалось создание объединенной выбор­
ки записей из разнородных файлов, которые шмели различную структуру, были раз­
работаны в различных организациях и в различных программных средах, но инте­
грированы в единый банк данных в программной среде Access 2000. Выполнять
задуманную операцию пришлось в два этапаа: сначала формировать запрос на со­
здание таблицы Выборка1, куда вошли записей из одного файла, а затем генериро­
вать запрос на добавление данных в эту таблшцу из другого файла. Сейчас с помо­
щью макроса вы можем объединить оба этапа (работы, упростив решение задачи. Мы
будем по-прежнему использовать запросы, но > организуем их в макропоследователь­
ность, которая имеет название и выполняется^ как целостная операция.
Прежде чем показать, как это делается, прооизведем чисто техническое, вспомо­
гательное действие - переименуем запросы,, которые нам понадобятся. Запросу
Query7 дадим название Запрос на создание таблицы, а запросу Query8 - Запрос
на добавление записей. Такое переименовашие нужно лишь для того, чтобы при
объединении запросов их новые названия шаглядно свидетельствовали о функ­
ции каждой части созданного макроса.
216 Программирование с использованием макросов

Ы Microsoft Access ЩпШ


File Edit View Insert Run Tools Window Help

•"* % - DO •

* МасгоЗ : Macro шш
Action
OpenQuery 5 Comment
g

: опрос на создание таблицы Opens a


Ciat =-,heet ~ select or
Edit- cro-.sfab
query or
runs -an
action
query The
query can
be opened
in
Datasheet

Рис 10 5

Как и раньше, откройте окно конструктора макросов, а затем активизируйте оп­


цию Open Query (Открыть запрос) Этот этап работы показан на рис. 10.5. Как
видите, у макрокоманды Open Query уже другой список аргументов (Action
Arguments), каждый из которых имеет свои значения:
a Query Name (Имя запроса)
- имена запросов, которые вы хотите включить в создаваемый макрос;
• View (Просмотр)'
- Datasheet (Таблица);
- Design (Конструктор);
- Print Preview (Предварительный просмотр при печати);
a Data Mode (Режим):
- Add (Добавить);
- Edit (Редактировать);
- Read Only (Только для чтения).
Выбранные значения показаны на рис. 10.5.
Теперь добавьте к создаваемому макросу второй запрос (см. рис 10 6): в следу­
ющую строку столбца Action (Макрокоманда) точно так же, как и в первом слу­
чае, введите макрокоманду Open Query. Все дальнейшие действия полностью
Резюме 217

Ы Microsoft: Access ЩЩ]


J File Edit View Insert Run Tools Window Help

* Macro4 : Macro _|n|x|


Action
Opf-nQu^ry
| Comment
4
J
• OpcnQuny

d
Action Arguments

lanooc на добавление запиг d Г SHei t


the
nanie oh
the
quer/t:
open
The Int
chows all
querir";
in the
current '

J
Рис 10 6

повторяются, изменяется лишь имя второго запроса - теперь это Запрос на


добавление записей
В сущности, задача решена, осталось только присвоить новому макросу имя.
Назовите его Запрос на объединенную выборку. Если вы запустите этот запрос
на выполнение, то Access 2000 по ходу процесса выдаст все информационные со­
общения и расскажет о том, что из первой таблицы будет добавлено 8 записей,
а из второй - 9 Наиболее важным сообщением является предложение удалить
таблицу Выборка1. макрос создает ее заново и не хочет делить эту заслугу ни
с кем. Впрочем, если у вас не поднимется рука удалить указанную таблицу, сис­
тема осуществит данное действие сама Когда новый макрос выполнится, в резуль­
тате вы получите в точности такую же таблицу Выборка1, как та, что показана на
рис 9 42.

Резюме
1. Макросы могут использоваться для выполнения довольно широкого диапа­
зона операций. Например, макросы позволяют:
- открывать отчет для просмотра или печати;
- переходить от одного элемента управления (записи, поля) к другому;
- указывать свойства объекта;
- выполнять разнообразные команды и т.д.
218 Прогроммировоние с использованием макросов

2. В рамках настоящей главы макросы наиболее часто применяются для обра­


ботки событий. Событие - это любое действие пользователя: щелчок кноп­
кой мыши, открытие формы и т.д. Событие может также инициироваться ка­
ким-либо оператором.
3. Каждая отдельная операция (допустим, переход от одного элемента управ­
ления к другому) может повлечь за собой ряд событий, возникающих в опреде­
ленной последовательности. Для Access 2000 такие последовательности со­
бытий для разных ситуаций четко определены и подробно рассматриваются
в главе. Их очень важно знать, поскольку от порядка событий зависят усло­
вия и очередность выполнения макросов и процедур обработки событий.
4. В главе были рассмотрены конкретные примеры использования макросов
при обработке событий. Диапазон возможностей макросов в данном случае
очень широк: от вспомогательных операций, расширяющих удобства для
пользователя (например, автоматический перевод курсора в новое поле при
вводе данных) до серьезных функциональных задач (например, формирова­
ние запроса на создание сложной выборки из базы данных, включающей
записи с различной структурой и составом данных).
Глава X I
Программирование
с помощью
процедур VBA
• Основные положения VBA
• Программирование приложений с помощью VBA
• Предупреждение дублирования записей
при их вводе из формы
• Установка на последнюю запись при открытии формы
• Удаление записи с установкой на последнюю запись

Как уже говорилось, VBA - это объектно-ориентированный язык программи­


рования. В свое время он был разработан специально для записи макросов
в приложениях в Microsoft Excel 5.0. Затем он начал использоваться и други­
ми приложениями Microsoft Office, в частности, Access. Сейчас VBA стал стан­
дартным языком макропрограммирования, что очень полезно, так как облегча­
ет взаимодействие различных приложений. VBA позволяет записать не только
последовательные действия, выполняемые пользователем, но и все необходимые
для языка программирования высокого уровня элементы, включая разнообраз­
ные средства организации ветвлений, циклов и ведения диалога с пользовате­
лем. Кроме того, VBA - это язык, управляемый событиями, поэтому с его помо­
щью можно установить требуемую реакцию объекта на определенное событие.

Основные положения VBA


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

Базовь*ь,е термины
R гяч1ле д " Р а с с м о т Р и м наиболее важные термины VBA Они приведены в табл. 11.1

Таблица <
т Определение
Термин ^ , ,
М A I IMo о' 1о 1У пь 1 Контейнер для процедур и функций
г. I *ц ule Семейство процедур и функций, принадлежащих форме или отчету
п1 п асса)
(Модуль кла»1' '
<. , , (fnodule Модуль, главные процедуры которого доступны для приложения
.г. ^иый модуль] в цепом
(Стандартна 1 ' '
р I Последовательность инструкций, выполняемая как целое
(Процедура) ( ^
<• , redu^ure Процедура, выполняющая определенную задачу
(Процедура & S u b '
р ,. 1ф .Оункция) Процедура, возвращающая определенное значение
F f oroce»^ec'ure Процедура, вызывающая реакцию объекта на определенное
(Процедура £3 обработки событий) событие
У ,t j ii, ^>етод) Процедура, выполняемая над определенным типом обьекта
с, , irQ Оператор) Комбинация инструкций с ключевыми словами, символами, констан­
тами и переменными Одиночная строка или строки, объединенные
символами продолжения строки (пробел и знак подчеркивания)
К rci / « ' г ^ 1 - л ю ч е в о е спово) Слово, имеющее определенное значение для компилятора VBA
А г мент
Аг t /л/" 'Р У ) Дополнительная информация, передаваемая функции или процедуре
Sub Называется также параметром

0£ ъ е к ^;тно-ориентированный язык VBA базируется на трех основных компо­


нентах- о 0 ° ^ ъ е к т ы ' события vi методы.
Объек*-™' к а к У ж е неоднократно говорилось выше, представляют собой элемен­
ты в х о д я * я щ и е в с о с т а в приложений: таблицы, формы и их элементы управления,
отчеты з 5 0 а п Р о с ы и т д - События подробно рассматривались в предыдущей главе.
ПоследЗ-Д ним компонентом являются методы. Для каждого объекта определен на­
бор метогЗ- дов ' к 0 Т 0 Р ы е могут быть к нему применены. Метод представляет собой
действие <"' например GoToRecord (Перейти на запись), Apply Filter (Применить
Фильтр) • O p e n F " o r m (Открыть форму). Такие действия указываются в установках
свойств с «-обытия объекта. Если пользователь не определил свойство события для
объекта Ы н е с в я з а л е г о с каким-либо действием), то объект отвечает на событие дей­
ствием 3 ^ а д а н н ь ш д л я е г о т и п а п о умолчанию. Например, если текстовое окно по­
лучает фс^-^У 0 и н е о п Р е Д е л е но свойство события OnGotFocus (Получение фокуса),
то BCTpoei*HHbI" м е т °Д может изменить цвет этого окна. Если вы установили свой­
ство собь^° 1ТНЯ объекта для макроса или процедуры обработки события, то Access
сначала о обрабатывает встроенный режим, а затем выполняет заданный вами мак­
рос или п *Р°ЦедУРУ- Например, вы щелкаете по командной кнопке, которая активи­
зирует вт*'°РУ ю стРаН11ЦУ формы. Отображается щелчок по кнопке - кнопка на эк­
ране на м^ гновение «утапливается» (поведение по умолчанию), затем выполняется
переход к ^ следующей странице формы.
Основные положения VBA 221

Окно модуля
Программа VBA создается, редактируется и отображается в окне модуля. Такое
окно для класса, связанного с формой или отчетом, можно открыть либо из окна
базы данных, когда объект закрыт, либо из окна объекта в режиме конструктора.
Чтобы открыть окно модуля, надо выполнить одно из перечисленных действий:
1. В окне базы данных выберите имя формы или отчета на соответствующих
вкладках Forms (Формы) или Reports (Отчеты).
2. Выберите позицию Программа в меню View (Вид) или щелкните по кнопке
Code (Программа) ^ 1 на панели инструментов.
На экране появится окно модуля VBA (рис. 11.1), разделенное на две области.

| £ i Microsoft Visual Basic - dbl l-lnjxl


I File Edit View Insert Debug Run Tools Add-Ins Window Help
»
|И А - И ^ PM ю - • и шШ Ы@ЪР (3
Properties Фирмы х\
1 К dbl - Form_0HpMbi (Code) -|Q|x|
[фирмы Роггп_Фирмы _2J
JForm -J jciose
d
Option Explicit -
В Event
AfterDelCarihi i P r i v a t e Sub Form C l o s e ( )
After Insert On E r r o r GoTo E r r Form Clc з е
AfterUpdate
BeforeDelConfi DoCmd. RunMacro "Макрос 3 9 "
Befurelnsert —' DoCmd.RunMacro "Макрос 4 0 "
BeforeUpdate
KeyPreview False E x i t Form C l o s e :
OnActivate E x i t Sub
OnApplyFilter E r r Form C l o s e :
OnClick ИздВох E r r . D e 3 c r i p t . i o r
OnClose [Event Prore< Resume E x i t Form C l o s e
OnCurrent End Sub| d
OnDblClick ,
Ыi«1 i | iD

Рис 111

Левая область - окно свойств. В верхнем поле этой области показано, свойства
какого элемента программы здесь представлены. Если вы выходили в окно моду­
ля непосредственно из окна базы данных, то будут представлены свойства формы
или отчета в целом. Если вы попали в окно модуля из конструктора форм или отче­
тов, будут представлены свойства того элемента управления, который был акти­
визирован перед переходом в окно модуля. Щелкнув по стрелке прокрутки спра­
ва от этого поля, вы легко можете перейти в любой элемент управления, и в левой
области появятся его свойства. Свойства могут быть отсортированы в алфавит­
ном порядке - вкладка Alphabetic (Алфавитный) - или разбиты по разделам -
вкладка Categorized (Категории): Date (Данные), Event (Событие), Format (Со­
бытие), Other (Другие). С таким способом отображения информации вы уже встре­
чались при работе с конструкторами (см., например, рис. 10.2). Разделы, содержащие
222 Программировоние с помощью процедур VBA

свойства, могут сворачиваться или раскрываться с помощью значков плюса (+)


и минуса ( - ) , расположенных слева от названия раздела.
Кроме того, в левой области вы можете соотнести какое-либо свойство с мак­
росом или процедурой обработки событий. Но поскольку здесь отсутствует поло­
са прокрутки и нельзя использовать списки, имена макросов и процедур надо вно­
сить с клавиатуры, что неудобно.
В окне правой области отображается полный текст программы, связанной как
с активным элементом управления, так и выбранным свойством. Конкретное зна­
чение этой пары задается в верхних полях области - в левом верхнем поле вы
можете указать элемент управления, в правом - свойство. Тогда в нижнем окне
правой области появится текст процедуры, определенной данным сочетанием
Если такая программа отсутствует, то отображаются две строки - открывающая
процедуру Private Sub с аргументами и закрывающая End Sub.
Для перемещения между процедурами модуля используются также сочетания
клавиш Ctrl+PgUp (для перехода к следующей процедуре), Ctrl+PgDn (для пе­
рехода к предыдущей).
В окне модуля предусмотрена удобная возможность быстрого перехода к дру­
гому модулю класса, то есть к процедурам, относящимся к другой форме или от­
чету. Щелкните по кнопке Project Explorer %|| на панели инструментов. Окно
модуля изменится (см. рис. 11.2) - в левой области появится новое окно Project
и три кнопки. Правая, нажатая по умолчанию, выводит перечень объектов базы
данных: форм, отчетов, модулей класса.
Выберите здесь, например, форму Страны. Если теперь щелкнуть по средней
кнопке, то в основном окне правой области появится эта форма в режиме конструк­
тора (на рисунке не показано). Щелчок по левой кнопке выведет на экран модуль

г
л Microsoft Visual Basic - dbl МЫ
| File Edit View Inser t Debug Ri in Tools Add-Ins Window Help

Project-A3 «3 dbl - Fomi_<t>HpMbi (Code)


Й@ Q 9i dbl - Form Страны (Code) IrJRl
EH Form_KOHTpont>HO M3f_±] ICipaHd ""^j JAfterUpdate
Pal Form_MeneA>Kep J
ED Рогт_Назмйчение P r i v a t e Sub C T p a H a _ A f t e r U p d a t e ( ) j
Ffl Form_npM6opbi On E r r o r GoTo Е г г _ С т р а н а _ А г t e r U p d a t e _ C l i c k
Dim Cod As I n t e g e r
Щ Form_TMnbi Приборпе Dim a n s w e r As I n t e g e r
ED Form_<DMpMbi answer = D C o u n t ( " [ С т р а н а ] " , "Страны",
Fl) Рогт_Экологические If answer = 1 Then
Я ReportjDMpMbi MsgBox P r o m p t : ' " З н а ч е н и е уже с о д е р ж и т е — '
Г~! Modules DoCmd.RunKacro " Н а к р о с 2 7 "
1
~ Class Modules Else
DoCrnd.RunMacro " Н а к р о с 2 "
DoCmd.RunKacro " Н а к р о с 1 "
Properties С тралы *J MsgBox P r o m p t : ' " З а п и с ь в в е д е н а " »J
С т р а н ы Рогт_Страны J №

Рис 112
Основные положения VBA 223

класса, относящийся к форме Страны, что показано на рис. 11.2. Эта возможность
очень полезна при написании и отладке программ, когда бывает необходимо про­
смотреть текст похожей процедуры, созданной для другого объекта базы данных.
Модули могут содержать описания, процедуры обработки событий, процедуры
Sub (субпроцедуры) и функции.
При организации новой формы Access 2000 создает для него модуль класса
и помещает его в конструктор При добавлении процедуры обработки события
в форму или отчет она автоматически помещается в модуль класса. Если вы ко­
пируете форму или отчет в другую базу данных, модуль класса копируется вме­
сте с ней. Удаление формы или отчета приводит также к удалению соответствую­
щего модуля.

Основные элементы
Прежде чем обсуждать реальные примеры программирования на основе VBA, рас­
смотрим вкратце его основные элементы:
а переменные;
а константы;
• аргументы;
Q процедуры VBA и их элементы;
• инструменты, управляющие выполнением программы.

Переменные
Переменные - это именованные области памяти, которые используются для вре­
менного хранения результатов. Переменные сходны с полями, но свойственны
только VBA. Наборы записей, например, таблицы, их не содержат. Перед вклю­
чением в процедуру переменные должны быть описаны или объявлены. Описа­
ние переменной состоит в присвоении ей имени и, возможно, типа - символь­
ная, логическая и др. Область действия переменной может быть ограничена
одной процедурой, в которой она была описана, определенным модулем с не­
сколькими процедурами или приложением в целом. Значение переменная полу­
чает при описании. Если это значение не указано явно, то устанавливается за­
данное по умолчанию.
Возможны два способа описания переменной: неявный и явный. Для неявного
определения переменной достаточно использовать имя переменной в процедуре,
не задавая его специально. Явное описание переменной означает присвоение ее
имени и определение ее типа до первого оператора в программе. Чаще всего пере­
менные описываются с помощью инструкции Dim

Константы
Константами называются именованные значения, которые не изменяются в ходе
ныполнения модуля или процедуры, где они определены. Установка и изменение
шачсний констант производится только однажды - при их описании. Константа
может представлять численное или символьное значение или указывать на другую
константу. Выражение, содержащее комбинацию арифметических или логических
224 Программирование с помощью процедур VBA

операторов, также рассматривается как константа. После определения константы


ее разрешено использовать в любом месте в границах области определения.
Access поддерживает два типа констант: символьные и внутренние. Символь­
ные константы (или константы, определяемые пользователем) определяются
в модуле или процедуре с помощью оператора Const и сохраняют свое значе­
ние в ходе их выполнения. Внутренние константы (или константы, создаваемые
системой) могут быть использованы в любом месте во всех модулях.
Область действия символьной константы определена местом ее описания. Если
константа объявлена в процедуре, она будет доступна внутри этой процедуры,
если в модуле, то, соответственно, доступ к ней разрешен во всем модуле. Кон­
станты, описанные в модуле, считаются личными (Private). Исключением из дан­
ного правила являются константы, специально объявленные как общие (Public).
В этом случае они доступны для любого модуля во всем приложении. Как прави­
ло, рекомендуется для всех определяемых пользователем констант указывать тип
Private, чтобы не возникало возможных недоразумений, если в другом модули
встретится константа с таким же именем. Кроме того, следует явно описывать
тип Private в модуле. Рекомендуется также имя символьной константы начинать
с обозначения con, например, conKoeff, чтобы указать, что речь идет о константе.
причем символьной.
Внутренние константы всегда доступны пользователю. Они поставляются вме­
сте с Access 2000. Но кроме них можно использовать и другие, например, из биб­
лиотеки VBA. Все константы (и не только константы) доступны в диалоговом
окне Object Browser (Просмотр объектов), которое будет рассмотрено ниже.
Имена внутренних констант имеют приставку из двух букв, указывающую на их
принадлежность к той или иной библиотеке. Так, константы Access 2000 начина­
ются с букв ас (например, acColorlndexBlue - константа, устанавливающая голубон
цвет), константы из библиотеки VBA - с букв vb (например, vbNullString, устанав­
ливающая нулевую строку).

Аргументы
Аргументы - это биты информации, которые используются процедурой или ме­
тодом в ходе выполнения. Они могут быть обязательными или необязательными
Чтобы передать аргументы процедуре, надо указать их в определении процедуры
сразу после ее имени. Например, процедура Название_фирмы_Кеуир требует указания
двух аргументов: KeyCode и Shift, которые описываются как одно целое.
Private Sub Название_фирмы_Кеу11р(KeyCode As Integer, S h i f t As Integer)
Для того чтобы выполнить созданную процедуру, надо ее вызвать. При этом
аргументы можно задавать как по позиции, так и по имени. В первом случае зна­
чения аргументов располагаются в том же порядке, что и в определении процеду­
ры, и разделяются запятыми. Это будет выглядеть следующим образом:
Название_фирмы_Кеуир 15,10
или
C a l l Название_фирмы_Кеуир (15,10)
Основные положения VBA 00^

При задании аргументов


v по имени их !,„__,, .,п^.„„ ,,„ е
i „ эядок можно не соблюдать, так как
определяется
р каждый аргумент.
J Послеимен^-,,.^,,^ „ „ '
. ч
равенства (=). . '
Аргументы при этом раздел,,РГУментаследуетдвоеточие(:)изнак
_„„„,., y
u
^ v/ i j i i "• ы запятыми. Ниже показан пример
такого задания: ^ ^
Название_фирмы^Кеу11р. Агд2:=10, Агд1:=15
С помощью описателей ByVal и ByRef 7 v(см й „ л 1 о\
юл. 11.J) можно осуществить пере­ F
дачуJ переменных
F в процедуру пли ф у н к ц м „„ , „„ ,
, p JM i .у качестве параметров либо по ссыл­
ке, либо по значению. Ьсли переменная пе„„ л „
, , „ чается по ссылке, то процедуреJy или
функции будет передан адрес этой перемен- „ „ ^
J v r
^- ^ и в памяти. Тем самым вызываемая
процедура может изменить значение факти „
v JF
, ^ ского параметра, если она произве­
дет какие-либо действия над параметром.v v , „ ^
ш же фактический параметрl пере­ y
дается по значению, то процедура JK или Hфун„„
J „ „
. ' ия получают в качестве аргумента
v J
только фиксированное
4 значение этого паг, „
' тетра, но не саму переменную,J ис­
пользуемую для его изменения. ' '
Способ передачи параметров процедуре i .
~ ' пи\ функции определяется при описа­
нии ее аргументов. Описатель ByVal задает пс,_„ „ „ , г
с ' Дачу по значению, a ByRef-по ссыл­
ке. Ьсли явное Jуказание спосооа передачи и
)аметра отсутствует, то по Jумолча­
нию подразумевается передача по ссылке. "
Поясним сказанное на примере.
1 Допусти?.,
f ^ J [меются следующие описания двух
процедур: "• J
Sub Main()
а = 10
b = 20
с = 30
C a l l Example1(a, b, с)
Call MsgBox(a)
Call MsgBox(b)
Call MsgBox(c)
End Sub
Sub Example1(x, ByVal y, ByRef z)
x=x+ 1
у =у +1
z = z +1
Call MsgBox(x)
Call MsgBox(y)
Call MsgBox(z)
End Sub
Вспомогательная процедура Examplel испольэ , ,
r
Jy y
в качестве формальных аргумен­
тов три переменные, описанные по-разному.; „
ее в т е л е эт
.„ , о и процедуры каждый
из формальных аргументов увеличивается н; ,
„„ . ,. п _ кницу, а затем их значения выво­
дятся на экран с помощью функции MsgBox. а Ос, ,„„
ь, ' , <ная процедура Main устанавлива-
•* rзначения переменных
v a, b и с, vпосле чего „„„
r
араметров
Ьт- 119
Jy
процедуре
' , , '
Examplel. При этом пег. м-Дает
„ „ „ ,их
аргумент „ в качестве
передаетсяфактических
по ссылке
226 Программирование с помощью процедур VBA

(действует умолчание), второй по значению, а третий снова по ссылке. После воз­


врата из процедуры Examplel основная процедура также выводит на экран значения
трех переменных, передававшихся в качестве аргументов. Всего на экране отобра­
жается шесть значений: сначала 11, 21 и 31 (все полученные значения увеличены
на 1 и выводятся процедурой Examplel); затем 11, 20 и 31 (эти значения выводятся
процедурой Main: переменные, переданные по ссылке, увеличились, а переменная,
переданная по значению - нет).

Типы процедур и их элементы


Существует два типа процедур VBA - процедуры Sub и функции. Процедуры Sub
выполняют операции, но не возвращают значения и поэтому не могут быть ис­
пользованы в выражениях. Функции же возвращают значения и не имеют огра­
ничений по применению.
Процедуры содержат описания, инструкции и выражения. Описания явно
устанавливают тип переменных и констант в процедуре или модуле. Раздел опи­
саний должен находиться в начале процедуры. Инструкция (оператор) выполня­
ет определенную конкретную операцию, описание или определение. Инструкции
обычно помещаются по одной на строке. Если же в строке размещается несколько
инструкций, они разделяются двоеточием (:). Например:
cod = 1 answer = 4

Если инструкция на одной строке не помещается, она может быть продолжена


на следующей. В таком случае в начале второй строки ставятся символы пробела
и подчеркивания.
Выражения приравнивают значения объекта слева от знака равенства значе­
нию, полученному из элементов справа.
При указании имен процедур, констант, переменных и аргументов VBA реко­
мендуется использовать стандартные правила Access:
• первый символ должен быть буквой;
• имя может содержать буквы, цифры и символ подчеркивания, но знаки пре­
пинания не допускаются;
• имя может содержать не более 255 знаков;
• не следует использовать одинаковые имена для функций VBA, методов или
инструкций;
• не следует использовать одно имя дважды в одной процедуре.

Процедуры Sub
Процедура Sub содержит одну или более определенных операций. Можно ис­
пользовать процедуру Sub для автоматизации повторно выполняемых задач: на­
пример, назначить одну из процедур элементу меню, так чтобы запускать ее
именно оттуда.
Процедуры Sub полезны для операций, выполняемых при щелчке по кнопке, име­
ющейся в форме, или получении фокуса определенным элементом управления.
Основные положения VBA 227
Инструкция Sub определяет имя процедуры, аргументы и операторы програм­
мы и имеет следующий синтаксис:
[Private|Public] [StaticjSub name [ (arglist) ]
[инструкции]
[Exit Sub]
[инструкции]
End Sub
Это синтаксическое определение является стандартным. Жирным шрифтом
выделены слова, которые должны вводиться в точном соответствии с примером.
Слова, набранные курсивом - это имена, определяемые пользователем. Слова,
стоящие в квадратных скобках, являются необязательными. Ключевые слова, раз­
деленные вертикальной чертой (|), представляют собой взаимоисключающие па­
раметры, поэтому можно использовать лишь одно из двух - либо Private, либо
Public. Если в процедуру Sub включается список аргументов (arglist), то он должен
быть заключен в скобки, а аргументы разделены запятыми.
Если в определении указано два или более ключевых слов, разделенных верти­
кальными чертами и при этом заключенных в фигурные скобки, то одно из них
должно быть введено обязательно, иначе будет выбран параметр по умолчанию.
Ключевое слово Sub описывает процедуру по имени. Все инструкции, которые
находятся между строками Sub и End Sub, выполняются при запуске процедуры.

Функции
Процедура Function генерирует значение и возвращает его в приложение. Воз­
вращаемое значение имеет то же имя, что и функция, и может быть использова­
но в любом месте выражения. Синтаксис инструкции Function выглядит следую­
щим образом:
[Private | Public] [Static]Function имя [ ( a r g l i s t ) ] [As тип]
[инструкции]
[имя = выражение]
[Exit Function]
[инструкции]
[имя = выражение]
End Function

Значение, которое возвращает функция, присваивается ее имени. Если функ­


ция не присваивает значения, то она возвращает значение по умолчанию: 0 в слу­
чае числовой функции, строку нулевой длины в случае строковой функции или
Empty в случае функции Variant.
Чтобы использовать значение, возвращаемое функцией, надо поместить ее имя
справа от знака равенства в другой процедуре.

Элементы процедур
Оба типа процедур совместно используют одни и те же элементы синтаксиса, ко­
торые поясняются в табл. 11.2.
8*
230 Программирование с помощью процедур VBA

объекта (например, на рисунке выбрана функция - Date Serial) нижней части


окна показан соответствующий ему синтаксис и повторены (другим цветом) на­
звание библиотеки и имя класса. Если вы щелкнете по выделенному цветом име­
ни библиотеки, то оно сменится ее адресом (путем). Выбранный объект можно
перенести непосредственно в текст программы: скопировать его имя в буфер и от­
туда вставить в нужное место текста. Однако помните, что при этой операции пе­
реносится только имя объекта без аргументов - их придется вводить вручную.

Управление выполнением программы


Наряду с рассмотренными выше элементами важным компонентом VBA являют­
ся элементы управления выполнением программы. Кроме операторов, которые
вызывают подпрограммы или функции, таких основных элементов четыре:
• выход из программы или временная остановка ее выполнения;
• переход к другой части программы;
Q организация циклов;
• выбор действий, которые должны производиться дальше.
В табл. 11.4 указаны ключевые операторы, которые позволяют управлять вы­
полнением программы. Все они имеют определенный стандартный синтаксис. Вот
несколько примеров.
1. Синтаксис инструкции On ... GoSub:
On expression GoSub
Здесь expression - целое или округленное до целого число в диапазоне от 0
до 255, a destinationlist - список номеров строк, или меток. Каждая из них
соответствует значению, принимаемому выражением.
2. Синтаксис инструкции Do ... Loop:
Do [ (While|Until) condition]
[инструкции"!]
[Exit Do]
[инструкции]
Loop
Здесь condition - условие цикла; инструкции1 - операторы, которые много­
кратно выполняются до тех пор, пока истинно условие цикла; инструкции -
операторы, выполняющиеся, если условие цикла ложно.
3. Синтаксис инструкции If...Then...Else:
If [условия]
Then [условные операторы]
[Else операторы else]
End I f
Для выполнения этой инструкции необходимо наличие хотя бы одного усло­
вия. Если условия истинны, выполняются условные операторы; в противном
случае - операторы else. Инструкция должна заканчиваться строкой End If.
Программирование приложений с помощью VBA 231

Таблица 1 1.4

Ключевой о п е р а т о р Описание
Команды, закрывающие программу или приостанавливающие ее выполнение
Exit Выход из блока программы (Do.. Loop, For. Next, Sub, функция, процедура).
Определяет лишь переход к концу блока, но не конец программы
End Завершает процедуру или блок программы Закрывает файлы
и освобождает переменные
Slop Приостанавливает выполнение. Ничего не закрывает
Do Events Функция, переключающая операционную систему на выполнение
других событий
Команды, осуществляющие переход к другому набору инструкций
GoTo Осуществляет обязательный переход к строке указанного номера
или метке в процедуре
GoSub...Return Выполняет переход к подпрограмме внутри процедуры и возвращается
On Error При возникновении ошибки осуществляет переход к программе
обработки ошибки
On.GoSub Переходит к одному из пунктов в списке в зависимости от значения
выражения и затем возвращается к следующему оператору после On...Sub
On ...GoTo To же, что и O n . G o S u b , но не возвращается к следующему оператору
после завершения
Команды, осуществляющие выполнение цикла
Do...Loop Повторяет набор операторов до тех пор, пока условие истинно
For. Next Повторяет набор операторов указанное число раз
For Each...Next Повторяет набор операторов для каждого обьекта в выбранном семействе
While...Wend Повторяет набор операторов, пока указанное условие истинно
With Выполняет набор операторов для одиночного обьекта
Команды, осуществляющие выбор решения о дальнейших действиях
Choose Функция, выбирающая значение из списка возможностей на основе номера
позиции в списке
If...Then...Else Выполняет ту или иную последовательность операторов в зависимости
от истинности условия
Select Case Выполняет один из нескольких возможных наборов операторов
в зависимости от значения определенного выражения
Switch Функция, которая проверяет список выражений и возвращает значение
или выражение, связанное с первым истинным выражением в списке

Программирование приложений с помощью VBA


Что может делать пользователь с помощью VBA? Ответ очень прост: все. К сожа­
лению, ни в одной книге нельзя рассмотреть все вероятные сферы программиро­
вания, в которых вы найдете применение возможностям VBA. Поэтому ограни­
чимся тем, что нас непосредственно интересует, - созданием БД.
Когда мы формируем новую базу данных, то хотим сделать ее удобной для
пользователей. Однако у каждого из них свои взгляды на эти удобства, и нередко
сервис базы данных приходится дорабатывать. Примеры, которыми мы будем
иллюстрировать использование VBA, взяты именно из этой области.
!32 Программирование с помощью процедур VBA

Практическая логика подсказывает: если какую-то задачу можно решить штат-


ыми средствами Access 2000 (стандартные запросы, макросы), то так и следует
оступить. Обращение к VB А оправдано тогда, когда средства, заложенные в Access,
ибо не позволяют добиться нужного результата, либо предлагают сложное и гро-
оздкое решение.

1редупреждение дублирования записей


>ри их вводе из формы
главе 9 мы обсуждали вопрос об очистке базы данных от повторяющихся записей,
ггорые попали в таблицы, и выяснили, что этот механизм может работать и в про-
илактическом режиме, предотвращая попадание дубликатов при вводе записей.
А теперь покажем, как решить ту же задачу средствами VBA.
Сначала решим, как будет запускаться создаваемая нами программа. Очевид-
), что проверка на наличие дубликатов должна проводиться не только для опре-
•ленного поля, но и для комбинации полей. Естественно, тестирование начина-
ся с того момента, когда в проверяемое поле вводится какая-либо информация,
тче просто нечего тестировать. Следовательно, надо «привязать» создаваемую
юграмму к какому-либо свойству проверяемого поля. Например, возьмем поле
азвание фирмы. Откройте его окно свойств, где есть несколько подходящих для
щей цели параметров: After Update (После обновления), Key Press (Нажать
авишу), On Change (Изменение), On Lost Focus (Потеря фокуса) и др. Выбе-
гге свойство On Lost Focus и щелкните по строке, которая ему соответствует,
перь активизируйте кнопку ^ J .
В результате откроется окно Choose Builder (Выбрать построитель). В нем вы
жете выбрать один из трех вариантов обработки свойства (см. рис. 11.4):
• Expression Builder (Построитель выражений);
• Macro Builder (Построитель макросов);
• Code Builder (Построитель программ).
О построителе выражений мы поговорим несколько позже; построитель макросов -
) конструктор, уже рассмотренный в предыдущей главе. Наконец, построитель
эграмм открывает окно модуля, которое было выведено на рис. 11.2, хотя и со-
эжало другую информацию. Чтобы начать создание процедуры, выберите имен-
эту третью опцию. Тогда в окне свойств поля Название фирмы установится ре-
м Event Procedure (Процедура обработки событий), как показано на рис. 11.5,
ткроется окно модуля (см. рис. 11.6). Оно примечательно следующим.
Хотя процедуры еще нет и вы даже не приступили к ее созданию, в этом окне по
элчанию уже появляются операторы, обязательные для будущей программы.
Это:
3 Private Sub Ha3BaHMe_<t)MpMbi_LostFocus ( ) ;
3 End Sub.

1ервый оператор - имя процедуры Sub, которое автоматически присваивается ей


эответствии с именем поля и свойством (последние объединяются символом
Предупреждение дублирования записей при их вводе из формы 233

Choose Builder И
Exoression Builder
Mact о Builder
Code Builder
Cancel

Рис. 11.4

\S Combo Box: Название фирмы


Format j Data Event | other | All |
Before Update
After Update МакросЗб
On Change _._____„_
On Not in List
On Enter |

On E> it _ _ _ _ _ _
On Got Focus
On Lost Focus (Event Procedure]
On Click [E'/ent Procedure]
On Dbl Click [Event Procedure]
On Mouse Down
On Mouse Move
On Mouse Up
Ont e/Down
On Key Up
-«*»*
Рис 11.5

Microsoft Visual Basic - dbl - [Form Фирмы (Code)] l-la|x|


IcUBIe Edit View Insert Debug Run Tcoli Add-Ins Window Help

Propei-ties - Ниванне фнрмыХ|


{Название фир СспЬэЬг ~3
На шание_фирмы *j LostFocus
~3
Alphabetic Categorized
^
P r i v a t e Sub Название_фирмы_ЬозсГосиз ()
OfdBr.rder5t y le 1 3]
5crollBarAlign 0
5peci3lEfTect 2
TextAlign 0
Top 623
Visible True
Width 4560 _J
В Other
(Name) Название Ф
AllowAuroCtirrt True
ColumnHidden False
ControlTipText
Control Type Ш
J End Sub
ГСЕИНИИДИ ' 2i S
Рис 116
234 Программирование с помощью процедур VBA

подчеркивания). Область действия процедуры (Private) - данный модуль класса


(форма Фирмы). Второй оператор, End Sub, закрывает процедуру.
Дальше начинается заполнение создаваемой процедуры конкретными опера­
торами.

Обработка ошибок выполнения


При программировании приложения необходимо учитывать и возможность воз­
никновения ошибок, и их вероятные последствия. Ошибки появляются по одной
из следующих причин:
О во время работы приложения некоторые действия могут войти в противоре­
чие со стандартами программы. Например, при попытке открыть таблицу,
которая была удалена пользователем, возникнет ошибка;
• сама программа может содержать логические ошибки, то есть в ней заложе­
на недопустимая операция - к примеру, деление на нуль. Это приводит к не­
ожиданным последствиям.
Если механизм обработки ошибок не применяется, то при возникновении ошиб­
ки VBA прервет выполнение программы и выведет сообщение об ошибке, ие опре­
деляя ее типа. Такой результат работы для нас неприемлем. Поэтому следует
включать в программу процедуры обработки для всех ошибок.
Добавляя процедуру обработки, следует учитывать способ передачи управле­
ния процедуре при возникновении ошибки. Первое, что надо сделать для зада­
ния маршрута передачи управления, - это подключить обработчик ошибок пу­
тем включения некоторой формы инструкции On Error в процедуру. Инструкция
On Error передает управление процедуре обработки события данной ошибки.
Если подключен обработчик, то при возникновении ошибки в процедуре VBA
не выводит обычного сообщения. Вместо этого управление передается в обработ­
чик (если он присутствует), который сразу же активизируется. В активном обра­
ботчике ошибок может определяться тип ошибки и осуществляться произволь­
ная обработка.
Обработчик ошибок определяет, какие действия будут выполняться при воз­
никновении ошибки в процедуре. Например, может быть завершено выполнение
процедуры или исправлены условия и произведен повторный запуск. Инструк­
ции On Error и Resume определяют способ передачи управления при возникновении
ошибки.

Инструкция On Error
Инструкция On Error служит для подключения и отключения процедуры обработ­
ки ошибок. Если такая процедура подключена, то при возникновении ошибки ей
передается управление.
Есть три формы инструкции On Error:
• On Error GoTo метка;
• On Error GoTo 0;
• On Error Resume Next.
Предупреждение дублирования записей при их вводе из формы 235

Первая форма подключает процедуру обработки ошибок начиная с той строки,


на которой находится. Поэтому подключить обработчик следует перед первой
строкой, которая может содержать ошибку. Активный обработчик при возникно­
вении ошибки передаст управление строке, которая задана после слова метка.
Строка, указанная в качестве аргумента метка, и будет первой строкой проце­
дуры обработки ошибок. Например, приведенная ниже инструкция определяет,
что при возникновении ошибки управление передается процедуре под названием
Егг_Название_фирмы_Lost Focus _Click:
On Error GoTo Err_Ha3eaHne_0npMH_LostFocus_Click
При этом сама процедура Err_Ha3BaHne_0MpMU_LostFocus_Click может размещаться
где угодно (но обычно в конце процедуры), важно, чтобы строка, определяющая
вариант процедуры обработки ошибок, была введена перед началом процедуры,
так как ошибки могут возникнуть только в ее операторах.
Инструкция On Error GoTo 0 отключает обработку ошибок внутри процедуры.
Даже если строка с номером 0 существует, она не запустит программу обработки
ошибок. Если инструкции On Error GoTo 0 в процедуре нет, то обработка ошибок
отключается автоматически, как только программа завершится.
Если вы выбираете форму On Error Resume Next, то строка, вызвавшая ошибку, про­
пускается, и управление передается следующей строке. Выполнение программы не
прерывается. Удобство этой инструкции состоит в том, что она позволяет прове­
рять свойства объекта Err сразу за строкой, в которой ожидается возникновение
ошибки, а также устранять ошибки внутри самой процедуры, без помощи обработ­
чика.
Из трех перечисленных форм инструкции On Error целесообразно выбрать пер­
вую - On Error GoTo метка - и вставить ее в текст процедуры непосредственно после
оператора с названием процедуры. Синтаксис самой процедуры стандартен:
Err_Ha3BaHHe_((MpMbi_LostFocus_Click.
MsgBox Err. Description
Последний оператор позволяет вывести сообщение об ошибке с указанием ее
типа и обычно задается в конце текста основной процедуры.

Инструкция Resume
Инструкция Resume возвращает управление из обработчика ошибок в процедуру.
Эту инструкцию следует включать в обработчик, если необходимо передать
управление в определенную строку процедуры (см. ниже). Однако инструкция
Resume не является обязательной: если она отсутствует, то процедура может завер­
шиться, когда обработчик выполнит свои функции.
Есть три формы инструкции Resume:
• Resume или Resume 0 - возвращает управление строке, при выполнении кото­
рой произошла ошибка;
Q Resume Next - возвращает управление той строке, которая непосредственно
следует за строкой, вызвавшей ошибку;
• Resume метка - передает управление строке, которая задана в качестве значе­
ния аргумента метка. Он указывает номер строки или метку.
236 Программирование с помощью процедур VBA

Инструкции Resume и Resume 0 обычно применяются, когда пользователю необ­


ходимо внести исправления. Например, система запросила имя таблицы для от­
крытия, а вы ввели название несуществующего объекта. В таком случае запрос
можно повторить и продолжить выполнение программы с инструкции, вызвав­
шей ошибку, внеся исправления.
Инструкция Resume Next используется для обработки ошибок внутри самого об­
работчика. При этом команда, которая вызвала ошибку, больше не будет выпол­
няться, когда управление вернется в процедуру.
Наконец, для передачи управления в другую строку процедуры применяется
последняя форма инструкции - Resume метка. Например, управление может пере­
даваться процедуре выхода, описанной в следующем разделе. Обычно использу­
ется именно этот вид инструкции Resume, если нет каких-либо особых требований:
Resume Exit_Ha3BaHMe_<t>HpMbi_LostFocus_Click

Выход из процедуры
Включая в создаваемую программу процедуру обработки ошибок, необходимо
предусмотреть такой путь выхода из нее, чтобы впоследствии обработчик активи­
зировался только при возникновении ошибки. Процедура выхода отмечается мет­
кой строки точно так же, как и процедура обработки ошибок. Если ошибки не
произойдет, то после выполнения программы запустится процедура выхода. Если
же ошибка случится, то сначала выполнится обработчик ошибок, а затем управ­
ление будет передано в процедуру выхода. Она содержит инструкцию Exit:
Exit_Ha3BaHne_<jMpMbi_LostFocus_Click

Итоговый синтаксис программы обработки ошибок выведен в окне модуля (см.


рис. 11.7).

Ш Microsoft Visual Basic - dbl - |Form_<t>npMbi (Code)]


Й 1 File Edit View Insert Debug Run Tools Add-Ins Window [Help
M3
Sjjcj'

Properties Назвакке фир|Х|

Название ф* Combcbox _^J


(Название фирмы
3
Privace Sub Название_фирмы_1.озсЕосиз ()
n1
IAlphabetic Categorized I On Error: GoTo Err Название фирмы LoscFocus Click
OldBorderSty 1 A
ScrallBar Align 0
SpecialEffect 2
TextAlign 0
Top 623
Visible True
Width 4560 _l
S Other
(Name) Название <\
AHowAutoCot True
ColumnHiddei False Егг_Название_фирмы_Ьозг.Госиз_С11ск;:
ControlTipTe MsgBox Err.Description
ControlType 111 Resume Ех1С_Название_фирмы_Ьозг:Госиз_С11ск
Щ Э Е Е Е Название. End Sub
J ^
1\Г№

Рис 117
Предупреждение дублирования записей при их вводе из формы 237

Теперь перейдем к созданию самой программы с помощью VBA - как вы по­


мните, такова была наша изначальная цель.

Функция создаваемой программы


Прежде всего зададимся вопросом, зачем нужна создаваемая процедура.
Когда мы включаем новую запись в форму Фирмы, то должны проверить, не
дублирует ли содержимое поля Название фирмы те одноименные поля, которые
уже введены в форму в предшествующих записях. Тестирование заключается
в следующем. Для каждой новой вводимой записи подсчитывается количество
совпадений поля Название фирмы с таким же полем для уже введенных записей.
Если это число равно 1, то программа извещает пользователя о наличии дублика­
та, обнуляет поля текущей записи и ждет ввода очередной. Если количество со­
впадений равно 0, то процедура:
1. Вводит значение в базу данных.
2. Сообщает об этом пользователю.
3. Устанавливает следующее значение кода фирмы (в поле Код фирмы преду­
смотрена последовательная нумерация).
4. Переходит к новой записи.
5. Активизирует поле Название фирмы.
Теперь форма готова к вводу новой записи. Если процедура, которая построена
описанным выше образом, будет запущена одновременно с вводом первой запи­
си, то число совпадений может равняться либо нулю, либо единице; других вари­
антов нет.
Программная реализация
Для работы процедуры нужны две переменные. Одна будет указывать на количе­
ство совпадений (дублирующихся записей), другая - сохранять код текущей за­
писи. Назовите их answer и Cod соответственно. Первое, что вы должны сделать, -
определить обе переменные как целые числа. Используйте для этого операторы:
Dim Cod As Integer
Dim answer As Integer
Теперь определите выражение, которое формирует количественное значение
переменной answer. Выражение будет иметь такую структуру:
answer = DCount( [Название фирмы] , Фирмы , ' [Название фирмы] =
Forms1 [Фирмы]1[Название фирмы] )
Здесь необходимы пояснения.
Функция DCount
Функция DCount возвращает число записей в заданном наборе (подмножестве) за­
писей. Ее синтаксис таков:
0Со1М(выражение, набор[, условие])
Здесь:
О выражение - определяет поле, для которого производится подсчет значений.
Данный аргумент может задаваться строковым выражением, определяющим
238 Программирование с помощью процедур VBA

поле в таблице или запросе, или представлять выражение, задающее вы­


полнение вычислений над данными, содержащимися в поле. Допускает­
ся использовать в аргументе выражение имя поля в таблице или элемента
управления в форме, константы, а также имя встроенной или определяемой
пользователем функции. Не допускается в аргументе выражение других статис­
тических функций по подмножеству или статистических функций SQL;
Q набор - строковое выражение, которое определяет набор записей, образую­
щих подмножество. Может представлять имя таблицы или запроса;
• условие - необязательное строковое выражение, ограничивающее диапазон
данных, для которых подсчитывается число значений. Например, аргумент
условие часто является эквивалентом предложения WHERE инструкции SQL,
но без ключевого слова WHERE. Если аргумент условие опущен, DCount выпол­
няет расчеты над полем, заданным в аргументе выражение, для всего набора
записей. Любое поле, указанное в аргументе условие, должно принадлежать
подмножеству, заданному аргументом набор; в противном случае функция
DCount возвращает значение Null.
С помощью функции DCount подсчитывается количество записей в подмно­
жестве, когда не требуется использовать конкретные значения. Хотя в аргумен­
те выражение можно указать любые расчеты, DCount всегда возвращает число за­
писей.
В нашем случае выражение - это имя поля "[Название фирмы]". (Вспомним: когда
в тексте строки есть пробелы, она заключается в квадратные скобки. Кавычка­
ми полагается обрамлять текстовую строку.) Значением аргумента набор явля­
ется форма Фирмы, а аргумента условие - "[Название фирмы] = Forms! [Фирмы]! [Название
фирмы]". Последнее означает, что здесь сравнивается содержимое поля текущей за­
писи с содержимым поля открытой формы (в правой части выражения Forms -
класс форм, [Фирмы] - имя какой-либо фирмы из этого класса, [Название фирмы] -
конкретное поле формы). Восклицательные знаки указывают на то, что следую­
щие за ними элементы определяются пользователем. В данном случае речь идет
о ссылке на открытую форму и на поле в ней.

Логическая конструкция If... Then... Else


Так как функция Dcount возвращает значение переменной answer (0 или 1), то и ло­
гическая проверка проводится относительно этой переменной. Утверждение,
подлежащее тестированию, - это answer = 1. Если оно верно (дубликат действи­
тельно обнаружен), то логическое выражение принимает значение True (Истина).
Затем сразу после проверяемого утверждения выполняется ряд операторов:
1. Исполняется команда MsgBox Prompt, и в результате на экране появляется со­
общение «Значение уже содержится в файле и повторно не вводится».
2. Запускается макрос, который стирает значения всех полей текущей записи,
кроме поля Код фирмы: в нем сохраняется текущее значение кода. Макрос
имеет рабочий номер 32. (В выборе этой цифры нет какого-либо специаль­
ного умысла, и макрос можно назвать как угодно.) Чтобы запустить его из
программы VBA, задайте команду DoCmd.RunMacro Макрос32 '.
Предупреждение дублирования записей при их вводе из формы 239

Если проверяемое утверждение неверно (answer не равно 1), значит, дубликат


не обнаружен. Логическое выражение принимает значение False (Ложь), и после
инструкции Else выполняется ряд операторов:
1. Запускается макрос, запоминающий запись (макрос2);
2. Запускается макрос, реализующий переход к повой записи (макрос 1). В обоих
случаях аналогично предыдущему используется команда макрос1 DoCmd RunMacro
"Макрос№";
3. С помощью команды MsgBox Prompt выдается сообщение «Запись введена».
4. Вычисляется повое значение кода записи. Оно равно максимальному значе­
нию, увеличенному на единицу. Для вычисления используется функция
Dmax (), которая возвращает максимальное значение кода в указанном набо­
ре (подмножестве) записей. Вот ее синтаксис:
DMax(выражение, набор[, условие])
Здесь:
- выражение - выражение, определяющее нужное поле. Данный аргумент мо­
жет задаваться строковым выражением, определяющим поле в таблице или
запросе, или представлять выражение, которое задает выполнение вычисле­
ний над данными, содержащимися в поле. Допускается использовать в ар­
гументе выражение имя поля в таблице или элемента управления в форме, кон­
станты, а также имя встроенной или определяемой пользователем функции;
- набор - строковое выражение, определяющее набор записей, образующих
подмножество. Может содержать имя таблицы или запроса;
- условие - необязательное строковое выражение, ограничивающее диапазон
данных, для которых определяется минимальное или максимальное значение
поля. Если аргумент условие опущен, DMax выполнит действия над полем, за­
данным в аргументе выражение, для всего набора записей. Любое поле, указан­
ное в аргументе условие, должно принадлежать подмножеству, заданному ар­
гументом набор; в противном случае функция DMax возвращает значение Null.
В данном случае значение набора (например, имя таблицы) в аргументах
не указывается, так как речь идет о поле, еще не включенном в базу дан­
ных. Но прямые кавычки, которые обрамляют пустую строку, все равно
должны присутствовать.
5. Значение вычисленного кода присваивается полю Код фирмы новой запи­
си. В этой инструкции также необходимо соблюдать правила, касающиеся
употребления квадратных скобок и восклицательных знаков.
6. Запускается макрос14, который передает фокус следующему полю - Назва­
ние фирмы.
7. Заканчивается логическая конструкция If.
Проверка завершенной процедуры
На этом написание процедуры завершено. Вот ее полный текст:
Private Sub Ha38aHMe^<tmpMbi_LostFocus()
On Error GoTo Егг_Название_фирмы_ LostFocus _Click
Dim Cod As Integer
240 Программирование с помощью процедур VBA

Dim answer As Integer


answer = DCount( [Название фирмы] Фирмы , [Название фирмы]
Forms1 [Фирмы]1[Название фирмы] )
I f answer = 1 Then
MsgBox Prompt = Значение уже содержится Е раиле и повторно не вводится
DoCmd RunMacro Макрос32
Else
DoCmd RunMacro Макрос2
DoCmd RunMacro Макрос1
MsgBox Prompt = Запись введена
Cod = DMax( [Код фирмы] Фирмы ) + 1
forms 1 [Фирмы] 1 [Код фирмы] = [Cod]
DoCmd RunMacro Макрос14
End I f
DoCmd DoMenuItem acFormBar, acRecordsMenu, 5 acMenuVer70
Exit_Ha3BaHMe_ctnpMbi_LostFocus_Click
Exit Sub
Err_Ha3BaHwe_<JmpMbi_LostFocus_Click
MsgBox Err Description
Resume Exlt_Haзвaниe_фиpмы_LostFocus_CllCk
End Sub
Программа создавалась в окне модуля За недостатком места мы не иллюстри­
ровали выполнение каждого этапа работы после ввода очередного оператора По­
кажем только, как выглядит в окне модуля завершенная процедура (см. рис. 11.8)

Я Microsoft Visual Basic - dbl - [Гогт_Фирмы (Code)] Щ*}


>'\ <£i File edit View Insert DebugRun Tools AdcHns Window Help ^Jj9J2<j
' • II • M Ы & V ^ © Ln 15D Col 64
•Pmjecf ЛЗ X\ Натание_фирмы
H LostFocus
"3
Ъ n "Б Private Sub Название_фирмы_ЬозсГосиз ()
3
- ^ db3(dbl) . On Error Go To Егг_Название_фирмы Clic)--
^ -_\ Microsoft Access CI a L irn Cod As Integer
ГП Рогт_Контрольм Dim answer As Integer
Ш Рогт_Менед,жер answer = DCount("[Название фирмы]", "Фирмы", "[Название фигны
ПИ Рогт_Назначемн( If answer = 1 Then
Щ Рогт_Приборы MsgBox Prompt:="3начение ухе содержится файле и повторно не
Ш Form_C граны DoCmd.RunMac г о "Макрос 3 2"
[ Ц Рогт_Типы Приб( Else
ПИ FormjtiMpMbi DoCmd.RunMacro "Karpoc2"
СИ Form_3Konorn4^-( DoCmd.RunMacro "Макрос1"
MsgBox Prompt ="Запись введена"
J
Cod = DMax("[Kofl фирмы]", "Фирмы") + 1
Propertres Название фирмыХ| Forms'[Фирмы]'[Код фирмы] = [Cod]
DoCmd.RunMacro "Макрос14"
[Название фир СотЬсЬох »|
End If
Alphabetic I Categorized | Irr Название_фирмы LostFocus_Click
MsgBox Err Description
AfterUpdate Ма*рос36 Resume Exlr:_Haзвaниe_фиpмы_LostFocus_CllCk
AllowAutoCorrec True End Sub
-J
Рис 118
Предупреждение дублирования записей при их вводе из формы 24
Теперь проверим, как работает написанная процедура. Откройте форму Фир­
мы и введите в поле Название фирмы имя организации, которое заведомо содер­
жится в базе данных - например, ORION (см рис. 119) Не заполняйте осталь­
ные поля в данном случае важно просто проверить, дееспособна ли созданная
программа Чтобы ввести информацию в базу данных, щелкните по кнопке
Enter Появится сообщение, показанное на рис.11.10 Форма остается в том же
состоянии, код новой записи не изменился, и все готово к вводу другой новой
записи

Ы Microsoft Access
i File Edit View Insert Format Pecorrt- Tnnh rjrriuvi/ HPI[_
•ШЭ
I D £? Ы Ш a "9 & R3 £" ^ - an - n£

в Фирмы
Кол ФИРМЫ 27

Название qwpMbi ORION ~Б

~3
Страна
Г
Ашес

Аппес2

t^^ffi^^4****'*^. '

Примечания

Изменить Удалить
запись Новая страна
запись

Rtcofd ч| <|( Г"" » 1.»'1»»1 ^ 27


,d
T J ]

Рис 119

Microsoft Access х]

Значение уже содержите* в файле и повторно н* вводите*

OK

Рис И 10
9 - 119
242 Программирование с помощью процедур VBA

Добавьте ее, задав в качестве имени фирмы уникальное имя ORION1 Снова
воспользуйтесь кнопкой Enter для ввода записи. В результате появится друюе со­
общение (см. рис. 11.12). Как видите, добавление этой записи база данных «вос­
приняла» совершенно нормально.
Итак, вы умеете бороться с дублированием записей двумя способами (один из
них был описан выше, в главе 9). Мы рекомендуем иметь в своем арсенале оба
Отметим лишь, что последний вариант удобнее при вводе записей словарного
типа, где определяющим является одно поле (в данном случае - поле Название

Ш Microsoft Access
i j File Edit View Insert Format Record; lools Window Нф
шз

IБ Фирмы
Коп Фиомы 27

Название фирмы jОR101^11 3

Стоана d

Дпо ее

Агюес2

МЯЖЩЩИВРШ'Ж'ШЖШЯИ»

Примечания

Изменить Удалить «-& ч -


запись запись Новая страна

Record и | . || 27" > I >• | » » | of 27


.J
jj,

Рис / / / /

Microsoft Access D

запись введена

OK

Рис 11 12
Установка на последнюю запись при открытии формы 243
фирмы). В принципе ничего невозможного нет, и нетрудно усовершенствовать
программу настолько, чтобы она позволяла контролировать несколько полей. Но
подобное усложнение процедуры вряд ли оправдано, тем более что для такого слу­
чая есть другой вариант отсева дублирующихся записей.

Установка на последнюю запись


при открытии формы
В главе 9 уже упоминалось о том, что при активизации форма открывается на по­
следней, еще пустой записи, чтобы пользователь не тратил время на поиски и мог
сразу вводить новую информацию. Теперь рассмотрим программный механизм,
который позволяет реализовать эту установку. В качестве примера возьмем ту же
форму Фирмы.
По сути данная процедура представляет собой просто фрагмент предыдущей
программы. Фокус передается новой записи, затем максимальное значение уве­
личивается на единицу и присваивается этой новой записи.
Как и в предыдущем примере, начните с окна свойств. Но теперь вам понадо­
бится таблица свойств не какого-то отдельного поля, а всей формы в целом. От­
крыв форму Фирмы в режиме Design (Конструктор), щелкните по кнопке
Она расположена в левом верхнем углу формы, непосредственно под названием -
Фирмы: Form (см. рис. 11 13). На фоне окна конструктора откроется окно таблицы
свойств формы Form. Активизируйте опцию On Open (Открыть). Щелкните в этом
поле мышью и воспользуйтесь стрелкой прокрутки. В выпадающем списке выбери­
те позицию Event Procedure (Обработка событий) и включите ее в поле ОпОреп
Если теперь вы щелкнете по кнопке _^, то в окне модуля будут выведены опера­
торы, обрамляющие процедуру (см. рис. 11.6): Private Sub Form_0pen (Cancel As
Integer) и End Sub.
Отметим, что само по себе окно модуля не содержит новой информации, необ­
ходимой читателю. Поэтому в дальнейшем мы не станем включать в главу рисун­
ки, которые явно избыточны. Обсуждаться будет только текст программы. Одна­
ко не забывайте, что она формируется в окне модуля.
Следующий стандартный шаг - установка операторов обработки ошибок. Пос­
ле этого заготовка программы принимает такой вид:
Private Sub Forn_0pen(Cancel As Integer)
On Error GoTo Err_Forn_Open

Err_Form_Open
MsgBox Err Description
Resume Exit_Form_Open
End Sub
Теперь определите переменную Cod, которая необходима для выполнения про­
цедуры:
Dim Cod As Integer

9*
46 Программирование с помощью процедур VBA

'деление записи с установкой


а последнюю запись
каждой форме базы данных Контрольно-измерительные приборы созданы две
шолнительные кнопки: Изменить запись и Удалить запись (см. рис 11.15).
В этом разделе будет рассмотрена процедура, на которой основано действие
гопки Удалить запись.
В принципе удаление записи - совершенно рутинная операция. Она выпол-
1ется штатными средствами Access и не заслуживает особого внимания. Если
нашем случае для нее предусмотрена специальная кнопка, то лишь потому, что
ть и вторая часть задачи - установка на последнюю запись. Это значит, что в нро-
>амму следует добавить некоторые новые функции, чтобы показать некоторые
)вые возможности в использовании процедуры. Покажем это на примере формы
азначение. Как и во всех предыдущих случаях, выполнение процедуры привязано

Ы Microsoft Access ПЙТЗЛ


File Edit View Inset t Format Pecoids Tools Window Help

D E> й Ш [h v- ' •' • aa- og 53 -


r AI Z I Y/
hi - a a a z - П 51 1] •+ ©
В Назначение шш
Код назначения W

Назначение
прибора

Примечания

Изменить Удалить
запись ЗаПИСЬ

Record и | <| J 37 > 1 " | " > | of 37 J jj

Рис ? / 15
Удаление записи с установкой на последнюю запись 247

к событию On Click (Щелкнуть по кнопке) в таблице свойств кнопки Command


Button (Командная кнопка) - см. рис. 11.16. Далее следует выбрать опцию Уда­
лить запись
Как и раньше, с помощью кнопки _ ^ откройте окно модуля. Оно выглядит так
же, как аналогичное окно, которое было показано на рис. 11.6. Процедура опять
будет формироваться в окне модуля, по и на сей раз речь пойдет только о тексто­
вых операторах.

JOn Mouse Down ,


•On Mouse Move . .
fori Mouse Up . . . .
O n Kev Оо,Л.'п . .
jOri Key Up
Юп Key Press

Рис 11 16

Первые этапы работы уже хорошо вам знакомы: автоматическая вставка обрам­
ляющих операторов, ввод операторов обработки ошибок и определение перемен­
ной Cod. Вот результат ваших трудов:
Private Sub Удалить_запись_С11ск()
On Error GoTo Егг_Назначение_Удалить_запись_Й1ск
Dim Cod As Integer
Егг_Назначение_Удалить_запись_С11Ск.
MsgBox Err Description
Resume Ех11_Назначение_Удалить_запись_СПск
End Sub
Далее вы блокируете вывод любых информационных сообщений, кроме сооб­
щений об ошибках. Эту функцию выполняет программа макросЗ (см. рис. 11.17).
Чтобы запустить ее, задайте команду Set Warning (Установить сообщение), но
в поле Action Arguments (Аргументы команды) укажите значение No, что и по­
зволит блокировать вывод сообщений. Данная опция используется, когда пользо­
ватель не хочет, чтобы выполнение макроса прерывалось ради появления окон
предупреждений. Однако сообщения об ошибках выводятся в любом случае. Кро­
ме того, Microsoft Access выводит на экран все диалоговые окна, которые требуют
от пользователя действий более сложных, чем щелчок по кнопке: например, когда
надо ввести какой-либо текст или выбрать параметр из списка.
248 Программирование с помощью процедур VBA

Ш Microsoft Access ПЕПП


File Edit №•/', Insert Pun Tools Window Help

* МакросЗ: Macro
1 Comment
шш з

Action
Set^'atningsl J
И

J

• н и Action Arguments

Warnings™
1
Turns all system message-: on of off.
Prevent? modal warning; fiom stopping
the macro (.although error messages
i and dialogs that require user input still
appear) This has the same effect as
pressing Enter in each message box
| (typically an OK or Yes) Press Fl for
help on this action

Рис 11 17

Макросу производит основную операцию - удаление записи.


После этого выполняется цикл. Рассмотрим его подробнее.
При активной работе с БД может оказаться, что в какой-либо форме есть не
одна, а несколько пустых записей. Например, вы нечаянно или с определенной
целью не ввели в новую запись никаких данных, однако и не удалили ее. Щелк­
нув по кнопке Удалить запись, вы восстановите порядок, и все пустые записи бу­
дут уничтожены. Когда вы снова активизируете форму, она откроется на пустой
записи, готовой к вводу информации.
Цикл имеет следующий синтаксис:
А
DoCmd RunMacro Макрос7
I f IsNull(Forms' [Назначение]1 [Назначение] = " " ) = True Then
DoCmd RunMacro МакросЗ
DoCmd RunMacro МакросЭ
GoTo A
Else
End I f
Программа Макрос7 осуществляет переход к последней записи. Затем уже зна­
комая нам логическая конструкция Then If Else (Если...То...Иначе) проверяет ут­
верждение Forms1 [Назначение]1 [Назначение] = . Иными словами, вы проверяете,
есть ли в поле Назначение формы Назначение пустая строка.
Удаление записи с установкой на последнюю запись 249
Проверка проводится с помощью функции IsNull О, которая возвращает значе­
ние типа Boolean. Оно показывает, является ли результатом выражения пустое зна­
чение (Null). Синтаксис функции:
1БМи11(выражение)
Итак, функция IsNull возвращает True (Истина), если выражение имеет значе­
ние Null; в противном случае возвращается значение False (Ложь). Предположим,
результатом проверки будет True: в записи обнаружена пустая строка. Тогда с по­
мощью программы Макрос7 блокируется вывод сообщения, а оператор Макросу уда­
ляет эту запись и осуществляет переход на метку А. Она повторяет описанные
процедуры для следующей пустой записи, и так продолжается до тех пор, пока не
выяснится, что подобных записей больше нет. Тогда цикл заканчивается и начи­
нает выполняться следующая группа операторов:
DoCmd RunMacro Макрос1
Cod = DMaxC [Код] , Назначение ) + 1
Forms'[Назначение] 1 [Код] = [Cod]
DoCmd RunMacro Макрос29
Приведенный набор команд задает установку на последнюю пустую запись
и определяет соответствующее значение для ее кода. (Подробно все это рассмат­
ривалось в предыдущем разделе.)
Вот полный текст процедуры:
Private Sub Удалить_запись_С11ск()
On Error GoTo Егг_Назначение_Удалить_запись_С11ск
Dim Cod As Integer
DoCmd RunMacro МакросЗ
DoCmd RunMacro МакросЭ
A
DoCmd RunMacro Макрос7
If IsNulKForms1 [Назначение]1 [Назначение] = ) = True Then
DoCmd RunMacro МакросЗ
DoCmd RunMacro МакросЭ
GoTo A
Else
End If
DoCmd RunMacro Макрос1
Cod = DMax( [Код] , Назначение ) + 1
Forms1[Назначение]1 [Код] = [Cod]
DoCmd RunMacro Макрос29
ЕхИ_Назначение_Удалить_эапись_СНск
Exit Sub
Егг_Назначение_Удалить_запись_С11ск
MsgBox Err Description
Resume Ех11_Назначение_Удалить_запись_С11ск
End Sub
250 Программирование с помощью процедур VBA

Expression Builder LH
Count: («expr») | J
Cancel

d Undo
~ р * ] &| = > < 4 H And ЬУ rTot I » j ( )1 Paste | Help |

P j Назначение <AII>
(±1 Tables Arrays nputBox$
1 (±J Queries Conversion MsgEox
Database
Lfl Form? Date/Time
& Reports DDE/OLE
P i Functions Domain Aggregate
Error Handling
Financial
LQdbl General
P j Constants Input/Output
CD Operators Inspection
P i Common Expressions Marh
23Я5ЕЯИИИ1
Proaram Flow J
InputBox(prompt; title; default: xpos; ypos)

РИС. / / /S

э
езюме
В главе рассматриваются основные положения языка программирования
VBA, который стал стандартным средством макропрограммирования для
различных приложений.
Сфера приложения VBA практически безгранична. В качестве примера
в этой главе выбрано «обустройство» собственно базы данных - обеспече­
ние удобства работы с ней для пользователя. Обычно у каждого пользовате­
ля свои взгляды на то, что удобно, а что нет, и нередко сервис базы данных
приходится дорабатывать.
Обращение к VBA оправдано тогда, когда средства, заложенные в Access,
либо не позволяют добиться нужного результата, либо предлагают сложное
и громоздкое решение.
В качестве конкретных примеров использования языка VBA в настоящей
главе рассмотрены:
- предупреждение дублирования записей при их вводе с помощью формы;
- установка на последнюю запись при открытии формы;
- удаление записи с дальнейшей установкой на последнюю запись.
Глава X I I
Другие возможности
Access 2 0 0 0

• Установка Access 2000


• Условное форматирование
• Буфер обмена
• Автоисправление имен
• Разделение базы данных
• Сжатие базы данных при ее закрытии
• Конвертирование базы данных

Установка Access 2000


Как уже говорилось, система Access 2000 является органической составной час­
тью программного пакета Office 2000, и это важное обстоятельство во многом
определяет характер инсталляции Access 2000. Если вы впервые устанавливаете
Access, целесообразно устанавливать весь пакет в целом. Это не означает, что дан­
ную систему нельзя установить «в одиночку», локально, но вряд ли это разумное
решение. В дальнейшем под установкой Access 2000 фактически будет понимать­
ся инсталляция пакета Office 2000 в целом. Что в первую очередь следует учи­
тывать?
Office 2000 ориентирован на работу с системой Windows 98 и ее более поздни­
ми версиями. При установке пакета в среде Windows 95 могут возникнуть про­
блемы, например указание на несовместимость клавиатуры. Кроме того, перед
252 Другие возможности Access 2000

инстралляцией придется закрыть не только все открытые приложения, но и фо­


новые программы: Norton System Doctor и др. Поскольку при установке пакет
к таким программам относится очень болезненно, лучше на время установки про­
сто очистить панель задач.
Инсталляция начинается традиционно - с запуска программы Setup.exe, кото­
рая содержится на CD-ROM. При первой установке, освоившись с компьютером
и разобравшись с лицензионным номером, Office 2000 попросит пользователя
выбрать один из вариантов инсталляции (см. рис. 12.1):
• Upgrade Now - провести стандартное расширение сейчас, то есть удалить
предыдущую версию Office и загрузить новую в папку, которую по умолча­
нию предлагает система;
Q Customize - самому указать место для инсталляции Office 2000, принять
решение о сохранении или удалении предыдущей версии пакета и опреде­
лить требуемую конфигурацию.
Сделав выбор, щелкните по соответствующей кнопке. Пользователю, кото­
рый предпочтет первый, стандартный вариант загрузки, Office 2000 больше не
станет задавать вопросов. На экране появится сообщение с просьбой подож­
дать, пока не закончится конфигурация программы и установка пакета (см.
рис. 12.2).

Рис 12 1
Установка Access 2000 253

iff Reinstalling/Repairing Microsoft Office 2000 пш


Please wait while Windows configures Microsoft Office 20G0

Verifying installation tasks


Cancel

Рис. 12 2

Если вы пожелаете лично контролировать процесс установки и выберете ре­


жим Customize, то система предложит вам задать конкретную конфигурацию па­
кета. (Отметим, что при установке редакции Office 2000 пользователь имеет боль­
ше возможностей для выбора тех или иных элементов пакета. Предыдущие версии
Office были в этом смысле менее гибкими.) На рис. 12.3 показана структура кон­
фигурации, которая предлагается пользователю (в основном на экран выведены
элементы, имеющие отношение к Access 2000).
Как видите, набор значков, характеризующих различные варианты конфигура­
ции, здесь разнообразнее, чем в предыдущих версиях Office или Access. Во-первых,

\Ш Microsoft Office 2000: Update Features за


_!'
X -1 Integrated File Management
Microsoft Access for Windows
d
_ J ' Help
_ J ~ Typical Wizards
• SETUP Z3~ Additional Wizards
ttJ> Sample Databases
i Maintenance Mode
0 - J - Snapshot Viewer
O J - Database Replication
) Selecting Features
_ J - Calendar Control J
_ J ' Client Server Visual Design Tools
Installing Office
э Microsoft FrontPage for Windows
э t®d
X -1 Microsoft Office (French)
В X " I Microsoft Word for Windows
X - | Address Book
<l 1 • |

Description:
Applications and support files for use with Microsoft Office.

Size: Selected Features: 16MB Free Disk Space 1153ПВ

Help Cancel < < Back Update Now

Рис. 12.3
Другие возможности Access 2000

[енты можно сворачивать и разворачивать с помощью уже известных читате-


начков + и - . Кроме того, предусмотрены следующие опции:
|ГГ}->] - открывает окно (см. рис. 12.3), где представлены различные вариан­
ты установки элемента, которые перечисляются ниже;
ьЭ Run from My Computet | - когда пользователь выбирает эту опцию, элемент
устанавливается па жесткий диск и в дальнейшем запускается обычным об­
разом (допустим, па окна Мой компьютер);
On Run all fiom My Computer ] - при выборе данного варианта все элементы систе­
мы загружаются па жесткий диск и впоследствии тоже запускаются обыч­
ным порядком. Если необходим более детальный выбор (то есть элемент со­
держит составные части), он, в свою очередь, раскрывается, и производится
аналошчпый выбор;
ftj) Run 1ют СО | - элемент остается на компакт-диске, откуда при необходи­
мости и запускается;
© g Run all from CD J - все элементы, которые содержатся в этом перечне, оста-
югся на компак1 -диске, откуда при необходимости и запускаются;
О Installed on First Use | - элемент автоматически инсталлируется при первом
запуске программы;
X Hot Available | - элемент недоступен и не подлежит установке.
брав необходимые для работы элементы, щелкните по кнопке Update Now
эвить теперь), чтобы запустить сам процесс установки. После его заверше-
/indows предложит вам перезагрузить компьютер (см. рис. 12.4). Когда и это
сделано, Office 2000 вместе с Access 2000 готовы к работе,
ги Office 2000 инсталлируется на ранее установленную версию, то вместо
(ения, выведенного на рис. 12.1, появляется другое (см. рис. 12.5). Система
агает пользователю выбрать один из нижеследующих вариантов:
Repair Office (Переустановить Office 2000) - например, если произошли
<акие-то сбои в работе программы;
\dd or Remove Office (Добавить или удалить отдельные элементы пакета);
Remove Office (Удалить Office 2000) - полностью удалить пакет с компьютера.
ьнейшие действия пользователя не содержат ничего необычного.

1 f £ Inxtallei Information В1

• \ The installer must restart yout system before configuration of


^ I J Microsoft Office 2000 Pierniurn can continue Click Yes to restart now
or No if you plan to manually restart later

Yes N° J

Рис 12 4
Условное форматирование 255

wp M i c i o i o f t Office 2 0 0 0 M a i n t e n a n c e M o d e из
OfTice M a i n t e n a n c e M o d e

Please select one of the following options

SETUP Repair Office


Maintenance Mode Restore your Microsoft Office 2000 Premium installation to its
опдтз! state.

Add or Remove Features


Change which features ate m_.tailed or remove specific
features.

Remove Office
fffl Delete Microsoft Office 2000 Premium trorn this computer.

'iJ

Help Cancel

Рис. 12.5

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

Пример условного форматирования


Рассмотрим условное форматирование на конкретном примере. Откройте форму
пли отчет в режиме конструктора (Design view).
На рис. 12.6 показана форма Фирмы, взятая из базы данных Контрольно-
измерительные приборы. Здесь форма открыта в режиме формы (Form view),
а на рис. 12.7 - в режиме конструктора. Наиболее интересен второй вариант. Вы­
делите в форме Фирмы поле, которое хотите представить в условном формате, -
Название фирмы (см. рис. 12.7).
Теперь в верхней строке меню Format (Формат) активизируйте опцию Condi­
tional formatting (Условное форматирование). В результате на экране появится
/36 Другие возможности Access 2000

Ы Microsoft A c c e t * - [Фирмы]
isH
ол - °S ©
Si Xi v / *й • • >* Э й - (3
Коп Фиомы 24

Название фирмы jLEEMAN LABS ~Б


Стоана США

Апоес Российское представительство ЦНИИ КМ


"Прометей" и Ассоциация "Центролаб"
1ч1186г ОЯНКТ-ПАТРППУПГ нлб п Мондгтыпш 1
Ашес2

Примечания

Изменить Удалить
запись запись Новэд страна

Record 1<1 < > I »1 | > * | or 27

Рис 12 6

[налоговое окно условного форматирования (см рис. 12 8) Формат выделяемого


юля может быть разным
• тип (вариант, выбранный в нашем примере),
• цвет шрифта,
• цвет заливки поля.
Верхнее поле в диалоговом окне предназначено для отображения измененного
юрмата в случае, если заданные условия не соблюдены, нижнее - в случае, когда
ни выполняются. Три средних окна служат для ввода условий В левом из них
помощью стрелки прокрутки указывается тип критерия для форматирования:
Q критерий, определяющий нужное значение поля,
Q критерий, определяющий нужное выражение, которое включает значение
поля;
• критерий, указывающий, при каких условиях полю передается управление
Рассмотрим первый пример - критерий для значения. Допустим, надо выде-
:ть запись, где упоминается фирма под названием LEEMAN LABS Во второе
Условное форматирование 257
Н Microsoft Л е с е » - (Фирмы : Foim]
Тага
о - и а &, & tfe ta <? " ч* a * ! <з л с? .> | © а -1 о . !
10 I II I 12 I IS i M i 1г
# Form Header
* C^roil

Кош Фи1: мы КОД фПрМЫ

т: I 1=
Название qDupMbi • Название qnipMti
Т.
гоан Код страны
1
•-•--••
7>
1_

•№ Адрес

Ашес Адрес 2

[t>gi
Примечания
>име -пни

Исметаь Удалив 4
I Не.»

Рис 12 7

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


го перечня
Q between (между),
• not between (вне пределов);
• equal to (равно);
• not equal to (пе равно);
• greater than (больше чем),
• less than (меньше чем),
• greater than or equal to (больше или равно);
U less than or equal to (меньше или равно)
Задайте условие, согласно которому значение поля (см. рис. 12.9) равняется
LEEMAN LABS. После ввода в записях, где в данном поле будет указано это на­
звание фирмы, оно будет показано измененным шрифтом, как на рис. 12.9 Крите­
рий можно усложнить - в частности, добавить новые условия (общим числом не
более трех) Как уже говорилось, аналогичного результата при поиске нужной за­
писи вы добьетесь, сформировав запрос на выборку.
>58 Другие возможности Access 2000

ondilional Formatting ИЕ1


Default Formatting

This format will be used if no AaBbCcYyZz В / U "N - A


conditions are met:

Condition 1 ~ -
|Field Value Is ^ ] |equd to •*] |"LEEMAN LABS

Preview of format to use


when condition is true:
AaRhC.rYyF7 в i I и ! Ь -1 A .

Add» Delete .. OK Cancel

Рис 12 8

Microsoft Access - [Фирмы] 1Щх]


п-о - .
к - и & а у] I •» •*; ' © д-| 5U
Коп Фиомы 24

Название фирмы LEEM.AN LABS "3


Стоана США И
Ашес Российское представительство ЦНИИ КМ
"Прометей" и Ассоциация"Центролаб"
191186 г Оянкт-nftTfinfivnr иаб п Монястыгжи 1
Агюес2

Примечания

zJ
Record: и | < | f 24 > | " | f * j of 27 '

Рис. 12 9

уфер обмена
о всех программных продуктах Microsoft, начиная с первых версий DOS, ра-
зта с буфером обмена всегда была простейшей рутинной операцией. Каза-
зсь, в ней нечего совершенствовать. Однако в Access 2000 такие улучшения
)явились. Точнее говоря, они были разработаны в Office 2000, поэтому стали
)стуины и в Access 2000.
Буфер обмена 259
Новое содержание
В предыдущих версиях Office буфер обмена был один, и в каждый момент време­
ни с помощью буфера можно было работать только с одним файлом. В пакете
Office 2000 таких буферов стало 12. Соответственно, пользователь может обраба­
тывать одновременно до 12 файлов. В окне, которое показано на рис. 12.10, вы
видите 5 буферов

Рис. 12 10

Все кнопки управления буфером: Cut (Вырезать), Сору (Копировать) и Paste


(Вставить) - сохраняют свои обычные функции. Однако для каждого нового фай­
ла, открытого в диалоговом окне, выводится отдельный буфер. Это, в свою оче­
редь, предоставляет пользователю новые возможности для работы.

Новые возможности для работы


Команда Collect and Paste (Собрать и вставить) позволяет вам собирать инфор­
мацию из различных источников (документов, электронных таблиц, сети Internet
и т.д.), упорядочивать ее в буфере обмена, а затем целиком вставлять в любой до­
кумент по вашему выбору. Эта опция представляет собой усовершенствованный
вариант функций Сору (Копировать) и Paste (Вставить), известных вам по ран­
ним версиям Office. При использовании стандартного буфера обмена в системе
Windows нужно было скопировать информацию, затем открыть другое окно, вста­
вить скопированный фрагмент, закрыть второе окно и вернуться в первое. Если
возникала необходимость скопировать новые данные, приходилось повторять все
сначала. Команда Collect and Paste существенно облегчает работу с несколькими
блоками данных. Буфер обмена позволяет скопировать до двенадцати отдельных
фрагментов текста и/или изображения из одного либо нескольких документов,
сообщений электронной почты, Web-страниц, презентаций, других файлов. Затем
Другие возможности Access 2000

ррагменты можно поместить в любое приложение Ofhce - по одному или все


у. Во втором случае воспользуйтесь удобной командой Paste All (Вставить все).

тоисправление имен
:врале 1997 года фирмой Griggs-Anderson Research был проведен опрос пользо-
лей Microsoft Access. Согласно результатам этого исследования, функция ав-
правления имен возглавляла список самых насущных пользовательских по­
лостей.

нкции автоисправления имен


1КЦПЯ Name Autocorrect (Автоисправление имен) устраняет побочные эффек-
шторые часто возникают при переименовании объектов базы данных. Напри-
если в предшествующих версиях Access пользователь присваивал полю таб-
ы другое название, то система переставала выводить данные, связанные с этим
эм. А вот Access 2000 автоматически переносит изменение имени поля на все
симые от него объекты: запросы, формы, таблицы, отчеты, поля. Поэтому
ьзователь может беспрепятственно продолжать работу с приложением. Вся-
раз, когда вы открываете форму или другой объект базы данных с изменен-
1 названием, Access 2000 автоматически проверяет и фиксирует расхождения
:ду этим объектом и другими, которые с ним связаны. Допустим, вы открыли
му, связанную с таблицей. Система сравнит дату и время обращения к форме
блице. Если они различны, включается функция Name Autocorrect.

эаничения на использование функции


первых, пользователь может работать с ней, если ему разрешена модификация
л данных. Ясно, что при обращении к объекту в режиме Read Only (Только
чтения) применение Name Autocorrect исключено.
'ассмотрим другое ограничение. Если объект базы данных создается при от­
менной функции автоисправления, то после ее активизации будут автома-
ески фиксироваться только новые внесенные изменения. Если же они были
ланы до включения Name Autocorrect, соответствующие ссылки придется
сти вручную. Для форм или отчетов, содержащих коды Visual Basic, система
ess 2000 сама проставит эти ссылки, но не будет делать исправлений в текстах
грамм Visual Basic.
Зместе с тем, в некоторых случаях Name Autocorrect не в состоянии исправить
лки на переименованные объекты, что существенно ограничивает сферу при-
[ения функции. Это может произойти, прежде всего, если:
-I изменены ссылки, указывающие на неправильный оператор SQL;
2 изменены ссылки, указывающие на код в программе Visual Basic;
3 изменены ссылки, указывающие на связанные таблицы, если эти таблицы
или поля в них переименованы в обратной последовательности;
3 изменены ссылки на макросы, в том числе в свойствах событий, а также в меню
свойств устанавливаются имена макросов;
Автоисправление имен 261
• пользователь работает в реплицированной (скоп ированной) базе данных.
В этом случае функция Name Autocorrect отключается, и ее нельзя активи­
зировать снова;
• пользователь работает в Microsoft Access Project. Функция Name Autocorrect
может применяться для баз данных, созданных как непосредственно в среде
Access 2000, так и в ее ранних редакциях. (В последнем случае эти БД пре­
образуются системой Access 2000.)

Использование функции
Чтобы включить Name Autocorrect, надо:
1. В меню Tools (строка меню Access 2000) выбрать опцию Options (Параметры).
2. В появившемся диалоговом окне Options (см. рис. 12.11) открыть вкладку
General (Общие). Одно важное замечание. Предположим, вы хотите, чтобы
система Access 2000 запомнила сделанные вами изменения имен, но в дан­
ный момент не вносила их в записи (это можно сделать и в другое время).
В разделе Name Autocorrect окна Options установите флажок только рядом
с опцией Track name Autocorrect Info (Подготовить информацию для авто­
матического исправления имен).
Если вы хотите активизировать функцию Name Autocorrect, установите галочку
в позиции Perform name AutoCorrect (Выполнить автоисправление имен). А если
необходимо, чтобы информация о проведенном автоисправлении была сохранена

ВПгЯЯ
View General Edit/Find ] keyboard Datasheet | Forms/Reports ] Advanced Tables/Queries

Print mat gins Name AutoCorrect


Left margin |ЭЕШ5Я W Track name AutoCorrect info

Pjght margin ] : , 199crn P Perform name AutoCorrect

W Log name AutoCorrect changes


Top margin. |2,199crri

Bottom margin- |z,499cni

Default database folder New database sort o r d e r :


|С.\Мои документы\ j'jeneral
d
f? Recently used file list:

W Provide feedback with SOUnd


d Use four-digit year formatting

P This database
Г~ Compact on Close
Г - All databases

Web Options . 1

OK Отмена

Рис 12 11
Другие возможности Access 2000

е данных, то включите флажок еще и в позиции Log name AutoCorrect changes


шксировать исправление имен).

зделение базы данных


да такое решение будет для пользователя самым разумным. Например, рас-
оим ситуацию, с которой вы вполне можете столкнуться на практике. В таб-
к БД накоплен большой объем первичных данных. Вы хотели бы использо-
лх для того, чтобы построить на основе этих исходных данных совсем другую
со своими формами, отчет ами, запросами и т.д. Объекты уже существующей
данных вас не интересуют. Тогда се можно разделить на две независимые
. Точнее говоря, вы собираетесь выделить из существующей БД, которая ос-
я неизменной, еще одну, причем новая база данных будет включать только
цы. На их основе впоследствии можно наращивать информацию и разви-
ювую БД.
эбы разделить таблицы, в строке меню Access 2000 задайте последователь-
действий: Tools => Database Utilities => Database Splitter (Инструменты =>
гты базы данных => Разделитель базы данных). После этого на экране по-
я диалоговое окно разделителя (см. рис. 12.12).

Database Splitter

Этот ыастер переыешдет т а б л и ц ы го текущей ба­


з ы данных £ новую баз} данных В ыногопользо-
Е а т с л ы к о п среде он изменяет схему сети и облег­
чает дальнейшее развитие без нарушения д а н н ы х
и п о м е х для пользователя

Процесс может быть длительным До разделения


рс*-оыендуется сделать резервную копях- исход­
ной базы данных

В ы хотите начать разделение базы д а н н ы х сейчас''

^ Ч , |

Split Database Cancel

Рис 12 12

а вы ознакомитесь с информацией, выведенной в этом окне, и выберете


plit Database, система осуществит разделение базы данных. Вмешатель-
льзователя потребуется в самом конце этого процесса, когда нужно будет
ь предлагаемое название новой БД или ввести другое. Access собирается
ь ей имя прежней БД, но с дополнением be. На рис. 12.13 показано, как
иных db5.mdb делится на две: старую (с тем же именем) и новую, для
Розделение базы данных 263
Create B a c k - e n d D a t a b a s e
33
JJ Мои документы
"3 *-' a ® Ц, П Ь Tools
Access ^ d b S mdb
Zrnono $ } dbS_be mdb
Гридин V | db6.mdb
Мои рисунки %Jdb7 mdb
Монография ~ ' desktop mi
МЧС-развитие T^JESJDPER.xIs
Универсум [л] Microsoft Office.ZIP
1 Файлы справок j ^ J Old Excel Documents
щВаскир of Проектирование базы данных.wbk # ] Paget.htm
KjCATMAPl.xls ^ ] Визитка.doc
ydbl.mdb Ч З Володя.doc
V | d b 2 mdb ^Jrorieo.doc
Vjdb3 mdb i<1foweocT,lex
y d b 4 mdb !л]гомеост1.1ех
-^]dbS Idb ^ Д о п о л н е н и я к плану монографи

±1
File name hH-MlnM-! _ЕЗ В split
ave as type. All File; i* *)
"3 Cancel

Рис. 12 13

которой предлагается название db5_be.mdb. Когда пользователь примет решение,


появится новая база данных, содержащая точные копии таблиц из старой БД и го­
товая к вводу и накоплению информации.
Объективности ради отметим: если пользователю понадобится разделить базу
данных, он может сделать это и без помощи команды Split Database (Разделить
базу данных). Можно скопировать исходную БД, а затем удалить из полученной
копии все объекты, за исключением таблиц. Результат будет таким же, хотя при­
дется произвести больше операций. Другими словами, вы снова убеждаемся в том,
что появление в системе новой функции не означает открытия принципиально
новой возможности. Пользователь просто получает право выбрать иной, более
удобный вариант решения той или иной задачи.

Сжатие базы данных при ее закрытии


Как правило, файл базы данных является довольно «рыхлым». В нем много пус­
тых или не полностью заполненных ячеек. Поэтому возникает вполне разумная
и естественная идея: сжать базу данных, когда она не используется, чтобы БД за­
нимала меньший объем памяти. В активном состоянии базу данных можно раз­
вернуть до исходного размера. Ясно, что подобная операция должна выполняться
только автоматически, иначе она не имеет смысла. В Access 2000 автоматическая
распаковка базы данных производится без предварительной настройки лишь
в том случае, если БД была сжата перед закрытием.
<6A Другие возможности Access 2000

Чтобы автоматически сжать базу данных перед закрытием, произведите следу-


>щую настройку:
1. Находясь в любом из окон базы данных (или специально открыв ее - см.
рис. 3.1), выберите в строке меню Tools => Options.
2. В диалоговом окне Options (см. рис. 12.11) откройте вкладку General.
3. Установите флажок в окне Compact On Close (Сжать при закрытии).
4. Щелкните по кнопке ОК.
При выполнении описанных действий в многопользовательской среде необ-
адимо убедиться в том, что в этот момент с базой данных не работает никто
эугой.

онвертирование базы данных


инвертирование из Access 97 (95) в Access 2000
шустим, при открытии базы данных вы выбираете опцию Open an existing file
)ткрыть существующий файл). При этом вам нужен файл из уже существующей
1, которая разработана в какой-либо ранней редакции Access. Тогда система пред-
жит вам преобразовать базу данных в формат Access 2000 (см. рис. 12.14).

Con veil/Open Database

You have selected a database created in a previous version of Microsoft Access You
can convert o< open the database. Either action may take several minutes

<•" iconvert Database

Click this option if you're not sharing this database with users of a previous version.
You will not be able to use the database with previous versions This option is best if
you want to take ad vantage of the full power of Microsoft Access 2000

ft—Sj <~ Open Database

Click this option if you're sharing this database with users of a previous version of
Microsoft Access. You will still be able to use the database with pre /IOUS versions
In Microsoft Access 2000, you will be able to view all objects, but will not be able to
change the design of any object.

OK Cancel

Рис 12 14

Эпция Open Database (Открыть базу данных) предпочтительнее, если база


ных обслуживает нескольких пользователей, работающих в разных версиях,
да в редакции Access 2000 база данных будет функционировать в режиме Read
у (Только для чтения), и вы не сможете модифицировать ее объекты.
1аоборот, выбор опции Convert Database (Конвертировать базу данных) ре-
ендуется в том случае, если с этой БД вы будете работать только в версии
Конвертирование базы данных 265
Access 2000. Такое решение позволит вам в полной мере воспользоваться теми
преимуществами, которые предоставляет ноЕвейшая редакция системы.
При конвертировании Access предлагает взам принять новое имя базы данных
и указывает папку, в которой БД будет сохранена под этим именем (см. рис. 12.15).
Какое бы решение вы ни приняли, работа гэтой БД в среде предыдущей версии
будет невозможна. (Исходная БД под старым i именем может использоваться в пре­
дыдущей версии.) Процесс конвертации займет несколько минут, а затем на экра­
не появится окно преобразованной базы данншх (см. рис. 12.16).

Convert Database Into


Ш
Save in: J3 Мои документы 7 «~ а ® х ы и - тоо15.
Access ^J Old Excel Documents
My Pictut es 3 J Старые документы Excel
My Webs
Zmono
Гридин
Мои рисунки
Монография
МЧС-разбитие
Универсум
Файлы справок
V) dbl.mdb
ydo2.mdb
ydb3.mdb
Vjdb4.mdb
^JdbS.mdb

File name.
7 Save

t Save as type: Microsoft Access Databases (*.mdl(b)


*ЩЩЩЗЩЛ2Щ5^£^ 7 Cancel

Рис. 12 15

Конвертирование из Access 2000 m Access 97 (95)


Аналогичная проблема возникает и при обратном переходе, когда необходимо
работать в Access 97 или 95 с базой данных:, созданной в среде Access 2000.
Если вы вызовете такую БД непосредственно из Access 97 (95), система вы­
даст сообщение Unrecognized database format"' " (Неизвестный формат
базы данных ). Вместо многоточия указывается путь файла БД. Чтобы
использовать в ранних версиях системы базу ^данных, созданную в Access 2000,
надо преобразовать БД в соответствующий формат. Выберите в строке меню
Access 2000 опцию Tools и задайте такой ряд кюманд: Tools => Database Utilities
=> Convert Database =» To Prior Access Database version (Инструменты => Ути­
литы базы данных =* Разделитель базы данных :=* К предыдущей версии базы дан­
ных) - в последовательно раскрываемых меню. Когда все операторы выполнятся,
с преобразованной базой данных можно будет [работать в Access 97 (95).
66 Другие возможности Access 2000

Objects 0) Cre.^e roirn in Design view

«ш? 0] Create form by using wizard


• ЕЕ Менеджер

Ш Менеджер Subf orrn

EI Менеджер Subforml

Е! Назначение

^1 т Приборь i

3 т Страны

т Страны1

ш Страны?

т Типы Приборов

т Фирмы

т Фирмы Subform

т Фирмы 1

щ тВВт
т ФирмыЗ

т Экологические приборы

±1 I >|
Рис 12 16

*езюме
1. Потенциальные возможности Access 2000 несколько шире, чем те, которые
использованы и показаны в книге. Поэтому заключительная глава была по­
священа описанию этих нераскрытых моментов и особенностей.
2. Желательно, чтобы при первой инсталляции среда Access 2000 устанавли­
валась не отдельно, а в составе пакета Office 2000. При этом, чтобы не возни­
кало каких-либо непредвиденных затруднений, лучше устанавливать пакет
на базе версии Windows не ниже Windows 98.
3. Условное форматирование позволяет представлять в особом формате поля,
которые соответствуют определенным, заранее заданным критериям. По
функциям эта операция является разновидностью пользовательского запро­
са к базе данных. Более того, практически все критерии, применяемые в ус­
ловном форматировании, могут задаваться и в запросе.
4. В предыдущих версиях Office буфер обмена был один, и в каждый момент
времени с помощью буфера можно было работать только с одним файлом.
Резюме 267
В пакете Office 2000 таких буферов стало 12. Соответственно, пользователь
может обрабатывать одновременно до 12 файлов.
5. Access 2000 автоматически переносит изменение имени поля на все зависи­
мые от него объекты: запросы, формы, таблицы, отчеты, поля. Поэтому
пользователь может без дополнительной корректировки продолжать работу
с приложением.
6. Access 2000 предоставляет возможность разделить базу данных на две неза­
висимые части, точнее говоря, выделить из существующей БД, которая ос­
тается неизменной, еще одну, причем новая база данных будет включать
только таблицы. На их основе впоследствии можно наращивать информа­
цию и развивать новую БД.
7. Как правило, файл базы данных является довольно «рыхлым». В нем много
пустых или частично заполненных ячеек. Поэтому возникает необходимость
сжать базу данных, когда она не используется, чтобы БД занимала меньший
объем памяти. В активном же состоянии база данных разворачивается до ис­
ходного размера. Такое сжатие в Access 2000 может проводиться автомати­
чески.
8. Работа с БД, выполненной в одной из предыдущих версий Access, в среде
Access 2000 требует предварительного преобразования (конвертации). Эту
же операцию приходится выполнять и в случае обратного перехода.
Алфавитный указатель
Г
тоотчет 92, 103 Гиперссылки 84
тостраница 108, 122 Группировка 91, 95, 97
тоформа 56 Групповые операции 153
шерсанд 185
тумент 144 д
Двумерные файлы 46
Дизайн 14
зы данных 12 Динамические ссылки 106
БДЧЭС 125, 140 Документ 19
Контроль ЧС 125, 140 Драйвер ODBC 198
Контрольно-измерительные Дубликат 232
триборы 124 Дублирование 181
нки данных 9
блиографическая информация 18
3
блиотекаУВА 229 Закладка 86
анк 116 Запись 114
ianpoca 149 Запрос
сонструктора 156 SQL 147, 157
•траницы 116 к серверу 147
на добавление 188
на изменение 146
ладка на обновление 147
ivent 206 на объединенную выборку 173
-orms 221 на поиск повторяющихся записей 181
4асго 144 на присоединение 134, 147
Queries 148 на создание таблицы 174
ieports 221 на удаление 184
ables 150 перекрестный 193
эженные подзапрос 147
'тчеты 97 с дополнительными условиями 159
траницы доступа к данным 114 с использованием групповых
аблицы 50 операций 153, 154
юрмы 62 с параметрами 166
гшний ключ 47 со связями 169
ражение 223 управляющий 147
Алфавитный указатель 269
И Л
Иерархические Логические
дерево 51 выражения 15
структуры 50, 54 структура 23
Импорт 125
Инструкция
м
On Error 234 Макрокоманды 142
Resume 235 Макрооператоры 142
SQL 151, 157 Макрос 142
Маркер 117
К Мастер 14
запросов 181
Картографическая информация
кнопок 70
Ключевые слова 227
отчетов 95
INNER JOIN 167
печати связей 52
ON 167
подстановок 42
WHERE 158
преобразования поля 34
Код 31 страниц 109
Visual Basic 260 таблиц 28, 54, 86
записи 237 форм 58
первичный 30 Методы VBA 220
репликации 48 Модуль 100
Количество записей 164 класса 223
Командная кнопка 247
Конвертация 14,124 н
Конвертеры 123, 140 Набор ANSI 210
Конкатенация 185 Начальная форма 64, 90
Константа 223
внутренняя 224
О
символьная 224 Обработка
Конструктор ошибок 234
кнопок 72 событий 206, 217
макросов 214 Объекты 220
Окно
отчетов 92
базы данных 75
страниц 115
диалоговое 60
таблиц 32
конструктора 94
Контекстное меню 67
мастера 70
Копии таблиц 263
модуля VBА 221
Корневая часть слова 159 редактирования связей 48
Критерии Операнд 167
выбора СУБД 14 Операторы 143
выражения 256 Операция замены/вставки 132
значения поля 256 Описатели 225
270 Access 2000

Отношение «одип-к-одному» 31 реорганизации и анализа 12


Отчет 95 таблицы 28, 54, 155
фильтра 75
п формы 130
Панель инструментов 66 Реквизит 18
Первичный код 30 значение 18
Переключатель 43 имя 18
Переменные признак 18
неявные 223 Репликация 33, 34
область действия 223
явные 223 С
Подстановки 42
Свертка информации 51
Подчиненная форма/отчет 92
Сводная таблица 119, 122
Показатель 18
Свойства объектов 220
Получение фокуса 210
Format 35, 54
Поля-дескрипторы 23
Связанные поля 48
Построитель
каскадное обновление 49
выражений 232
макросов 232 каскадное удаление 49
программ 143 Связи 47
Потеря фокуса 208 Сервер 118
Префикс 127 Словарные файлы 139
Программа VBA 221 Событие 205
Программная среда 13 Сортировка записей 134
Просмотр объектов 229 Списки
Процедуры аварий 160
Function 227 аргументов 227
Sub 226 полей 119
VBA 145 Средства управления программой 230
инструкция 226 Статическая копия отчета 99, 104
описание 226 Столбец подстановки 43
Страница доступа к данным
Р анализ данных 107
Расширение ввод данных 107
.dat 125 групповая 121
.dbf 125 диалоговый отчет 107
.doc 84 Структура
.map 82 двухуровневая 51
.mdb 105 трехуровневая 51
.snp 99, 104 Структуризация данных 19
Режим СУБД 127, 131, 140
SQL 158
диалога 12
Т
конструктора страницы 108, 122 Таблицы
конструктора форм 61 базовая 56
корректировки 12 дочерняя 48
начальной загрузки 12 родительская 48
Алфавитный указатель 271
Твердая копия 55 С
Тип объединения 49
CD-ROM 252
Тип связи 49
Clarion 3.0 12
Типы данных 32
Customize 252
Autonumber 33
Currency 33 D
Data/Time 33
Hyperlink 34 Data Access Page Toolbox 106, 122
Lookup Wizard 34 Data type 32
Memo-поля 33 dBase3 125
Number 33 Description 32
Text 33 E
Yes/No 34
Excel 34, 82, 83, 121
У
F
Условия отбора 184
Условные операторы 230 Field name 32
Уточнение 22 FoxPro 2.5 12
Ф H
Файлы HTML 106
данных 15
источник 126 M
Фактографическая информация 18 Microsoft Office 82, 83
Фильтр 232 MS Query 199
Флажок 112
Фокус 206 N
Форматы данных 14, 123, 140 Null 78
Формы 55, 90
Функции 155, 225 О
встроенные 144
ODBC 198
специализированные 144
OLE 34
ч s
ЧС 84, 87, 124, 174
Setup.exe 252
э SQL 141
Экспорт страницы доступа V
к данным 119
Элемент VBA 219
данных 19, 69, 120, 208, 210
W
управления активный 208
Web
Я браузер 118
Языки программирования 141, 145 сервер 118

Вам также может понравиться