access 2000. Проектирование баз данных-ocr
TRANSCRIPT
Вием П. С
(
ля
Дубнов П. Ю.
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
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги.
ISBN 5-89818-091-5 © Дубнов П. Ю., 2000 ©ДМК, 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 1 8 Передача страницы доступа к данным по электронной почте 118 Экспорт страницы доступа к данным в существующую базу данных 119 Список полей 1 19 Сводная таблица 119 Создание сводной таблицы для страницы доступа к данным 120
Резюме 121
Глава VI 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
Глава VI 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 Программирование с помощью процедур VBA 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.
Режимы функционирования банка данных в производственных условиях Как правило, предусматриваются следующие режимы функционирования банка данных:
• режим начальной загрузки, в котором исходная информация, содержащаяся в банке данных, вводится в соответствующие структуры БД;
• режим корректировки, в котором осуществляется обновление, добавление и удаление информации, находящейся в банке данных;
1 2 Постановка проблемы
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
1
оо
1
1
сю
со
со
оо
оо
со
оо
2 оо
X
1
1
1
оо
оо
оо
оо
оо
оо
оо
3 оо
оо
X
оо
оо
оо
оо
оо
оо
со
со
со
4
оо
1
1
X
1
оо
со
со
со
оо
оо
оо
5 со
1
1
1
X
со
со
оо
со
оо
оо
оо
6 со
1
1
1
1
X
оо
оо
оо
со
оо
оо
7
со
X
оо
8
со
X
оо
9
оо
X
10 оо
со
оо
оо
со
1
1
со
оо
X
оо
оо
11 оо
оо
со
оо
оо
1
]
1
1
оо
X
оо
12 со
оо
оо
оо
оо
1
1
1
1
оо
оо
X
В этой таблице символы °о и 1 обозначают соответственно стороны «многие» и «один» в отношениях между реквизитами.
Файлы и связи между ними Из табл. 2.1 видно: чтобы формировать файлы, следует сгруппировать в них поля, представляющие реквизиты-признаки, находящиеся друг с другом, как сказано
Проектирование логической структуры базы данных 25
выше, в отношении «один-к-одному». Таким образом, будут созданы следующие файлы:
Q Страны (содержит поле Название страны); • Приборы (содержит поля Номер модели, Категория, Год выпуска, Харак
теристика, Номер по каталогу, Цена, Вес); • Фирмы (содержит поля Название фирмы, Адрес фирмы, Адрес филиала); • Менеджер (содержит поле Данные о менеджере); • Назначение (содержит поле Назначение прибора); • Типы приборов (содержит поле Название прибора). Мы перечислили здесь основные - так сказать, «титульные» - поля, состав
ляющие каркас конкретной таблицы. В нее могут также входить вспомогательные поля: Примечания, Адрес и др. Соединив эти файлы связями типа «один-ко-многим», мы получим логическую структуру базы данных, как показано на рис. 2.1. О практической реализации таких связей речь пойдет в конце следующей главы.
В Microsoft Access
D G£ ffij
X © J- ( 3 -• Г Relationships | Р | х | Л
Примемзни Примечание
*А -1
Год по катоп | »!арактери1 Цена1,$
TI
Код фирмы Фамилия Имя Адрес
Ы
>п_Примеч.: _Generahon GUID
5 т$>$тя%
>п_Примеч= ^ Generation —-• GUID zl
Кодф>фны _^ Название фи| Код страны Адрес — Адрес 2 •*•[
ьеп_Припечс 5_GeriPrahon 5_GUID zi
•ё
i Рис 2 1
26 Предпроектная структуризация информации
Резюме 1. Безусловный прогресс, достигнутый в развитии программных средсл и
СУБД и расширении их функциональных возможностей, не устранил проблему обоснованности выбора структур баз данных - от продуманности этих структур во многом зависит эффективность работы с БД.
2. Основным элементом фактографической информации является показатель Он, в свою очередь, состоит из множества реквизитов-признаков и единственного реквизита-основания.
3. Для того чтобы формировать по единым правилам разнообразные пользовательские запросы к БД и получать на них ответы, перед проектированием конкретных баз данных необходимо провести структуризацию информации
4. В главе предлагается и иллюстрируется на конкретном примере технология такой структуризации и - па се основе - последующего проектирования логической структуры БД.
Глава Создание таблиц
новой базы данных
• Варианты создания таблиц • Формирование таблицы в режиме ввода • Создание таблицы в режиме конструктора G Создание и использование полей подстановки • Организация связей между таблицами
Как уже было сказано в главе 2, разработка новой базы данных Контрольно-измерительные приборы производится в программной среде Access 2000.
Формирование БД в Access состоит из ряда последовательных этапов, описываемых ниже. Первый этап этого процесса - создание таблиц. Таблицы в Access являются теми первичными, исходными файлами, на основе которых в дальнейшем строится все здание базы данных. Access 2000, как и предыдущие версии, предоставляет пользователю несколько разных вариантов построения таблиц.
Порядок создания всех таблиц одинаков и не зависит от их названия и конкретного содержания. Мы рассмотрим этот процесс на примере таблицы Страны.
Варианты создания таблиц Формирование таблицы начинается с того, что вы открываете окно базы данных н в нем выбираете пункт Tables (Таблицы) раздела Objects (Объекты), как показано на рис. 3.1.
28 Создание таблиц новой базы данных
Н Microsofl Access
File Edii" View Insert Tools Window hHp
мз db5 : Database
Щореп ^Des ign ДМе>
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
Create a new table in Datasheet view
Design View Table Wizard Import Table Link Table
OK
1Ш
Cancel
Рис 3 2
формирование таблицы в режиме ввода 29
Последние два варианта создания таблиц - импорт таблиц и связь с таблица-.„ _ рассматриваются в том разделе главы 7, который посвящен объединению
разнородных баз данных.
формирование таблицы в режиме ввода Войти в этот режим можно двумя способами: либо выберите пункт Datasheet View (Режим ввода) в окне New Table (см. рис. 3.2) и щелкните по кнопке ОК, in6o выберите опцию Create a table by entering data (Создать таблицу путем ввода данных) в окне базы данных (см. рис 3 1). В результате на экране появится таблица, готовая к вводу информации (см рис. 3.3).
Ы Miciotoil Access
FIIP Edit View Insert Format Record:. Tools Window Help
Щ ] • * • * £ j
• Table! : Table •Hi FlQldl Flold2 Fleld3 Flold4 FloldS F *
Record: j < | *-\ [ 1 • I • ' ! • * ! of 21
nr
3
Рис 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 - | i 9 |
! x)
* J
Код страны |Страна| |, 1 Россия 2 США 3 Германия
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
File Edit View Insert Fotrncit Records Tools Window
Help
1ЁШ
ТаЫеЗ: Table ID Код
1 2 3
(AutoNurnber)
Record: к I <
Страна М ссия В
I рмания •
1 Россия 2 США 3 Германия
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 • ч - ' © * File Edit Vie<4 Insert Tools Wmdo"' Help
ш 9 w-S = * §» Й?
Table2: Table _ П X Field Name Data T> pe Description
zl Field Properties
General Lookup
Рис 3 7
В разделе Field Name (Имя поля) следует указать имена полей - те самые, которые в предыдущем разделе вводились в заголовки столбцов таблицы. Ситуация с первичным кодом совершенно аналогична.
Чтобы начать работу с разделом Data type (Тип данных), надо щелкнуть мышью в его пределах. Как только это произойдет, в его правой части возникнет стрелка прокрутки. Щелкните по ней, и появится список типов данных, которЫ1' поддерживаются в Access 2000 (см. рис. 3.8). Характеристика типов данных приводится в следующем разделе этой главы.
Сведения о типах данных, полей и их свойствах являются в Access 2000 базовы ми и непосредственно используются при создании таблицы в режиме конструктора
Типы данных и их свойства Типы данных, поддерживаемые системой Access 2000 (см. их перечень на рис. 3 8) приведены ниже вместе со своими основными характеристиками:
Создание таблицы в режиме конструктора 33
Ш Microsoft Access
I File Edit View Insert Tools Window Help
Т а Ы е З : Table
Field Name
Text Me-mo Number
Field
General Lookip
ui renc't AutoNumber \ es/No OLE Object H perlmk Loolup Wizard
ШЕ Data Type I Description I -.
zi
Рис 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 (Связывание и внедрение объектов) - спецификация фирмы Microsoft, устанавливающая правила взаимодействия приложений, которые участвуют в подготовке и редактировании составных документов. 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
a s k (см. рИ С 3.10). Начиная со следующей вводимой записи и до тех пор, пока 2 '
36 Создоние таблиц новой базы данны.
Н Microsoft Access
\П - | @ шш
* 4a 6* йг File Edit View Insert Tools Window Help
Table2: Table ME Field Name I Data Type [
ID Код страны Страна
AutuNumber Text Text
Oescnphon
zl
Geneial Lookup |
Field Size Form at .^^ш Input Mask Ш Caption ^ H Default Value ^ H Validation Rule ЩЩ Validation Text Required Allow Zero Length Indexed Unicode Compression
50
V es Ho
Щ
^1
Рис 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 Field Name
9 ID • Код страны
General j Looljjp
Data Type AutoNumt'F
Text
Field Propei ties
Description I -
j j
Field Size Foi ri iat Input Mask Caption Detault Value Validation Rule Validation Text Required Allow Zero Length Indexed Unicode Compression
50
01 >L
1
Yes No ves (No Duplicates) Ves »«*;»*» • г , - з . -
"™J
Рис. 3.10
1 В Miciosoft Access H B В I
^ - У # El ^ * l i lr ' -o >„> File Edit Vie'" Insert Format Records Tools
^mdovo Help
• Tablel : Table ШЩ
• Re
i j
ID | Код страны | Страна 1 1 Россия 2 2 США 3 3 Германия
12 7 г J Индия 13 5кЕ Пакистан
(AutoNumber) _ |_ cord и | < | | 6 • | м | > Ч of 6
1 •!
Рис. 31 1
^Ыски ввода, введите данные в поле Try It (Проверка). Значения свойства Input ask подробно рассматривались выше. Здесь мы еще раз кратко перечислим их: J General Date (Общий формат даты); Q Long Date (Длинный формат даты);
38 Создание таблиц новой базы данных
Microsoft Access
] \ Data i n t e g r i t y ru les h a v e b e e n changed ; ex i s t i ng d a t a m a y no t be va l id for t h e new ru les .
—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 Mask Wizard
Which input mask matches how you want data to look?
To see nov a selected mask worts, use the Tt / I t box.
To change the Input Mask list, click the Edit List button.
Input Mask: Data Look.
Try It: I
Edit List Cancel Next :
Рис 3.13
Password Short Time Medium Time Long Time Short Date Medium t'ate
о is:,:.: 0.13333 03 12 00 09/27/1069 27-сен-6<*
—
•d
Finish
Q Medium Date (Средний формат даты); • Short Date (Короткий формат даты); • Long Time (Длинный формат времени); Q Medium Time (Средний формат времени); • Short Time (Короткий формат времени). Чтобы изменить маску ввода, щелкните по кнопке Edit List (Изменить спи
сок). Теперь выберите в открывшемся поле какую-либо позицию, например Medium 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 Ь и й с л у ц
Input Mask' Data Look- | Я §
Password * * * * * * * Short Tin i t 0 13333 Medium Time 0.13333 Long Time 03.12.00 Short Date 09/27/1969 Medium Date 27-сен-69
Т. It |
Edit List | Cancel |
-Next >
l i t
• * •
M
d
__ 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 Access
! FIIP Edit Vjew In'ert Fyirrat Pei.rrd-. T o d ' V_rdu
Hdp
Ш\
| • Tab le l : Table
•
ID | К о д с т р а н ы
1 1 2 2 33
19 3456 20 3678
(Au toNumber )
• С Ш Е | С т р а н а
Р о с с и я
США Г е р м а н и я
Ф р а н ц и я
Италия
—
"
ч Рис 3 16
И Microsoft Access
Fil<- Ed f" 'ue* Irv^rt Tools Windo/- Help
InTxl ч v §«=§» »
Table l : Table ГЛпГ Field Name Ыа Type De<oipti jn
1С ^ гд страны
• IСтрана
H
A jtoNumber Text
Field Properties ZJ
Field DIZP
Forn at Input Г Ь 1 Caption Default Value Validation PUIP
Validation Text Requii ed Alio Zpro Length Indexed Unicode Compression
r0
Yes I I ] •i es (Mo Duplicates) Ye;
Рис 3 17
Создание и использование полей подстановки 41
шш Ш Microsoft Access
Н* Edt View Insert Fk mJr Ppn_r:k Tr._l<; _r&v-. Hrlp
Table! : Table Щ ] •
*
ID | Код страны | Страна (l 1 РОССИЯ 2 2 США 3 3 ГЕРМАНИЯ
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 [Цпш 3 l \
Field Name Data T/pe | Description ID Код страны Страна Фирмы
General | Lookup |
Field Size Format Input Mask Caption Default Value Validation Rule Validation Text Required Allow Zero Length Indexed Unicode Compiession
AutoIJumber Text Text
hel<
50
Text Text Memo Number Date/Time Currency AutoNumber Yes/No OLE Object Hyperlink
Ш
No No Mo 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 ant 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
Cancel
Г Ouet к С E,urh
< Вас* Next >
Lookup Wizard
"3 Available Fields
Рис. 3.21
Which fields contain the values you want included in your lookup column? The fields you select become columns in your lool up column,
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)
Название фирмы Alltech НефтьТаз-Наука НПП "ЭКОНИКС" 5 1 r i US Systems _ КОХЕЛП ИНСТРУМЕНТС Sarlin Automation AMEL In_.tr un мпГ"
J
J -
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
II • Table2 : Table
IK-
ID | Код страны 1 1 2 2 3 3 4 3456 5 3678
(AutoNumber)
Страна | РОССИЯ США ГЕРМАНИЯ ФРАНЦИЯ ИТАЛИЯ
• ^ В ^ ^ Н Н 1 М - 1 п 1 х |
• H H H H . I n l x l Фирмы
'1 -Фирма не указана .1 YSI incorporated — Wilks Enterprise, Inc FCI Environmental • Randox Laboratories, Ltd ОАО "Цвет" Cole-Parmer International Milton Roy Company
^_^
d
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
Нз начете Приборы, представленные на рынке2 Страны Типы приборов Фирмы
из Add
Close
Рис 3 25
Итак, вы последовательно добавляли все таблицы, то есть помечали их в окне и затем щелкали по клавише Add (Добавить). Теперь закройте окно Show Table с помощью кнопки Close (Закрыть). В результате появится диалоговое окно Relationships (Связи), представленное на рис. 3.26. Теперь в этом окне вы должны организовать связи между таблицами. Связи устанавливаются через отдельные, определяемые пользователем поля. Для связывания этих полей надо выбрать поле в одной таблице и перетащить его, наложив на соответствующее поле в другой таблице.
Ооычно связывают ключевое поле родительской таблицы {внешний ключ) с соответствующим ему полем в другой, дочерней таблице. Оно часто имеет то же имя, П о и первое, но в общем случае это не обязательно. Зато строго обязательными
явдяются следующие условия: ^ в одной или в обеих таблицах должно быть поле, принимающее уникальные
(не имеющее дублей) значения во всех записях;
48 Создание таблиц новой базы данных
• связываемые поля должны иметь одинаковые типы данных. Однако из этого правила есть два исключения: - поле счетчика разрешается связывать с числовым полем, если в последнем
в свойстве FieldSize (Размер поля) задано значение Long Integer (Длинное целое);
- поле счетчика разрешается связывать с числовым полем, если для обоцч полей в свойстве FieldSize (Размер поля) задано значение Replication ID (Код репликации);
• связываемые поля числового типа должны иметь одинаковые значения свойства FieldSize.
Ы Microsoft Access
D & Я Relationships
Менеджер Номер Код фирмы Фамилия Имя Адрес
Фирмы Кодф>ф№1 . 1 Названиефпр Код страны Адрес Адрес 2 j j
kl
ШЕ1 «г, , -rS $~ -
6* D-0
Л па огн | v ^ гри • п 52! А Ю
Назначение 'Зеп_Примеч= 5 Generation s GUIO ;_Lmeage Код
Ll .
sd
Приборы , ... Gen_XapafTef_lj с. Generation —1 s GUID 5_Lmeage Кед zl
Страны
s_Generation GUID Line age
Код _iJ
РИС 3.26
Для начала свяжите поле Код в таблице Страны с полем Код страны в таблица Фирмы. Для этого надо щелкнуть левой кнопкой мыши по одному из связываемых полей) и, не отпуская ее, перетащить мышь на другое поле. На экране появляется (см. рис. 3.27) диалоговое окно Edit Relationships (Редактирование связей).
В левой части этого окна указано связываемое поле родительской таблицы. а в правой - связываемое поле дочерней таблицы. Если надо изменить одно из этих полей, то можно щелкнуть в нем по стрелке прокрутки, а затем выбрать желаемое значение. Установив флажок Enforce Referential Integrity (Обеспечение целостности данных), вы зададите условие: ни в одной из связанных таблиц нс
Орган изация связей между таблицами 49
Edit Relationships 1Ш Tablc/Ouerv.
1 Код
Related Table/Query.
J" J j j Код страны j i |
J (7 Enforce Referential IntegnC/
| 7 Cascade Update Related Fields
Г Cascade Defere pe l t ed P eujrds
Relationship Tvpe- One To Many
create
]om Type
Create New
Рис 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
•
+
Re
<l
Код |Gen_rif|5_Gone|s_GUl|s_Lll| Страна | При ]Л 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)
cord н | . | f 1 . | .i | . . | of 10 < I
| . | D | X | 119ЧЭНИЯ
J _d 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
Менеджер Назначение Приборы, представ лунные на ptiHi e2 Страны
|Типы приборов
[Link Child Fields
{Link Master Fields
Код страны n ш "3
[Ш
Cancel
Рис 3 30
Ы Microsoft Access
М - К DO •
Si
EMx] =s-^- м
^ r t H • Страны: Table
• |Gen_np|s_Gene|s_GUl|s_Lli| Код
t1 1 1C32} data 01 1 1 1C32} data 02 1 1 1C32} data 03 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)
H H H H H J n M ^ l | Страна | Примечания Страна не указана United Kingdom USA Германия Италия Россия США Финляндия Франция Швейцария
,.г) Рис 3 31
Аналогично, если воспользоваться стрелками прокрутки в указателях связан ных полей (см. рис 3 30) и ввести не одно, а больше полей, можно показать И'1
любом уровне не одну, а, соответственно, больше таблиц
Мастер печати связей В предыдущих версиях Access невозможно распечатать схемы связей между ч- ' лицами, что довольно неудобно. В Access 2000 такая опция предусмотрена
Орга низация связей между таблицами 53
цЕВЗ
т
Стра
1
+
н е й ? А чэ р -' > E.-S-
ri np|s_Gene|s_GUl|s_Lli| Код | Страна 1 1 1С22} data 01 Ст|.мна НР yta" 1 1 1С32} data 02 United kingdom 1 1 1C32} data 03 ИГЛ
| Код фмриы Название фп Адрес | * 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 ОС Россия
—\ 'A
| Примечания ана
Адрес 2 | Пр
rmm
ииечания |
— — т — i — —
= f-i
1»
xl Л1 »
J
Рис 3 32
H Microsoft Access ГЛ5ТЗП D E? У
Ei 5> vc« • Л '
Si (3.
©-a Страны: Table ] D | X
|r,en_np|s_Gene|s_GUl|s_Lli| Код Страна Примечания | 1 1C32} data 01 1 1C32} data 02 1 1C32} data 03
Страна не указана United Kingdom USA
Код фириы | Название фи| Адрес Адрес 2 | Примечания YSI mcoiporate i el lu* 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
This weard aijtnrnatn-allv creates a columnar form
Design View Form Wizard
AutoForm Tabular AutoForm Datasheet Chart Wizard 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
D I S H # a ? • hi- e l a y
| Ё Фирмы •
и*
Кпд фирмы
Название Фирмы
Код страны
Адрес
Адрес 2
Примечания
D5 Randoi-. Labot atones Ltd
02
Diamond Road Crunilin Co Fax 44 1843 422413
Гзлкии В А Тел 265 44 05
cord к | « | | 5 • 1 »i |>»| 0< 26
d__.
^ • H H H J n M
• • • • M - h M
Antrim В T 23 4Q r"
I •
Рис 4 2
58 Создание форм новой базы данных
Ы Microsoft Access • 0 , '
ПШ2
*> £i 51 ^ 'a IfBj Фирмы 13 ши
Код фирмы
Название фирмы
Код страны
Адрес
Адрес 2
Примечания
07
Iole-Parmer International
7425 North Oak Park Avenue, Niles, Illinoif, 650714 Fax (708)549 1700
•
+
Номер | Фамилия § Джонс 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 Фирмы
Available Fields.
Я Название фирмы l- пд страны Адрес Адрес 2 Примечания
~3 Selected Fields
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
- Е
1 = ~.—-../ „ ^
Tables/Queries
jTdble Менеджер
Available Fields
Which fields do vou want on your Рогт?
JU can choose rrom more than one table or query
Selected F.eld,
Cartel
Ha-EdHHtr ф'ИрМЫ
Код страны ct-ирмы Адрес Номер Менеджер Код фирмы Фамилия
J
Имя |
WMzi
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 Менеджер
Фириы_Код фирмь!, Кивание фирмы, Код страны, Фирмы_Адрес_
| Номер, Менедч. ер_Код фирмы,
(Фамилия, Имя, Менеджер_Адрес
:
<" Fcrmwith u t t j rmi i <• L i r l c J f j r n
Cancel < Bark Next > Finrh
Рис 4 7
Form Wizard
А Щ^ J*
X f i w J I
Jvf*
/
Л
if -Я^Г;
1
. 'Л hat title* do you want for your forms?
Form |?исмьС
5ubform ||1енеджер Sutfotml
That's all the information the wizard needs to create \ our 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
Re
Номер | §07 0 07 0 07
cord .«| <|l
Код фирмы | Фамилия Джонс Флеминг
1 » | и | > * | of 2 ±U » Recoid ч I < I Г 7 > I > i | > » | of 2e
Рис 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 28
шш
Ш МенедаерЗ
Номер Код фирмы
•
Re
1 2||07
ooid ' « I ' l l 1 •
Фамилия Имя Адрес
ЦДжонс | [Джеймс |
i и (•*! of 2 CFiltetedl «I
- | D | X |
-
•rl
I -Г zl
Рис 4 10
Ы Microsoft Access
о у a a v ы- в i u :
ШШ в»
A | Z| 7 / - b
В Менеджер! •
He
Фирмы_Код фирм1
На юание фирмы
Код страны
Фирмы_Адрес
Номер
Менеджер_Код фи
Фамилия
Имя
Менеджер_Адрес
00,0 _ „ | . J f ,
02 |
YSI incorporated |
03 |
Yellow Spring Ohio 45387 USA Fax 513 767 9353
э| 02 |
Смит |
Джон |
• 1 и |»» | of 4
• • H J n l x l
\
т
Рис 4 11
64 Создание форм новой базы данных
Итак, вы убедились, что по сравнению с автоформой мастер форм предоставт ет пользователю значительно больше возможностей и позволяет быстро созыва разнообразные формы. Но у мастера форм есть ограничения. Так, не допускает изменять размеры полей или их дизайн; добавлять в формы новые сведения, e c j они не связаны с записями в таблицах или не содержатся в запросах; вводить в ф0п мы диаграммы, картографическую информацию и т.д.
Кроме того, мастер форм не позволяет вносить в формы элементы программ,. рования (или наоборот - включать формы в состав программ). Зато все вышепе речисленное позволяет осуществить конструктор форм. Настало время подробно рассмотреть возможности его использования для тщательного проектирования и изменения форм. Все аспекты, связанные с программированием, будут исследованы в главах 8-11.
Работа в режиме конструктора Использовать конструктор форм целесообразно для создания форм, которые не просто содержат комбинацию полей из разных таблиц, но включают какие-то уникальные элементы, причем не обязательно связанные напрямую с исходными полями. Например, в режиме конструктора можно разработать начальную форму БД Начальная форма в базе данных играет роль одновременно титульного листа и оглавления в книге. Открыв эту форму и, следовательно, саму базу данных, пользова тель может затем выйти из начальной формы в любую необходимую точку БД Конечно, наличие такой формы ни в коей мере не является обязательным - в кон це концов, любой объект БД можно активизировать и из окна базы данных, и от этого она хуже работать не станет. И все-таки начальная форма, которую вы создали по своему усмотрению, - это «собственное лицо» вашей базы данных, п работать с ней будет приятнее.
Итак, создадим с помощью конструктора начальную форму для базы данны\ Контрольно-измерительные приборы. Эта форма должна будет носить то же имя что и БД, и немедленно открываться при открытии самой базы данных. Кро:* того, вы должны иметь возможность выполнять из начальной формы в режгог просмотра любую опцию, входящую в состав базы данных. Пусть это будут.
О Страны; а Фирмы; • Менеджер, • Типы приборов; • Назначение; Q Приборы; а Закрытие и выход из базы данных. Разумеется, начальная форма может выполнять и целый ряд других функции
которые здесь не рассматриваются. Создание форм Фирмы и Менеджер подробно описано в предыдущих разДе
лах. Процесс построения остальных форм не рассматривается специально: в ос новном он аналогичен изученному выше, и пользователь самостоятельно освоН его за несколько минут.
Робота в режиме конструктора 65
3 Microsoft Access D i u n- н!#а
m -'J - ! i'L - й - ^ с? =s s- - ?j is >']"' - "ft -"" ^ Й' © а - ?i
Forml: Form EM: • Detail
..Г1
Рис 4 /2
Процесс создания начальной формы начните с того, что откройте окно конструктора форм Для этого в разделе Objects (Объекты) окна базы данных надо щелк-пиь по клавише щ Form*! (см. рис. 4.11), а затем выполнить одно из перечисленных пи-ке действий:
3 щелкнуть по клавише ^tjew | (см. рис. 4.13). Когда на экране появится окно New Form (Новая форма), показанное на рис. 4.1, следует выбрать опцию Design View (Режим конструктора);
3 Щелкнуть по клавише М, Design | (см. рис. 4.12); 3 выбрать позицию Create form in Design View (Создать
форму в режиме конструктора). в результате любого из перечисленных шагов на экране воз-
"Mici пустая форма конструктора (см. рис. 4.12) с подзаголов-м Uetail (Область данных). Рядом с этой пустой формой
1 гся панель инструментов - окно Toolbox (см. рис. 4.13). поя сь с°браны кнопки, с помощью которых в режиме конструк-
, издаются всевозможные формы. Если установить на лю-Км°пке указатель мыши, появится подсказка с ее именем. Рнмер, на рис. 4.13 такой подсказкой является Line (Ли-
1*1Д!Ш_1
- °S
II» Toolbox
• | x |
•1 •II
1- \ Аа аЫ • d & Ш Ш - |
J i \ ' n •J£ Line [
Рис 4 13
№ л 4 1 приведены необходимые пояснения к каждой из кнопок на панели 'СтРУМентов
- 1 1 9
66 Создание форм новой базы данн Ых
Таблица 4.1
Кнопка Название Функция
Выбор объектов Выделяет объекты перед работой с ними
Мастера Включает и отключает мастеров
Надпись Создает поля для описания элемента управления
Поле Создает текстовое поле для ввода, редактирования или просмотра
*1
•I Группа переключателей Создает группу связанных флажков, переключателей. Одновремен может быть выбран лишь один элемент в группе
Создает кнопку переключателя
Запускает макрос или выполняет назначенную ей команду Access
Позволяет вставить подчиненную форму или отчет
Создает поле со списком, позволяющее выбирать значение из списка или вводить его в поле в верхней части списка
Добавляет прямоугольник
Включает в страницу рисунок
Создает окно со списком, предназначенное для выбора значения из списка
Создает флажок
Создает рамку, используемую для отображения свободного объект
Вставляет рамку для присоединенного объекта, объекта, связанное! с данными таблицы и изменяющегося при переходе к новой записи
Вставка разрыва страницы
Создает формы с вложенными страницами наподобие окна базы данных
Добавляет линию
Выводит на экран компоненты ActiveX и другие элементы управлени
ш\ У 5EJ щ\
ш р ]
fbj Е|
fflj r^i|
fPJ
Ы ш
Переключатель
Кнопка
Подчиненная форма/отчет
Поле со списком
Прямоугольник
Рисунок
Список
Флажок
Свободная рамка объекта
Присоединенная рамка объекта
Разрыв страницы
Набор вкладок
Линия
Дополнительные элементы
Заголовок формы На следующем этапе работы введите область заголовка формы. Для этого в оо.та-сти данных Detail щелкните правой кнопкой и в появившемся контекстном меню выберите позицию Form Header/Footer (Заголовок/Основание формы). Теперь в пустой форме появится новая область - область заголовка Form Header. Ее раз меры можно уменьшить или увеличить простым перетаскиванием границ. (kcT
еще один способ, о котором будет рассказано чуть позже.) Формирование заголовка начните с того, что на панели инструментов (см. рис. J
щелкните по кнопке АЛ И переведите указатель мыши (вместе с появившп^ изображением кнопки) в область заголовка. Затем, щелкнув левой кнопкой мы"1
работа в режиме конструктора 67
трио vi'ite прямоугольный контур нужного размера. Когда вы отпустите кнопку,
пря оугольник по умолчанию станет белым. Теперь в это поле введите имя базы
" ^ iY - Контрольно-измерительные приборы. Записать текст можно любым Д Ьтом, установленным по умолчанию, - наверняка вы все равно станете в даль
нейшем вносить правки (об этом ниже). На данном этапе форма будет выглядеть как показано на рис. 4.14. Теперь щелкните по контуру заголовочного ноля
oii кнопкой мыши. Линия контура видоизменится, а фоновый цвет заголовоч-го поля сравняется с цветом области заголовка. Если затем щелкнуть правой
•ппкоп мыши в поле заголовка, появится контекстное меню, в котором сле-т вЫбрать опцию Properties (Свойства). Перед вами откроется таблица
свойств заголовочного поля (см. рис. 4.15). Label (Метка) - имя кнопки Аа^ в Access 2000, поэтому все поля, созданные с ее помощью, будут первоначально иметь что название, пока вы не переименуете их. Порядковый номер возле имени обозначает просто количество обращений Access 2000 к этой кнопке, и, как уже говорилось в постраничных примечаниях, не имеет принципиального значения. В таблице свойств вы можете задать и скорректировать все параметры, определяющие содержание и вид таблицы, в том числе:
и Width (Ширина) и Height (Высота) поля заголовка. Вы задавали их вручную, рисуя прямоугольник;
• Border Width (Ширина рамки); Q Back Color (Фоновый цвет заголовочного поля), Fore Color (Цвет надписи
в заголовочном поле), Border Color (Цвет рамки заголовочного поля);
Ы Microsoft Access
Sl- У
l - |n lx|
& Я d? В j - -|EForm2: Form ВЕЭЕЗ
•
1 i
г
J
i
2
' i • 1 • i • 2 • i • ; i • 4 I • 6 • I • 6 • I • 7 i • '=: • i - 9 - • • 1 С —
• Form Header
• Detc
Контр 1
опьмо-игмерительные приборы
1 1 1 1 1 1 1 1 il
- 1 • z}
-J
3- РИС. 4.14
68 Создание форм новой базы данных
а Font Type (Тип шрифта) и Font Size (Размер шрифта); • Тор (Отступ заголовочного поля от верхней рамки области заголов
и т.д. Задаваемые значения либо напрямую вводятся в соответствующее поле л
ка)
вы сначала щелкаете в нем мышью, а затем используете появившуюся клав Ибо
ИЩу
Г...| и выбираете нужное значение из списка. Например, параметры заголовочного поля, представленного на рис. 4.14, были
заданы по умолчанию. А для поля заголовка, отображенного на рис. 4.15, прово. дилась следующая настройка (окно настройки см. на рис. 4.16):
Ы Label: Label6 Format | Data | Event
i Top : Width
, Back Style
i Special Effect . .
1 Border Width Fore Color
Other | А,, | , (Ц ; . 0,сЛ2ст . 7,937cm
. . l,678crn Transpaient
. 16~77:i5 Fl i t
. . Transparent . 0
Hairline . 0
. . T ahem a
| x j
. ..... A
! J I
zl
Рис 4 15
J J
У Microsoft Access l-l°M D 0 ; Ш a -. X 4 n © <7 «"' - oa - , og f~ • >>,
m- a I B s i =ь a,<? ^ я cf © j- ?, E Form2 : Form 1
1 7 i 1 '
2
i 1
2
l l .
=J°1*J i l i 2 i 3 i 4 - i f i F i 7 i - 8 i 3 i - £ j
• Form Header
* D e t <
XJ.J I- 1 J ^ Контрольно-измерительнУЯИ
приборы ЩЯк
ill
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
s an,pi*
Ш
What action do you want to happen when the buttun is pressed'
Different actions are available for each cateqor / .
Categories Actions
Record Navgahon Pecord Operations Form Operations Peport Operations Application Miscellaneous
Cancel
Appl, Form Filter C/rjse Form Edit Form Filter
Open Page Print a Form Print Current Form Pefresh Form Data
Next >
Рис 4 17
оздание кнопок с помощью мастера 10 Ь;1рпе''СЧ1и"РИСТуПИТЬ К Р а б о т е ' м а с т е Р поинтересуется: What action do you want
t n 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 Operations (Операции с формами), а в правом - команду 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
Sample
О
Do you want the button to find specific informahon to display in the form7
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
Sample Do i ou want" text or a picture cm the button"1
If /ou choose Text, you can t ,pe the text to display. If you choose Picture, you can click Erowse to find a picture to display
I (•' Text. [Страны
, - , „ . . Ц1ДШ1Ш.ЦЛ
г
Cancel < Back Next > Finish
Рис 4 20
феделяется уже внешнее оформление кнопки. На кнопку можно поместить над-сь и л н рисунок. Если вы предпочитаете текст, то введите его в поле Text. Если
dM "°-чьи]е нравится картинка, сначала щелкните по кнопке Browse (Просмотр"), Тем выберите подходящий рисунок, указав в поле Picture (Изображение) имя
Сгк;тветствующего файла.
зчальиая форма, которую вы создаете, должна содержать несколько кнопок. • а я из них предназначена для открытия определенной формы, поэтому луч-
( С(1° поместить на кнопке именно имя открываемой формы. Активизируйте 10 Text и введите имя формы - например, Страны. Теперь задача выполнена,
72 Создание форм новой базы данных
и можно щелкать по кнопке Finish Вновь откроется окно конструктора кноп в котором уже находится только что созданная кнопка (см рис 4 21) Если вас устраивают ее размеры или расположение в области данных, это легко поправи Чтобы задать нужные перетаскиванием, поставьте указатель мыши на один из леньких прямоугольников по контуру кнопки и щелкните по нему Перемести кнопку вы можете, щелкнув мышью по прямоугольнике побольше, который нах дится в левом верхнем углу контура Кроме того, советуем изменить размер щр„( та (это вам уже приходилось делать) Теперь с помощью кнопки ПВ| на паны инструментов Microsoft Access перейдите в режим просмотра формы Вы увилик начальную форму, содержащую пока только одну кнопку - Страны (см рис 4 22) Если щелкнуть по ней, откроется форма Страны
У Microsoft Access I - I n |xl f j D У , а & v ! X ЕЬ © <? \ о w . а_а . & | & ^ £ , . гд( ^
| п -! у а а . х f& is <? ^ & ^ o l t s c f f ^ e a - o . 19 В Form2 : Form I
1 t
j
1
2
J
JnL*^ I 1 i г i „ i 4 т 5 I > I 1 4 I 11 I 1. I 1 I -
• Form Hpar>t
• DC''
• Forn
i l l
"C *—i
i Footer
Контрольно-измерительные приборы
П ~ граны
1 1
I ^b
Рис 4 21
Создание кнопок с помощью конструктора Теперь еще раз создадим кнопку, на сей раз с помощью конструктора Вернитесь к тому этапу работы, который показан на рис 4 17 Если вы выберете здесь не Next, a Cancel, то вновь попадете в окно конструктора (см рис 4 23), в котором увидите объект Command25 Напомним, что Command - имя, которое Access 20и присваивает всем объектам управления, создаваемым с помощью кнопки fJlj а 2э ' просто порядковое число Оно сообщает о том, сколько раз система обрашалас к этому обозначению
ро^ото врежиме конструктора 73
=шш ID a 'v h " ® ' •« & * &n - ли? °s #*i - © irjT g a a v * - <S '' # <Q л и 1 > Э а - 9.1
и Form2: Form ' " l
i - i
2
J t
1
1 \ "
4
I I 4 I r i 6 I 7 i 8 1 i 1 I i 11 I 1 i l i
nHeat i
Контрольно-измерительные
i
приборы
1
Страны
4 For iFu j fer 1
Рис 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
1 i
2
1 1
"1
^ J n | j ^ 1 1 I 2 1 1 4 ' 1 > 1 7 I 1 4 I 1 I II k i l l
• Form Hen jet
•fDet d
1 • *
• Forr
Контрольно-измерительные приборы
i
ComrnaricL'5 r
i Fuofer
1 1
1 A
Рис 4 23
Ы Microsoft Access
• & a a a v | g |x |
' OD- I ? =S ' 0 5 -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
Application Icon
|Кснтр льнг ичмеритс-пьмыр ni rn t_ - j
Г Di ' f ld 'Da ta ta ' f Window
- | Г Display Statu--Ear
OK Z\ Cani?
Advance ^ >
Menu Bar
Kdcfault^
P Allow Full Menus
W Allow Default Shortcut Menus
Л Shortcut Menu Bar
Ifdr-fajlO
N7 Allow Built in Toilbars
W Allo'V Tooltarj'Mrnu Char.Qr-i,
A
Рис 4 25
Затем, чтобы при открытии базы данных на экран не к ыводилось ее окно, снимите флажок в поле Display Database Windows (Показать окно базы данных) Это не лишает вас возможности открыть окно базы данн ых, достаточно воспользоваться кнопкой ©I на панели инструментов (evi, например, рис 4 20 или кла впатурной клавишей F11 Еще одна существеннгя детали внесенные изменения, показанные на рис 4 25, вступают в силу только при следующем открытии базы данных
Построение запросов для отбора нужных данных Одна из разновидностей запроса на выборку - (жльтр н а основе формы Базой Для него может служить любая заранее подготовленная форма В качестве примера мы рассмотрим форму Приборы, котордя показана на рис 4 26 Она взята из реальной рабочей практики и содержит 173 записи, ка.к видно из окна номера записи
Чтобы произвести фильтрацию по полю Приборы, щ;елкните по кнопке "й|, с помощью которой можно изменить фильтр, и все окна формы очистяТ-Я Форма готова к работе в режиме фильтра (см рис 4 27)
76 Создание форм новой базы данных
ьЛ Mirrosoft Ас г ess File gdit View Insert Format Record.
l-tn|x| Wmduv Hflu
© J- Uj Б Приборы 1-lDlx
Назначение прибора Назначение не указано "3
Вес кг I Примечание2
Характе РИС-ТИКИ
Категория
модель
тип
Фирма
Цена $ I
Примечание
Цена! $ |
(портативный
Checker В
рН-метр
|ЗК0ХЕЛП И
42
0
3
3
НСТРУМЕНТС
3
J
Карманный прибор фирмы HANNA без электрода с BNC-разьемом С вместимость с широким спектром различных рН-электродов Диапазон измереннии 0-10 рН Точность 0 2 рН Питание батареи на 3000 час Пасса 52 6 г
№ по каталог;/
Год по каталог/ Г
Примечание! Новый
тип прибора
Новая Фирма
Новое назначение прибора
Изменить запись
Удалить запись
• | и [»»[ 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
Характеристики
категория
г i цель
тип
Фирма
Црна i |
Г[.имечание
^ н а ! $ 1
1 |
1
« — и .
3
1 J
3
№ по каталогу
Год по каталогу
Ггимечание'
з" Рис 4 27
Теперь можно выполнить подготовленный запрос. Для этого щелкните по кнопке v | (Применение фильтра). В полях формы появятся значения полей одной из отобранных записей (см. рис. 4.30). Это будет та же самая форма Записи, но содержащая все данные (см. поле номера записи), которые были отобраны на основе заданного фильтра. В поле номера появившейся записи вы увидите ее номер и общее количество отобранных (отфильтрованных) записей. Переходя от одной записи к другой, вы «листаете» их так же, как делали это в начальной форме. Запрос, который вы только что сохранили, заносится в виде таблицы под заданным вами именем в окне базы данных во вкладку Queries. При необходимости вы можете ввести на данном этапе работы новьге условия отбора, уменьшая количество итоговых записей. Это делается с помощью описанных выше кнопок, расположенных на панели инструментов.
Предположим, вы хотите отфильтровывать записи последовательно, от шага к шагу задавая дополнительные условия в новых полях и постепенно снижая число отобранных записей. В таком случае повторяйте описанные выше действия, начиная с щелчка по кнопке JjjJ (Изменить фильтр)
Чтобы вернуться к исходному состоянию формы и подготовить ее к обработке нового запроса на выборку, щелкните по кнопке JTJ (Удалить фильтр) на панели инструментов.
78 Создание форм новой базы донных
В Microsoft Access File? Edit t ie . " In si t Filter Tr.nl. Window Help
© a i ' •"' Qo,e X V S Л • l-'.l . D c j y L -о г" • an • og . g .
H Приборы: Filter by Form Назначение прибора Вес кг
"3 Примечэние2
Характеристики
Анализ воздуха на содержание аэрозолей и кислых газов анализ биообъектов _i Анализ летучих органических соединений (бензол толуол трихлорэтилен кснпол трихлорбензол) е поверхностных е -Анализ летучих органических соединений (бензол толуол трихлорэтилен ксилол хлорбензол) в поверхностных ВОДЕ Анализ нелетучих гербицидов производных фенола, алкилсульфидов ионов тяжелых металлов и некоторых редких а Долговременный мониторинг растворенного кислородапроводимости солености кислотности температуры общей! Измерение растворенного кислорода температуры проводимости солености кислотности общей концентрации в П| Измерение аммония ^ _ _ ^ _ Измерение кислотности
Цена$
Примечание Н- по каталог-/
Год по каталогу Цена! $
Примечание!
Рис 4 28
Итак, повторим и сведем воедино основные правила отбора (фильтрации) записей с помощью формы:
• отбор может осуществляться по нескольким условиям, как задаваемым одновременно (схема «И»), так и взаимоисключающим (схема «ИЛИ»);
• если одновременно задать различные критерии отбора в нескольких полях (схема «И»), фильтр будет возвращать только те записи, в которых каждое из полей отвечает всем указанным условиям;
• предположим, вы хотите указать несколько значений, которые запись, включаемая в результирующий набор, может содержать в одном поле (схема «ИЛИ»), Выберите вкладку Ог (ИЛИ) (ее ярлычок находится в левом нижнем углу окна). Фильтр будет возвращать записи, которые содержат в полях: - все значения, указанные во вкладке Look for (Найти для...); - все значения, указанные в первой вкладке Or; - все значения, указанные во второй вкладке Or, и т.д.;
• чтобы найти записи, имеющие в конкретном поле (в данном случае в поле без списка) пустые или непустые значения, введите в него выражение Is Null или Is Not Null1.
Величина поля, которому ЕЮ присвоено никакого значения. Отмстим, что она не яиляется эквивалентом числа 0 или пустой строки
Ввод и корректировке данных 79
дВЗШШЗШШШШШШШШШШ^ШШШШ^Ш File £dit View Insert Filter Jooh Window Help
& Q . < i b i ••' - ciu-.e x 7 0 a - L ] .
ГЛ5Ш
В Приборы: Filter by Form ош> Назначение прибора Вес кг 'И иерениекислотности' "3
Примечание '
<арактеристики
Категория
МОДеЛЬ
тип
Фирма
Цена $ |
Примечание
d
~3
"3
N" по каталог)'
Гол по каталогу Цена! $ |
Примечание!
15 J
Рис 4 29
Ввод и корректировка данных Как уже говорилось, для ввода новых данных иногда используются таблицы, но удобнее применять для этой цели формы.
Рассмотрим такую возможность на примере формы Приборы, с которой вы работали в предыдущем разделе.
Выведите ее на экран. Теперь с помощью кнопки в поле номера записи задайте его максимально возможное значение (см. рис. 4.31). Всего в форме имеется 173 записи; значит, установите указатель на цифре 174. Как правило, перед вводом новых записей в основную форму необходимо предварительно пополнить или обновить словари (формы Страны, Фирмы, Типы приборов, Назначение). Открыть перечисленные формы можно как по отдельности, из их собственных окон, так и из формы Приборы. Рассмотрим последний вариант.
Для подобных случаев в форме Приборы есть кнопки Новый тип прибора, Новая фирма, Новое назначение прибора. Механизм их создания подробно обсужден выше.
Предположим, что перед вводом новой записи по приборам необходимо ввести новые записи в словарные формы Страны и Фирмы. Начнем с последней.
Щелкните по кнопке Новая фирма. На экране появится форма Фирмы, готовая для ввода новой записи: все поля пусты, а в поле номера записи установлено
80 Создание форм новой базы данных
Ы Microsoft Access ] File Edif View Insert Format
i D c& e & a v-M, • и в a v -
ЕШП Tools Window H l,_
• * 21 'il /' "a v w • • d - g назначение прииира "3
IU кислотности ~2 Прим~чание2
Характеристики
Категория
модель
тип
Фирма
Цена$ I
Примечание
Цена1 $ 1
|портативныи
|[Иодель 265
рН-метр
JORION
яшнШш
• • г
J
-\ d
zi
Полностью влагозащищенныи портативно рН-метр Встроенная память на 60 измерении Выход - интерфейс R5232 Точность по рН - 0 005 по напряжению-0 rnV по температуре - 0 1 ОМожет комплектоваться полным набором пoлeвt принадлежностей
№ по каталогу
Год по каталог/ 1 mi
Примечание
Новый тип
прибора
Новая фирма
Новое назначение прибора
Изменить запись
Удалить запись
>•! 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
Fj\t! Edt View Lnsert Fnrmat Records lools Window Help
D GS H - & E i "'•
E M U
Назначение прибора
Категория
модель
тип
Фирма
ЦенэЗ I
Примечание
Цена! $ I
Примечание!
3 Примечание2
Характеристики
ТЗ
"3
3 11
~з № по каталогу
Год по каталог,'
Новый
Прибора
Нивая Фирма
Новое назначение прибора
Изменить запись
Удалить запись
1"1 • ! °< " 4
Рис 4 31
новая фирма TAAG.) Второй вариант: вы вводите данные с помощью клавиатуры.
При необходимости вы таким же образом вводите новые позиции в словарные формы Типы приборов и Назначение. В поля, не имеющие стрелок прокрутки, данные вводятся с клавиатуры. Так, в поле Вес, кг указано числовое значение 14. После ввода всех необходимых сведений нажмите клавишу Enter, чтобы запомнить все сделанные изменения.
Форму можно использовать не только для ввода, но и для удаления информации. Обратите внимание, что каждая из форм, показанных на рис. 4.30-4.35, включает кнопки Изменить запись и Удалить запись. Для корректировки данных откройте нужную запись, произведите необходимые изменения, а затем с помощью клавиши Enter отдайте программе команду запомнить их. При удалении записи сначала откройте ее, а потом просто щелкните по кнопке Удалить запись.
Итак, в этом разделе мы стремились показать, что формы - очень мощный и гибкий инструмент работы с данными. Однако в ряде случаев (например, при подготовке формы для ввода, корректировки и удаления данных) штатного программного обеспечения Access 2000 может быть недостаточно для выполнения необходимых операций. Это легко объяснить: проблемы, которые возникают в подобных ситуациях, часто оказываются специфическими, и их решение не всегда предусмотрено стандартными программными средствами.
82 Создание форм новой базы данных
Ш Microsoft Access - [Фирмы] d File £dit View Insert Format Records loots V^iridiv* Help
D ^ Q S E i ? i / ' >i • r>a • og - C7J .
й - и s a y t ' -n •- $i \\ ъъ *& •• *
l- lnlx
© 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
И Micro5™* Access
f\ Ed t Mew trrert Format Pec i rk TL : )L ^/ndib/ Help
Q t j U 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 Incei t Former Records
a ei Q ; <s a v i • " l i n d j . v Help
В J • гч . ПИ Прибор! Г E Фирмы
Катег
мо дел
тип
Фирг,
Цена;
шш Коп Фиомы 27
Название фирмы ITAAG
Страна
~3
Адрес
Ааоес2
Примечания
Изменить запись
~3 Германия Италия Россия США Финляндия Франция Швейцария Португалия
Удалить I Запись
гз-
Новая страна I
• | " | " | < " 2 7
Рис 4 34
файлы в формате DOC показаны на рис. 4.36 (для Архангельской области) и 4.37 (для Ленинградской области).
В нашем примере для конвертирования были использованы карты, разработанные в ФАПСИ и входящие в составе одного из банков данных по ЧС (он рассматривается в настоящей книге). Автор не участвовал в создании этих карт, и сначала они вовсе не предназначались для конвертирования - лишний аргумент в пользу того, что для подобных целей пригодны практически любые географические карты
Установка гиперссылок в базе данных Откройте таблицу Filel. Обратите внимание на поля Название области и Название города (для наглядности они поставлены рядом, как показано на рис. 4.38) Две самые первые записи касаются Ленинградской (Санкт-Петербург) и Архангельской (Архангельск) областей.
Сформируйте гиперссылку, которая позволяла бы, например, из каждой строки быстро выйти в соответствующую карту. Для гиперссылки необходимо отдельное поле. Создайте его и назовите Карта, а затем определите его в конструкторе таблиц как поле гиперссылки (см. рис. 4.38). Теперь подготовка завершена, и можно непосредственно вводить гиперссылку. Как только вы устанавливаете курсор в новоиспеченное поле Карта, активизируется кнопка %\ - Insert Hy-perLink (Вставить гиперссылку). Щелкнув по ней, вы вызовете одноименное
Использование гиперссылок 85
r^ pi|p ETdit View Insei t Format Re-Lurd.? Tools Window H>=lp
Щ х sJiU
L'J.
© а - Э -Назначение прибора Вес кг 14
[ l_r IP._ рние гцюеодииости ~3 Примечание2
Характеристики
Категория [портативный 3
тип
Фирма
Ч |
Г| 4.зние
" 3
u ь | Прим «ние !
(шва з v/ilks Enterprise Inc YSI incorporated АО "ЭКРОС" ГЕОХИРАН Нефть-Гаэ-Наука НПГГ'ЭКОНИКС ОАО "Цвет"
N° по каталогу
Год по каталогу
' У " « ' . - - •-••*.
, fflf^»^^ •- ••'•"•К"™
Новый ТИП
прибора
Новая ?ирма
Н овое назначение прибора
Изменить запись
Удалить запить
1-4 i | > | | > » | of 1 7 1 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 (Wor ld 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 шш Нздизннд области | Название города | Карта J3
г Санкт Петербург Архангельская область Тюменская область
Калининградская область КАЛИНИНГРАД (К Коми ССР Коми ССР
Республика Саха (Якутия ЯКУТСК Калининградская область КАЛИНИНГРАД (К г Москва
Владимирская область Ростовская область Владимирская область Московская область г Москва г Москва г Москва ;old к |
САНКТ ПЕТЕРБУР С \Мои документы^! 1ои рисункиУПрнингр^дгыя о АРХАНГЕЛЬСК С \Мои докуиенты\Мпц рисунки'1 Аркянгелы t а* оЬгпсть
Л
ДОМОДЕДОВО МОСКВА МОСКВА МОСКВА
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<*
Q Recent File-
© Browsed
a Inserted « t i n l s
rile fffC /Мои%20документы/Банки%20даммыхи^. tile jffC /Мои%20документы/Банки%20данных С \Мои документы\Банки данных^Ы mdb#Fon fil-= ///С /Мои%20документы/6 энки%20даннь СДМои документьцМои рисумки\Архангелы:ка tile ///С /Мои%20документы/Банки%20даммых
\Мои документы\Мои рисунки\Ленинградо а \Мои документы\Бамки данных^Ы mdb#Tab
hie ///С /Мои%20 документы/Рис 1 doc <~ \Мои документы\Рис1 doc _*J
Ьгс A>se fcr
Fie
Web PdQe
Bookmark
Рис 4 39
Использование гиперссылок 89
В Microsoft Access File Edit Vien1 In^ei t Format Rei-urd., Tools Window H-\p
£1 51 v / -Й
HME • * Й' © ?l
ГдШ ВиаыЧС
Наименован
ДатаЧЭС
Время ЧЭС
Название об
Название pa
Пострадало
Погиоло
Характерист
Материальн1
(10305
Обнаружение разлитии ртути е здании
2/09/1935
00 00
г Санкт Петере чрг
г Санкт Петерб-ipr Ры^чргсшнрс
и
0
В здании Парголовского комитета по земельной
'•'•Ш
Последствие
Название го
Карта
Пострадавших нет
LAHKT ПЕТЕРБУРГ
С \Мои док4менты\Мои ри<
ecord н | -* | |~~ 1 » I >• l»»l of 84в J
Рис 4 40
Добавить гиперсеьику
Связать с файлом/URL И
]С \М и дп| >мРнты\Еанки данных'|±1 гп±#Ригп Ч( | _ J Об^
о , — ^ Еведите или выберите гт>ть к док МРНТ/ на котирый будет p 4 J ® 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
llThi-j wizard automatically fcreates a columnar report.
Oei.ign View Peport Wizaid
AutoReport: Tabular Chart Wizard Label Wizard
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) .
*J
Приборы, представленные на рынке2 ~3
fioj
Код |
Номер модели |:hed<er в
Категория
Примечание I
Примечание!
Год но каталогу
Характеристики
\ 1
Карманный прибор фирмы HANNA6ea электрода с BNC-эв J ъемом 2вмесгимлсть с широким спектром различны* рМ• электродов Диапазон иэмеренний 0-10 рН Точность 0,2 рН Питание батареи на 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 £
ы РИС 5 4
на панели инструментов окна базы данных. Полученный отчет, который имеет иерархическую структуру, показан на рис. 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
Назначение Приборы Страны Страны 1 Типы Приборов Фирмы ; Фирмы Subform Экологические приборы
Form Form Form Form Form Form Form Form
J
• 1
Cancel Next > Finish
Sub Rep art Wizard
Рис 5 5
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 Страны
Страны
Код Страна
Примечания
"К
г
Ал?
Страна Примечания
Германия
Р ^ е _df i>'i j
|Гп|е Farmer luteinaNonal |иЗ
nlltech •[07-
шш 73
[.ISA
|Я 1 • Рир\<ы Sub farm Код ср ирмы
02
1
Н асеание Ф ирмы
j 1 Ь 1 ir i с с I р о F a i e d
1
У од страны
|м 3
А д р в !
fe l loe Ohio ' USA -Fax 5
Г425 Fax (
2051 Deerf FAX
РИС 5 7
различия начинаются с того момента, когда надо указать признак, по которому будет сформирован отчет.
Этот этап показан на рис. 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 records? (Как вы будете сортировать записи внутри данных по каждой стране?). 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"''
Код
Название фирмы Код страны
_ l J
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 '
XK--K'-. xxxxxxxxx
xxxx xxxx xxxx xxxx хжхх хкчхх хжхх xxvxx xxxxx xxxxx xxxxx xxxxx XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XKXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX XXXXX
Orientation
<• Portrait
<~ Landscape
La,out
f~ Stepped
Г Block
<•" Outline 1
•^ Outline I
<" Align Lett 1
<~ Alian Left:-
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 - '
Фир.
Страна
Страна
Страна
Страна
Страна
пы
United Kingdom
Название фирм Код
Randox Laboratories, 02
USA
Название фирм Код
Alltech 03
Cole-Parmer Internatio 03
YCI incorporated 03
Германия
Название фирм Код
SENSORTECHNIK M 04
Италия
Название фирм Код
AM E L 1 nstrument s 05
Р о с с и я 1 • 1 " 1 «1
,,,., ,.„„*-:»-.«> ,-,,-,«,
Код фирМЫ
05
Код фирмы
11
07
02
Код фирмы
19
ЛЪд фирмы
17
-. ., VH°. >"*,JWbt l > " 4 . i ' . v
Код страны
02
Код страны
о:, 03
03
A'cd страны
04
Ас'-З страны
05
J
|п|х|
^
J
•
.1 .1
РИС. 5 12
Обычно статические копии отчетов не только предоставляются по запросу, но и регулярно рассылаются: например, еженедельные отчеты о движении товаров на складах, ежемесячные отчеты о продажах, ежеквартальные финансовые документы и т.д.
Создание статической копии отчета Предположим, требуется создать в Access статическую копию отчета Приборы (см. рис. 5.13).
В Access 2000 такая процедура рассматривается как разновидность экспортной операции. Процесс состоит из нескольких этапов:
1- В окне базы данных выбрать и пометить название отчета, копию которого надо создать. В данном случае это Приборы (см. рис. 5.14).
102 Создание отчетов новой базы данных
В 0 . Е<* Y«w Iools
*Ш1 Г...
Приборы
Наивр пахали 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 ф м р н ы '16
Loo Lap Код тхм.РСод тшиа 01
Нол«р к одел к МовегабЮ
Чяршаерхсгккк TywiV рН ме-ттЛтермометр с кесккпжоат электродом
Вм.кг Прлборы.Код ткяя 01
ГСриборы.Код фмрпы 26
J * e o каталогу
±iJ A I J Рис 5 13
В Miciosoft Access - [db5 : Database] ОпШ В . Preview Н Design Ц New i X \ £ f l > •:•:
12 J Create report in Design view
0 J 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: |приборы|
ave as type Snapshot Foimat (» snp) 3 I
W Autostart
В s* ~3 Canrel
Рис 5 15
Резюме 1. В Access 2000 отчет создается почти так же, как форма. Разница между эти
ми двумя объектами базы данных состоит не в технологии их построения, а в их целевом назначении Если с формой пользователь будет работать на экране, то отчет предназначен для печати и представляет ценность как материальная копия документа, полученного из базы данных.
2. Отчет, созданный с помощью автоотчета, будет отображать все поля и записи базовой таблицы или запроса. Так же, как и в случае с формой, такой отчет наиболее прост в построении и наименее гибок по своей структуре.
104 Создание отчетов новой базы данных
W Snapshot Viewer - Приборы.inp File View Window hjelp
I jg Приборы, snp ШШ 3 Приборы
н Ы Г ~ 1 > | н | В | <| I
Ноле-р лод&лм "/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
3
J
_•] zi
For Help, press F1
Рис 5 16
3. В первичный отчет Access 2000 позволяет включить подчиненный отче в рамках которого записи могут быть отсортированы на втором уровне группировки. Но этот подчиненный отчет может быть создан уже с использо ванием конструктора отчетов, хотя саму группировку записей допускается выполнить и с помощью мастера отчетов. Наиболее гибкую структуру отчета позволяет получить конструктор отчетов.
4. В версии Access 2000 появилась новая возможность - создать Snapshot (Статическую копию отчета). По сути, это фотография отчета - файл с расширением snp, который содержит копии каждой страницы отчета, сформированного в Access 2000, двумерных графиков, чертежей и других элементов, включенных в отчет. Такой файл можно просматривать, печатать, посыла1Ь по электронной почте, рассылать по сети и архивировать, уже не работая непосредственно со средой Access 2000. В Access 2000 такая процедура рассматривается как разновидность экспортной операции.
Глава VI Создание страниц
доступа к данным
• Свойства страниц доступа к данным • Страницы доступа к сгруппированным данным • Использование страниц доступа к данным
Страница доступа к данным (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
Unit Price |
Discontinued Г"
NevKjalic-nSecliori Products
J j Pioduc[s|0 ot|2
J
Рис 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 Страны
Код фирмы Название фирмы Код страны Адрес
Адрес 2
Примечания
Страна
_" «L Ф1 ipi it
Фирмы
02 YSI incorporated 03 Yellow Spring Ohio 453S7 USA Fa*' 513 767 9353
USA
= I W I : 1 of 26 • И * « , " '
1
'•" ••/ Fi!
Рис 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
Create a ne1».1 data access page without using a '/jizat d I
Existing Web page page Wizard AutoPage. Columnar
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
Tables/Queries
|ТаЫе Страны
Available Fields:
Примечания
Which held-: do you want on your page7
Vou can choose from more than one table or query,
ГЗ 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
Priority
Название фирмы
КОД фирмы, Код страны, Адрес, Адрес 2, Примечания
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/
Headei
<l
Код ф|
Назван
Код ст
Адрес
Адрес
Примем
Стран;
Navigat
• . iD l x l
CDhpMblWlZ j
Pllt l
ie фирг
)ЗНЫ
анич
lonSect
1Ы
on: <t*
• i i >
. . . pubiWiz
• | C'MpHfclWlZ | O o f 12 » I ~ l ~ \~ I i
I I I I I
I I I
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 records7
[
1
ш
xxxxxxx
1 1 IZH
1
а I 1 = ] i
1 1 < C 1=1 1
1 1« 1 = 1 1
\ ou can sort records by up bo four fields, in either ascending or descending older
1 t- пд странь!
2 If ид фмрмы|
~3 i l l "3 Ji] 1] Jjj
•3] J
Cancel <Eack Next > Finirh
Рис 6 7
1 Page Wizard
\ ^ ^
r
-- - -
9".
- -
J(Wb
& » i .
"3
What title do у ou want fur your page7
[IlTpbHtl
That's all the information the wizard needs to create ^our page
Do you want to open the page in Access, or modify the page's design7
(" 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 page7
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&sr i '. , . , 1 1 1 i i i i i i i i i, Header Страны Название фирмы '.'I 1 .1 'ofOUpO»fLTp.aH|:l | 1 [ I 1 1 1 i l l
| _Ф]| | HaiEdrine фирк 1 I 1 1 I I 1 ! I 1 I 1 I I Header ФирмыУЛг f\ \
Navtqat
H
Navrga*
onSect on Фир
К|эл4ир||ы |
гфд страны |
*
А
Г
MblWl2
арес
арес 2
нимеча
* | -I-upMbiWc 10 j l o f 12
onSection Страны Название
Navigat
H
on5ect
1ИЯ
Ф\ 1
фирмы г. J
< | Страны Название фирмы 10 j 1 of 12 • И > * »>' и * ' " ' i i г i I i l i i
on Страны Страна
* ' ? 11
I -РИС 6 9
Законченная страница доступа к данным выглядит так, как показано на рис. 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
File Edit View Insert Format Tui-.L Vundiw Help
ku ' 0 c3i
1ШХ]
| ^ Страны
. , йгоирОгСтраны- (united Kingdom R:l Страна
, GroupOtCTpaHbi- |Randox Laboratories, Ltd _vil Название фирмы
И < | Страны-Название фирмы 1 of 1 '<•
и < | Страны-Страна 1 of 10 • И " . ,
«1
H - l n l x
•'to'-'
Рис 6 И
создания страницы - использование конструктора С нашей точки зрения, конструктор Действительно нужен тогда, когда требуется внести какие-либо исправления, о чем шла речь в предыдущем разделе. А вот создание страницы посредством конструктора - не самое рациональное решение. Тем не менее рассмотрим и такой вариант.
Чтобы войти в режим конструктора, надо открыть окно базы данных (см. рис •J1), выбрать опцию Pages в разделе Objects и выполнить одно из следующих действий:
• активизировать опцию Create data access page in Design view (Создать страницу доступа к данным в режиме конструктора);
116 Создание страниц доступа к данным
(У Micro to l l Access
| File Edit \_icw Insert For mat Tools Window Help
м- У rJ ai ' e, :-*!' | ' j j Страны
, , , GroupOfCTpaHbi- lunited Kingdom =>! Страна
. - GroupOfCTpanbi-^ l Название фирмы
Код фирмы
Код страны
Адрес
Адрес 2
Примечания
g j j < | ФирмыW12 1 Of 1 •
К < | Страны-НазЕднп
f K < | Страны-Страна 1 of 10
«1
' ; . / - . - « | B dj J шт ШЕШ*
|Randox Laboratories, Ltd
05
02
Diamond Road, Crumlin, Co Antrim, BT29 4QY Fax 44 1849 422413
Галкин В А Ten 265 44-05
»i i - >'Л *•* _;. v i V Cj} I _J
e фиг.
•
ты 1 rf l >, i. • K< s • ''i* ^|ЩР^ V (31
м >'* • \ ; , / o ^ i T f 1 •!
Рис <5 /2
• щелкнуть по кнопке Design на панели окна базы данных; • щелкнуть по кнопке New на панели окна базы данных, а затем выбрать оп
цию Design view. В любом случае на экране появятся (см. рис б 13) пустой бланк страницы и па
нель инструментов (Toolbox) с набором кнопок, которые предназначены для до бавления и настройки информационных элементов страницы (в терминологш Access 2000 - элементов управления).
Над пустым бланком крупным шрифтом набрано указание' Click here and type title text (Щелкните здесь и напечатайте текст заголовка) Последуйте это му совету и задайте имя страницы. Дальше вы формируете страницу с помощью панели Toolbox практически так же, как в предыдущих версиях Access создава ли формы или отчеты Любая страница доступа к данным строится следующим образом вы помещаете на нее с помощью инструментов панели необходимые элементы управления и форматируете их. Табл. 4.1 содержит описание этих элементов, включенных в панель Toolbox.
Использование страниц доступа к данным 117
ШЕ1
- Toh г 1 - 1 г' - В / U S S 3=
Fie Edir ijr- v In rrt Fotr ot T -. -.k A c d ч H lp
© 9 .
"3 Я Page8 : Data Лесе»» Page QsE
Section Unbound
Д Ш * 1 [k \ Лд abl
' а p ЕЕ
- fj
(S
m _ i
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 (Эле-
. мент данных) для имени таблицы или запроса, на которых основан компонент PivotTable. После этого переходите к пункту 6;
- если вы хотите обратиться к внешнему источнику данных, вызовите панель свойств компонента PivotTable и задайте последовательность команд: Data Source => Connection => Connection Editor (Источник данных => Связь => Редактор связей). Затем вызовите таблицу Provider (Агент) и выберите провайдера OLE DB, с помощью которого вы восстановите данные. Наконец, активизируйте таблицу Connection и введите информацию о связи в данные, которые вы хотите использовать для компонента PivotTable list Чтобы получить справку о диалоговом окне Data Link Properties (Свойства указателя данных), щелкните по кнопке Help в нижней части этого окна
Database |page |
^ dbS mdb 3 <£j Tables
; В П Name AutoCorrect Log € 3 Related Tables [13 Object Type OD Object Name IB Control Name 53 Property Name 53 Old Value S3 New Value
H П Менеджер >Z$ Related Tables 53 Номер =. Код фирмы
m ж
SI ! 1 j I 1 P —
z\ idr i -i v л - .
Рис 6 14
Резюме 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 (Сводная таблица). С его помощью пользователи могут просматривать данные отчетов, выполнять их динамическую сортировку и фильтрацию, группировать сведения по строкам или столбцам, получать суммарные значения и изучать их отдельные составляющие. Все это позволяет эффективно обрабатывать как небольшие объемы данных, так и крупные массивы информации.
Глава VI I Конвертирование баз
данных из других программных сред
• Процесс конвертирования баз данных • Импорт базы данных БД ЧЭС • Импорт базы данных Контроль ЧС
Мы уже говорили о том, что по мере появления новых, более совершенных СУБД все актуальнее становится проблема использования данных, которые накоплены в информационных банках предыдущих, в том числе и морально устаревших версии. И сами эти СУБД, и организованные в них сведения очень разнообразны по составу, структуре и форматам данных, а также по программной основе. Эти БД часто создавались разными организациями и разработчиками, а какие-либо правила, четко регламентирующие создание банков данных, отсутствуют. Несмотря па это в большинстве случаев информация, в какой бы форме она ни содержалась, сохраняет свою ценность, например, когда речь идет о статистических данных. Следовательно, нужно уметь использовать сведения независимо от того, в СУБД какого типа они хранятся.
В решении этой проблемы на сегодняшний день наметились два основных направления:
Q применение конвертеров, которые преобразуют данные из одного формата в другой. Наборы таких конвертеров, хотя и не всегда достаточно полные, есть практически во всех СУБД, и пока это основной путь решения проблемы;
1 24 Конвертирование баз данных из других программных сред
• использование технологии ODBC (Open Database Connectivity). ODBC-открытый интерфейс доступа к базам данных ил прикладных программ. О^ позволяет работать с документами «чужих» для конкретной БД форматов.
В настоящей главе рассматривается первый способ решения проблемы. Речь пойдет о конвертировании в 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 imported 'FILEl' ('FILEl' успешно импортирован), как показано на рис. 7.4. Щели ните по кнопке ОК.
| Import
Look in:
^5
Р^ч •Mr '
\_ 1 * 1 1
^^S='-* '44
^k£jMi i Wet/ Folders •
^^^ШВЯ
_J dBase
_J] Filel.dbf _-3]Olad.dbf J]Wa5te.dbf
File name:
U^j jgyeAs^m^bf^
ВЕЭ1 j <- (tj ® X CL, Ш - то* -
J шшшшшшшшшш^
& • Import
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 Ш\ t^Open k£ Design j^New X
Create table in Design view
Create table by using wizard
Create table by entering data
232 Менеджер Назначение
Приборы, представленные на рынке2 Страны Типы приборов фирмы
a i - < * 8 g ^ i . i -«•>-
3
d Рис. 7.5
5-_
130 Конвертирование баз данных из других программных сред
В Microsoft Access - (FILE1: Table! • file Edi
id- У
J_l
Re
ML_VID] 1Q305 10305 10109 10305 10109 10109 10305 10301 10305 10305 10302 10101 11002 10302 10301 10305 10305 10202 30303 30303 10801 10302 10305 10302 10302 10101
cod i* | *
View Incur Г n , ,i PE L I *
e a : e a ^
FILJ3ATAY | Fll__TIMECH | 70699 0 00 70890 0 00 70890 0 00 70891 0 00 70883 0 00 70883 0 00 70683 0 00 70885 0 00 70880 0 00 70В8Э 0 00 70861 0 00 70868 0 00 70893 12 20 70902 0 00 70909 0 00 70904 0 00 70912 0 00 70918 0 00 70919 0 00 70921 0 00 70921 0 00 70901 0 00 70903 0 00 70923 0 00 70918 0 00 70925 0 00
I 1 ,i |'l|>»J « Н И
Tools j/jndD
? J • ПО-
« i\ l\ FIL_OATAS |
70894 70S92 70691 70891 70884 70885 70885 70886 70883 70884 70861 7087D 70897 70904 70911 70912 70918 70918 70921 70921 70921 70901 70904 70924 70925 70925
Help
• e g - ^ - © -
^Ъ M » • * © £ ] . © . FILJTIMIESO | FILJ4AMIECH ]FIL_RESl| F I L _ N A M E R E 7
0 Обнаружение рзэл 1 5760001 Обнаружение ргуп 1
D Выброс газа из СКЕ 1 0 Обнаружение ртуп С Аварии на магистр 1 0 Аварии на магистр 1 0 Обнаружение (утрг 1 0 Авария с выброса* 1 0 Обнаружение (утре 0 Обнаружение ртуп 1 0 Аварии на транспо ' 0 Авария грузового г 1
4320001 Прорыа дамбы зол 1 450D001 Аварийный слиь бе
0 Отравление людей 1 0 Обнаружение ртун 0 Обнаружение ртуп 1 0 Выброс нефти и ее 0 Загрязнение водно 1 0 Загрязнение водно 0 Авария на канализ 1 0 Аеэр«я топливозап 0 Обнаружение ртуп 1 0 Авария на транспо 1 0 Утечка аммиачной 1 0 Авария грузового г \
1 Российская ф( 1 Российская ФЕ 1 Российская ФЕ 1 Российская ФЕ 1 Российская ф< 1 Российская ФЕ 1 Российская ФЕ 1 Российская ФЕ 1 Российская ФЕ 1 Российская ФЕ 1 Российская ФЕ 1 Российская ФЕ 1 Российская ФЕ 1 Российская ФЕ 1 Российская ФЕ 1 Российская ФЕ 1 Российская ФЕ 1 Российская Фб 1 Российская ФЕ 1 Российская Ф: 1 Российская ФЕ 1 Российская ФЕ 1 Российская ФЕ 1 Российская ФЕ 1 Российская ФЕ 1 Российская ФЕ
l - l a " J ? i l £ j £
FIL ME]]
fP 11 51 11 41 41 81 11 21
21 31 21 21 21 21 21 51 21 21 21 81 11 41 21
^
Рис 7 6
конструктора показано на рис. 7.7. Оказывается, эти поля, которые должны принадлежать к типу Data/Time (Дата/Время), после преобразования относятся к типам Text (Текст) или Number (Числовой).
Внесите необходимые исправления. Задайте для полей тип Date/Time (Дата Время). В разделе Field Properties (Свойства полей) для полей дат F1L_DATAV и FIL_DATAS установите значение свойства Short Date (Краткая дата), что соответствует изображению даты 09/12/1999, а для полей времени FIL_TIMECH и FILTIMESO - значение свойства Short Time (Краткое время), что соответствует изображению времени 12.36. Раз уж мы взялись наводить порядок, давайте зада днм для свойства Caption (Заголовок) перечисленных полей соответственно значения Дата ЧЭС, Дата сообщения о ЧЭС, Время ЧЭС, Время сообщения о ЧЭС
Путешествия во времени Теперь посмотрим, что у нас получилось. Перейдя в режим формы с помощью кнопки • -1 (см. рис. 7.7), вы обнаружите крайне любопытную картину. Поля времени теперь имеют привычные русскоязычные имена и выглядят нормально, если не считать того, что в большинстве случаев в эти поля введены нулевые значения. (Заметим, что это не ваша вина; информация о времени ЧЭС и уж тем более о времени передачи сообщения поступает далеко не всегда ) Но взгляните на поля дат. На календаре базы данных должен стоять 1995 год - год, указанный
Импорт базы данных БД ЧЭС 131
д Щ И Ш . Ц Ш Ш Ы Ц Ц Ш Л шп JsJiU
?- g» С? • S -Й • О. Description
Default Value Validation R jle validation Tc*t Peg jned Allow 2^0 Length 1ПОе<Н Unicode Curnpfession
Field Properties
j )ta type det^ oires the kjnd of values that irers L-ЗП 5to>e m the fHd Pte- s H for telpon data type-:
Рис 7 7
в запросе. А в таблице, которая представлена на рис. 7.8, вы видите 2094 год. Этот забавный факт имеет вполне рациональное объяснение, связанное с тем, что называется несовпадением в исходных установках различных СУБД. Если не задать заранее точное значение типа поля1 - а для даты и времени это Date/Time (Дата/ Время), то каждая введенная дата будет заноситься в память СУБД в виде числового выражения. Оно представляет собой количество дней, прошедших от даты, принятой за точку отсчета (ей присвоено значение 1). Это имеет определенный смысл' при необходимости вы сможете выполнять с датами арифметические Действия. Если вы вводите значение времени, оно сохраняется в памяти в виде Десятичной дроби, которая равна прошедшей на данный момент части дня. (За точку отсчета принимаются 12 часов ночи.) А вот исходная дата в каждом семействе СУБД может быть разной. Например, в различных редакциях пакета Office, частью которого является Access, такой датой является 1 января 1900 года. В версиях языка dBase (одну из которых мы использовали) это 1 января 1800 года. Теперь вам понятны числа, которые появились в полях дат сразу после конвертации файла Filel в Access 2000 (см. рис. 7.6). А вот сутки во всех семействах СУБД начинаются в полночь, и тут при всем желании трудно придумать что-то оригинальное.
У яого понятия есть синоним - «формат данных», что, на наш взгляд, более точно Но в настоящей книге под форматом данных понимается тип расширения файла базы данных
5»
132 Конвертирование баз данных из других программных сред
I B Microsoft Access
F.le Edit view Insert FQrrrut Records
,o M
IP
о
Ре
,
Й Н S u " Jf • H i a ? *
F1LE1: Table Дата ЧЭС | Время
08/24/2094 08/26/2094 08/26/2094 08/27/2094 08/29/2094 08/24/2094 07/24/2094 09/10/2094 09/09/2094 09/09/2094 03/24/20941 03Я4/2094 03/05/2094 03/05/2094 03/20/2094 03/23/2094 05,90/2094 05Л5/2094 05/04/2094 05/09/2094 08/10/2094 09/16/2094 09/15/2094
cold i* | < | | 106 »
4a IB •' Qa I S •'
ЧЭС |Дата 12 40 03 15 17 25 09 00
00 00 00 00
10 30 00 OOiO 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
10 15 04 30
1 H|»*| ol 858
Tpol'E и^тНол'
?J • ОЛ
• < £1 I I
сообщения |Вра 08/26/2094 08/26/2094 08/26/2094 08/23/2094 08/29/2094 08/30/2094 07/29/2094 09/11/2094 09/10/2094 09/12/2094 04/21/2094! 04/21/2094 04/21/2094 04/21/2094 04/21/2094 04/21/2094 06/23Д094 06/23/2094 06/23/2094 06/23/2094 12/30/1899 ОЧ/1КД094 09'16'2U94
Help
"S -Й - @ -, "a ** •• ^ B -41- ITJ .
мя соовщвния| FIL_RESP
00 00
00 0П 00 00
00.00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 DO 00 00 00 00 00
• 1 1
| FIL_NAMIERE| 1 Российская Ф< 1 Российская Ф( 1 Российская Ф< 1 Российская Ф< 1 Российская Ф( 1 Российская Ф( Э Украина 1 Российская Ф( 1 Российская Ф( 1 Российская Ф( 11 Российская Ф(-1 Российская Ф< 1 Российская Ф< 1 Российская Ф( 1 Российская Ф( 1 Российская Ф* 1 Российская Ф( 1 Российская Ф< 1 Российская Ф< 1 Российская Ф( 1 Российская Ф( 1 Российская Ф( 1 Российская Ф(
ШШШ BZEH
• я п о FIL_MECTO | FIL^7!
6113200 1132С 7110400 1104С 9110500 1105C-J 9110800 1108С 5116500 1165С 3116000 11 БОГ
0 2111400 1114С 5116500 1165С 8117600 117ВГ 4119200 • • ! 4118700 4118000 1180С 4115700 115ГС 4118000 6115200 1152С 5116500 11 КГ J 4113600 1ПСС 411.8700 1187Г. 4115300 9111000 2112000 112ПС 8117600 1176Г-]
-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
Find What:
Replace With
Lock In:
Match:
Search:
Replace
|1И!Я1
|/.«
1 | д п / Part of Field
|AII
1
3
3 3
Г Match Case
Г
3
3
Find Next
Cancel
Replace
Replace All
<< Less
Рис. 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 File Edit View Insert Format Pecordo Toe Is Windo v
i D e J H l a t ' j . i b e y - i H a a ? * m ©
Re
F I L E l : Table FIL^VIPY | FIL_NAMECH |
10305 Обнаружение ; 30303 Загрязнение в( 20203 Обвалы грунта 30303 Загрязнение ei 10801 Авария на кан. 30303 Загрязнение р< 10109 Авария на мап 101091 Авария на мап| 10802 Авария водоес 10201 Пожар в цехе i 10302 Авария грузов' 10109 Авария на скв< 30202 Превышение Г 10201 Пожар на мета 10205 Пожар иэобутн 10701 Авария на эле! 10109 Авария на кон; 10203 Сход вагонов t 10301 Авария с выбр 10305 Разлив ртути е 10305 Обнаружение ( 10109 Авария на мап 10301 Авария с выбр
cord и | « ( I 10в » I » i l»* i of
' ' '•'> Ь - аа
• ^ -•- и i\
Help 1 ng-Й
.--•а • о.
м •* * © й
Дата ЧЭС | Время ЧЭС {Дата сообщения! Время 06/27 Л 995 06/29/1905 06/24/1995 07/24/1995 09/10/1995 09/09/1996 09/09/1995 03/24/1995! 03/04/1995 03/05/1995 03/05/1995 03/20/1995 03/23/1995 05/20/1995 05/05/1995 05/04/1995 05/09/1995 03/10/1995 09/16/1995 09/15/1995 06/26/1995 09/25 '1935 09/30'1ЛП5
ese
09 00
00 00 00 00
10 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
10 15 04 30
15 07 00 20 лл nn
03/26/1995 08/29/1995 08/30/1995 07/29/1995 09/11/1995 09/10/1995 09/12/1995 04/21/1995' 04/21/1995 04/21/1995 04/21/1995 04/21/1995 04/21/1995 06/23/1995 06/23/1995 06/23/1995 06/23/1995 12/30/1899 09/16/1995 09/16/1995
09/26/1995 09/30/1995 na/qn/iQQc.
• о. сообщения] FIL_RESP |
0U 00 11
0П 00 11 00 00 11
00.00 11! 00 00 11 00 00 11 00 00 11 00 00 11 00 00 11 00 00 11 0000 11 00 00 11 00 00 11 00 00 11
00 00 11 00 00 11 00 00 11 ПЛ ЛП 11
1-loJx
- iDlx j FIL . tQ Poccm POCCHI
POCCK U
Украиг- I РОССИ!
РОС СИ; , Doccm дВВД D O C C m
Россн* POCCHI
Россш 3 ОС-СИ» D 0 C C I U эОССИ( Doccm 3оссш Doccm Pdccm Purcm Рос cm Poccm Prxuu
- ^
Рис 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
S ^ B # Й У P у - s # a v- <f
1Гм FILEl: Table
• Виды ЧС |Нанм9ноыни'|
10205 Пожар в хило!.. 10302 Аварии на трак 10205 Пожар на узле 20307 Сильный дожд 10101 Сход вагонов i 20307 Сильный дожд 10301 Отравление лк 10301 Пишевое отраЕ 10201 Пожар в гараж 10205 Пожар в здани 10205 Пожар в жилок 10201 Пожар на Teppi 10101 Авария грузов! 10107 Дорожно транс 30102 Заболевание л 10201 Пожар на шве! 10802 Авария на вод 10205 Пожар в клубе 10201 Взрыв в катет 10803 Авария котла к 30102 Групповое эаб>
[ 1 10107 Дорожно транс I 10301 Отравление лк
' * Ь - с£
/ ' • *1 И
Help
' =g
ъъ м- о-
М •« * © -Й1
Дата ЧЭС [ Врем* ЧЭС [Дата сообщания[Врамл Jii/02'iq% 01/02/1995 01/02/1995 01/03/1995 01/03/1995 01*3/1995 01/05/1995 01/05/1995 01/06/1995 01/07/1995 01/07/1995 01,08/1995 01/09/1995 01/09/1995 01/11/1995 01/11/1995 01/13/1995 01/14/1995 01/18/1995 01/19/1995 01/19/1995 01/19/1995 01/19/1395
i 1Л1Г1Я П п п л ^ п - т п я н г n i /1Q/ iqQ^ Ci-.orf " I - I I 1 • |ы|>»1 of 646
I
00 00
00 00 14 55 00 00
00 0U
•1
12/30/1699 01/02/1995 12/30/1899 12/30/1899 12*30/1899 12/30/1899 12/30/1899 12/30/1899 12/30/1899 12/30/1899 12/30/1899 12/30/1899 01/11/1995 12/30/1899 12/30/1899 12/30/1899 12/30/1899 12/30/1899 12/30/1899 12/30/1899 12/30/1899 12/30/1899 12/30/1899 ОПП/1Я99
- О-
сообщения! Код рвспуб 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 пппл
• -|П|Х| пм[ Наймем] 11 Росси - ' 11 Росси 11 Росси 0
11 Росси 0
11 Росси 11 Росси 11 Росси 11 Росси 11 Росси 11 Росси 11 Росси 11 Росси 11 Росси 11 Росси 11 Росси 11 Росси 11 Росси 11 Росси 11 Росси 0 Росси
11 Рогси 11 Рпггит]
- J
•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
J File Edit View Insert l o o Is Window Help
j D e£ t •• v ' :. *; •- ':}:.- а л - .
с
<
• d b l : Database
Щореп k£ Design i t ] New > -a "V :':;: 111
Objects
П
[1
в ^ ^ u=i И И _-, ЯШ ^ ЧЙР
«•-J*
Groups
^ l |
1
llTilBCreate tabte in Design v i e w B S]J Create table by using wizard
0 J Create table by entering data
Щ CLRES
Ш Filel
Щ MYI4
Ш REGION
Щ TIPCHS
Щ UtCRCHS
• Ш Менеджер
ЦП) Назначение
(ПИ Приборы, представленные на рынке2
ЦЩ Страны
Ш Типы приборов
ШВ Фирмы
1
• • J n l x l !
• °5 / - ?
• I J a l x l
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
L i 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
Q & У l-ln|x|
_ f i - -a ® 0> dbl: база данных
ПИ Таблицы _§1 Запросы ) E l Форк
[Готово
гЗ Отчеты S Макросы «<£ Модули
-оздать
NUM
Рис. 7.14
1 38 Конвертировоние боз данных из других программных сред
Импорт
~3 т\ &\тЩ --ГИГ
Найти файлы, отвечающие условиям:
Имя ф зила:
Хип файлов: Microsoft FoxPro (+.dbf)
_j j Текст/свойство:
w\ Дата изменения:
Имя J ] Classp.dbf _j] Classq.dof _j] Classr.dbf _j] Classt.dbf _d] Classtr.dbf _j] Es_dg dbf &Щ*1Л!Ж.ВВ j ] Pegion.dbf
_j] Region_d.dbf ^yj Tipchs.dbf
1 Размер 1 Тип 1 Кбайт DBF 1 Кбайт DBF 2 Кбайт DBF 1 Кбайт DBF 1 Кбайт DBF 1 Кбайт DBF
975 Кбайт DBF 6 Кбайт DBF 1 Кбайт DBF
13 Кбайт DBF
j Изменен 10/16/19.. 10/16/19.. 09/01/19.. 04/01/19.. 04/01/19.. 04/01/19.. 04/26/19.. 03/29/19.. 03/26/19., 10/07/19..
1 d
"
Импорт 1
Отмена I
Отбор...
По умолчанию устанавливаются не все типы файлов. Для их добавления служит кнопка "Выбор компонентов" в разделе "Доступ к данным" при устано&г.е. Другир типы данных есть и в Ofhce 97 V'aluPack.
Найдено файлов: 20.
Рис. 7 15
Microsoft Access
о с#и § а ?
:
м- в ' § а ? М ES O P E R : таблица
•
3J
• 1 jPe
DAY | OBJ 01/01/1997 11320210 01/01/1997 11800340 01/01/1997 12711615 01/01/1997 11450010 01/01/1997 11450010 01/01/1997 11490010 01/01/1997 11051467 01/01/1997 11410050 01/01/1997 11920280 01/01/1997 11710450 01/02/1997 11410410 01/02/1997 11450010 01/02/1997 11B70240 01/03/1997 12441110
П.» - I ' l l 1 . | . l
КИИ Т а б л и ц ы
©, -' ' m ' •
| KES 30115 30106 30110 10603 10Б03 10206 10201 10206 10206 10101 10206 10903 10200 10603
!>•! «a 6348
25- an-* <*'' SI XI
| SES 0 D 0 0 0 0 0 0 0 0 0 0 0 0 • I
og-^l- О ъъ~~ ** »*•*
I TES | Кемеровская об.
Ханты - Манснйс!
Москва
Ленинградская о
_ 1
&-М- 5)
• M J n l x l l
ШШ-ЬЫ DEXU | CES | Ob_iJ 01/01/1997 01*1/1997 01/01/1997 01/01/1997 01/01/1997 01/01/1997 01/01/1997 01/01/1997 09/29/1997 01/01/1997 01/02/1937 # 09/29/1997 01/02/1997 10/27/1998
Ново Стер Окгя! Мое» Mock Новп ШКОТ
ВОЛК
Нижн Тобо CBBTI
МоСк Сосн Били-]
1 • ним ' ' '••"'
-J
Рис. 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 File Edit View Insert Tools Window Help
СПЙ a a у * ^
ГЛ5ТЗП
b - ОД ' a" a s * ! - GJ R3 dbl: Database
Щ1]0реп k£ Design JDNew X
Objects
Lroups
0J Ej 0 j
• ED И 11 Ш m m m .i
Create table in Design view
Create table by using wizard
Create table by entering data
CLASSA
CLASSC
CLASSCC
ClASSD
CLASSE
CLASSG
CLASSL
CLASSO
CLASSP
1
a m m m m m m m m m m
*m
CLASSQ
CLASSR
ClASST
CLRES
ES_OPER
Filel
MVN
REGION
REGION_D
TIPCHS
UKRCHS
Менеджер
; 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. Каждый из этих языков занимает определенную функциональную нишу.
В настоящей главе был приведен краткий обзор возможностей этих языков и даны общие рекомендации по их использованию.
Глава IX Программирование
на языке 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
|ТаЫе Страны
Available Field?:
d Selected Fields
Код Страна
ШИШЕ
Cancel Next > Finish
Рис 9 1
Запросы на выборку 149
Ы Microsoft Access File Edit View Insert Format Records Tools
i Window Help
Ы, - 0 # B. v- •• - .
Щ]
lis1 Страны Query: Select Query H I s I D
•
*
Код | Страна | Примечания 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 |
ES OPER Filel MYM REGION REGION _D TIPCH5 UKRCHS Менеджер Назначение Приборы, представленные
Типы приборов Фирмы
на рынке2
• • •
»
Add
Close
Рис 9 3
Ы Microsoft Access - IQueryl: Select Query] [§l File Edit View Insert Query Tools Window Help
D c£ У , 5 • пл • rJ' ^ -^ • (3 . - IS lx f
• •
d J
У . Страны s_GUID A sjjneage
Страна Примечания _^
&• ! < Ъ Е А» - Cf V
T1
^
Рис 9 4
Перед вами та же БД, что была показана на рис. 7.17, только там открыта вкладка Tables (Таблицы), а на рис. 9.7 - вкладка Queries (Запросы). Дальше есть два варианта. Вы можете открыть запрос из окна базы данных или щелкнуть по кнопке { |. В обоих случаях произойдет запуск запроса, и на экране появится таблица (см. рис. 9.2).
Запросы но выборку 151
Ы Microsoft Access File Edit V i e , In» it Cjuei^ Ton I; Window Help
шз D \3 У X 4n IB Ь - сю - й' °S -M - (*) -
г5 All й lis1 Queryl: Select Query шш
Страны s_GUID ~3 sjjneage Код Страна Примечания _^
1
Field Table
Sort Shov-1
riteria or
an LTpaHti
0
-1 1
Страна Страны
0
Прнм»=-чзнич Страны
0 •
— —
>г
3
d
Рис 9 5
Microsoft Access
Do you want to save changes to the design of query 'Queryl'?
Cancel Yes No
Рис 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 ie* Incert Toole Window Help
Щ о р е п j ^ Design cflNew X Ее 7-"|:::Г YA
Create query in Design view Create query by using wizard
( 5 Query 1
# fffiWffif
1
i
Рис 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
iy File Edit View In;e i t Qnei / Tools Window Help
1 is1 Query 1 : Select Query
SELECT Страны Код, Страны Страна, Страны Примечания FROM Страны WITH OWNERACCESS OPTION,
1
H J n l x l
»
• _1пЫ _il
Рис 9 8
Запросы с использованием групповых операций Эта группа запросов предназначена для первичной обработки полученной информации - ее суммирования, осреднения и т д. Такие запросы особенно полезны, когда нужно регулярно представлять обобщенные справки для руководства компании.
Еще один пример простого запроса: необходимо получить справку о том, сколько человек погибло в результате различных аварий за два с лишним года - с начала 1997 по март 1999 гг. Полная информация по этому вопросу аккумулирована в файле Es_oper. В каждой записи о конкретной аварии сведения о жертвах содержатся в поле В том числе погибло.
Запрос, построенный таким образом, востребует данные только из одной таблицы - Es_oper.
Чтобы сконструировать этот запрос, сначала, как и в предыдущем примере, откройте окно базы данных. Затем задайте команды Create Query in Design view => Show Table (Создать запрос в режиме конструктора => Показать таблицу), как показано на рис. 9.3. В появившемся окне выберите опцию Esoper. На экране возникнет окно конструктора запроса (см. рис. 9.9). В макете таблицы Esoper на этом рисунке найдите интересующее вас поле В том числе погибло и щелкните по нему Дважды.
Итак, поле В том числе погибло зафиксировано в бланке запроса. Теперь подумаем, как получить сумму значений этого поля по всем записям. Суммирование - стандартная операция, и пользователю не надо специально организовывать сложение (хотя при большом желании вы можете сделать это). Для этого ^ожно использовать опцию Групповые операции. Щелкните по кнопке т\ на панели инструментов базы данных, и в бланке запроса появится дополнительная строка Total (Итоги). (Обратите внимание, что на рис. 9.4 ее нет.) Если вы теперь щелкнете в строке Total на пересечении с полем В том числе погибло, то
154 Программирование на языке SQL
Ы Microsoft Access I - 1 D | X | I File Edit Viev
j D \3 У IE - H
Insert Query Tools Window Help
& 4a !' r§] . °П г А"
{is1 Query! : Select Query ВЕЗ •
ES_OPER Пострадало E-cercclJ Б том числе рамем Рамено детей | Б том числе погиб Погибло детей _jj
LJJ 1
Field: Table: Total: Sort:
Show: Criteria:
or:
«1
Lh.
J Е: том чиспе погиб п ES OPER
^ ^ ^ ^ ^ ^ ^ ^ I
А>лЭ flin Мах —
Count StOev Var First .
П П
— —
±>r
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 H E I D I File Edit View Insert Format
Records Tooh Window Help
His1 Query2 : Select Query B E I E 3 |
• LI
SumOIB том числе погибло | 400:3
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 GROUP BY ES_OPER,[B том числе погибло] WITH OWNERACCESS OPTION;
1
J
Рис. 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
• Й У # El v'-M - H J Q ?
j fds X°oU Window Help
' • S l - i 0 - ' nS-^l Si 5J ^ Yn
is1 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 -Л © - ^ -
Filel
Бидь Наин Дата
ЧГ =J еновани* ЧС
БренчЧС zi bJj
Field: Table: Sort:
Show; Criteria
or.
ОаШ 1
J Пострадало
Ш _ _ _ _ _ _ . — 0
Погибло Filel
0
Характеристика Ч-Filel
0 J.ike """нефтепровод*"
.i
Материальный уще Filel
0
Мате—
*т -
^
3
Рис. 9.15
160 Программирование но языке SQi
сделать это за вас. А вот звездочки - исключительно ваша забота. Если ко часть слова, которая используется в качестве критерия, находится на лей " ^ правой границе поля, то с этой стороны звездочку можно опустить. Н0 к ""'"' вило, вам неизвестно точное расположение критерия. Поэтому звездочки '^ ставить всегда
В случае, который мы сейчас рассматриваем, в запрос включены все полней. Это можно сделать двумя способами. Первый путь: введите в бланк з-ля за-
аПро са каждое иоле по отдельности, как вы делали раньше. Второй вариант- ввет в бланк все поля сразу. Открыв пустое окно запроса, дважды щелкните МЫШЬю по строке имени таблицы на ее макете, чтобы выделить в нем все поля таблщ Затем установите указатель мыши в выделенной области и нажмите левую кип ку мыши. Не отпуская ее, перетащите стрелку указателя в строку Field первогг столбца в бланке запроса. Теперь отпустите кнопку, и все поля записи будут вве. дены в бланк.
Отдайте команду на выполнение созданного запроса (как это сделать, уже обсуждалось). В результате вы получите перечень аварий на нефтепроводах (см. рис. 9.16).
Теперь посмотрим, как будет выглядеть в данном примере инструкция SQL. приведенная па рис. 9.17.
Ы Microsoft Access File Edit View Insert Format Records Tools VV
D e; у a a v-id - у # a ^ is1 Query4 : Select Query
•
Re
Виды ЧС | На и мв но вэ н HI| 10109 Аварии на мап 10109 Аварии на мап 10109 Авария на мап 10109 Авария на npoi 10109 Авария на мап 10109 Авария на мап 10109 Авария на мап 10109 Авария на мап 10109 Авария на мап 10109 Порыв нефтеп^ 10109 Авария на мап 10109 Авария на мап 10109 Авария на мап 10202 Возгорание ем 10202 Порыв и пожар 10109 Порыв нефтепр
cord и | ' 11 1 > I и |»» | of
ь-ndow Help
ал - • *S -& - LTJ „
, , _ 1.
Дата ЧЭС | 01/24/1995 01/24/1995 03/18/1995 03/20/1995 04/06/1995 04/13/1995 04/20/1995 04/25/1995 04/25/1995 06/25/1995 06/13/1995 07/17/1995 12/14/1995 06/16/1995 02/11/1995 12/22/1995
18
висни Время ЧЭС |Дэта сообщения Время (^
00.00 01/25/1995 00.00 01/26/1995 00 00 03/18/1995 00 00 03/21/1995 00.00 04/07/1995 00 00 04/16/1995 00 00 04/25/1995 J
00 00 04/26/1995 10 30 04/29/1995 00 17 00.00 06/14/1995 03.15 07/17/1995 04.30 12/16/1995
12/30/1899 J 12/30/1899 12/30/1899 J
Рис. 9.16
на выборку
Fl|el.[KMHai
^ Ф У и [ЬияыЧС], File 1.[Наименование ЧС], File 1.[Дата ЧС], File 1.[Время ЧС], File 1.[Дата сообщения], __\ - i l , r -^ гопбщения] , File 1. [Код республики], File I .[Наименование республики], Filel .[Код области], __\ * ' n r i населенного пункта], File 1.[Название области], Filel.[Название района], File 1.[Название
пиквндации пос.
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 остается неизменной. ~ 1 1 9
162 Программирование на яэы,Р ?$0
FIIP £dit View Insert Query Tools Window Hp|p
i? Query4 : Select Query
FUel
ВИЛЫ ЧС
Н.зиисиое^мИ! Д«таЧС Время ЧС _-j
J U
Field Tabic Sort
Show Criteria
or
Название области Filel
0
Наэеэние г. эипна Filel
0 Тюменская область
Н^Еание смгекта Filel
0
Код ведомства Fllel
0
.1
Рис 9 IS
^ИДЩ*р:
Характеристика Ч Filel
Н
Jj
й е Г — q —1 pr
Like "нефтепровод*
.
У Microsoft Access Fie Edit View Insert F j m
• G? H § й ^ ^ - у § a ?
r FV u i d i l o o l s Wniduvt Help
ъ • ас • » s a - e j . £1 51 v ; Ъ *4 »- * © -a • (?).
IFP is1 Query4 : Select Query
•
ТГ R«
Виды ЧС | Наименован^ 10109 Авария на мап 10109 Авария на мап 10109 Авария на мап 10109 Авария на мап 10109 Порыв нвфтепг 10109 Авария на мап 10109 Авария на мап 10202 Порыв и пожар
coid н | 4 1 6 » 1 »i |»»| or
Дата ЧЭС | 04/06/1995 04/20/1995 04/25/1995 04/25/1995 06/25/1995 07/17/1995 12/14/1995 02/11/1995
в
Врамя ЧЭС |Дата 00 00 00 00 00 00 10 30 00 17 03 15 04 30
<l
сообщения! Врв 04/07/1995 04/25/1995 04/26/1995 04/29/1995
07/17/1995 12/16/1995 12/30/1899
_|
мя сообщеннл| Код распухли Н
00 00 00 00 00 00 00 00 00 00
[ 00 00 00 00
_. - 1
1 р
, к 1 И
^ I г
-' ••
V Рис 9 19
Запросы с несколькими критериями отбора, заданными в одном поле Мы уже привыкли к тому, что в одном запросе может быть много Крит для отбора записей Это вполне естественно, когда речь идет о разных записи, потому что каждое из них подобно независимой (или почти не мой) оси координат, а каждый критерий - конкретному значению коорД по данной оси. Но когда требуется задать несколько критериев отбора нительно к одному полю записи, задача усложняется. Посмотрим, как дует решать.
Зопросы на выборку 163
^ p j ) e l [наименование ЧС]( Filel [Дата ЧС], File) [Время ЧС], Filel [Дата сообщения], File 1 [Бремя сообщения], Щ j Filel [ЕиДЬ'"1^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 * ' 1А
т^Т<е7поДписаЛ, Filel [Название города]
sdOWrtel г н , ] вание области])» Тюменская область") AND «Filel [Характеристика ЧЭС]) 1*«''нефтепровод* )) Щ К « 5 5 OPTION,
J - I
Рис 9 20
Предположим, пользователя интересуют аварии не только на нефтепроводах, юесть при транспортировке самой нефти, но и шире - при транспортировке раз-1ПЧНЫХ нефтепродуктов: бензина, мазута, газового конденсата и др. Как выбрать в таком сучае критерий отбора? Можно просто ввести в иоле подстроку «провод», поскольку этот корень входит во многие слова, связанные с нашей темой: нефтепровод, бензопровод и т.д. Но тогда в выборку неизбежно попадут аварии на газопроводах (которых тоже немало), что не входит в наши планы. Итак, нам неизбежно придется задавать несколько критериев отбора для одного и того же паля записи п связывать их определенными логическими соотношениями. Покажем на конкретном примере, как это делается.
Предположим, надо получить справку об авариях, которые произошли: 3 на нефтепроводах, 3 на мазутопроводах; Э на бензопроводах; Э на продуктопроводах. 'Ibi предусмотрели практически все виды нефтепродуктов. Теперь построим
°ответствующий запрос. ак °°ыч1[о, сначала откройте пустой бланк запроса и введите туда все поля
11 (последнее делать не обязательно - любые поля можно вносить в бланк тдетьности). Критерий отбора сформулируйте так:
епровод OR «бензопровод* OR *мазутопровод* OR *продуктопровод* че говоря, вы выстраиваете логическую схему «ИЛИ». Теперь посмотрим,
1ы Реализуется на практике. с ок'но конструктора запроса для таблицы 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
Гп -!H aa- C? °S •& - (3 .
'1 g - ! ° n l All fi\:> ©-а- д .
1
i? QueryS : Select Query
IU
FUel
Виды ЧС Наименоеанш ДатаЧС Бремя ЧС _J
Field. Table.
5ort: Show:
Criteria: or:
Нагеание ведомсте Filel
0
.!.!
Пострадапо File 1
0
Погиб по Filel
0
Харэктеристиг а Ч г " ' Filel
0
Патер Filel
lihe """нефтепровод*" J.if-£ '""бензопровод*" Lih<е- "*мазутопроеод*" О е " 'продуктопровод*
.1
^ ^ ^ ™ ^ ^ ™
lantHtin ущ*
0
"•^"•Ч-^Т*]
f f 1этери.зпьнь • дг-Filel
0
1 1
4 -1
Рис. 9.21
HI He
Наконец, открыв инструкцию SQL (см. рис. 9.23), вы можете лишний р:т°е ' диться: все изменения, которые внесены вами в логические схемы критериев, точ но отображаются в предложении с ключевым параметром WHERE.
Надо сказать, что структуры критериев бывают самыми разнообразны \ при их построении вам потребуются точность и аккуратность, чтобы отбор '•' сей производился правильно. Например, у критериев, выведенных на pHL
неизменяемая часть слова - "*опровод*". Исключением является лишь *нет вод*". Казалось бы, можно сократить условие в той его части, где вводятся кр рии. Чтобы при этом исключить записи, связанные с авариями на газопр сформулируем условие следующим образом:
("•нефтепровод*" OR "*опровод*") AND Not "«газопровод*"
Если вы введете такое условие в запрос, а затем выполните его, то действительно отберет записи, удовлетворяющие заданному критери • ко в их число попадут и сведения об авариях, связанных с повреждени • провода или электропроводки. Поэтому учтите, что похвальное стр
3anp°Cbi на выборку 65
Ы> I n ^ t t Fgi mat Ptcorcte Tools Window (Help
•&•' ® .
ME Название обл| Названия района | Нззазимо об-ь| Код цдомств| Нзгвзиив_
1175DJ3J 11250540
1171044J 11870250 11710200 11710200
11710300 11670250 11710250 11710250
Mil
Коми ССР Коми ССР Челябинская о Иркутская обл; Республика Бг Тюменская OEJ Республика Ко Тюменская OBJ Тюменская об/ Тюменская O6J Тюменская O6J Республика Ко Тюменская об; Тюменская O6J Кемеровская о ^J of 21
31 км Возей - Головные Усинский район г Миасс (85 км юго-заг Тулунский район, г Ту/ Туймэзинский р-н, д Я г Уран (330 км северн* Усинский район, 130 кк, Еатинское месторожде Нижневартовский р-он Нижневартовский paiioi г Нягань (525 км сев г Усинский район, 100 ки< 15 км сев г Нижневар г Нижневартовск 3 км севернее г Анжер<
нефтепровод нефтепровод бензопровод нефтепровод промысловыйi нефтепровод нефтепровод нефтепровод нефтепровод д напорный нефп нефтепровод нефтепровод нефтепровод нефтепровод нефтепровод (
О 102211 108100 706411 706411 706411 102211 706411 706411 363100 706411 706411 700411
40 О
Корпораць Департам< Минтоп зн* МИНТОПЗН' Минтопэни Корпорац1 МиНТОПЭН! Минтолэн* АО "Рост Минтопэн* Минтопэж Минтопэн( акционерн
^
Рис. 9.22
Ш Microsoft Access
File Edi-
• • E
ndow Help
g l . - Ёг
мы
в -a • L-j. ? QaeryS: Select Query In lx -UECT Filel [EiutiHC], Filel [Наименование ЧС], Filel.[Дата ЧС], File 1.[Бремя ЧС], Filel.[Дата сообщения], Filel [Бремя
|Р!ЬГ Н М Я ^ F l 'el ^Кол РеспУ^1ЛИКИ]» Filel .[Наименование республики], Filel .[Код области], Filel .[Код населенного пункта], =£! п? 6 3 " 1 * ос™сти], Filel.[Название района], Filel .[Нагванме объекта], Filel .[Код ведомства], Filel [Название ведомства], ^ -1 Пострадало, Filel.Погибло, Filel.[Характеристика ЧЭС], Filel,[Материальный ущерб (колич)], Filel [Материальный ущерб \rr Fl'e1-Последствия, 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 ткосщ и упрощению критериев запроса иногда приводит к нежелательным "бедствиям.
3а"Рось/ с параметрами ;,;ц ' ' Д л я получения какой-либо справки приходится неоднократно вводить \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На:-Еание объекта |Код ЕЁДОПСТЕЗ
0 И
Ffcl Fill
0 [Введите область]
_ L Ы
ХарактеристикаЧ: М а т е р и и
0
3 Like ""нефтепровод*"
Рис. 9.24
Enter Parameter Value Введите область
OK Cancel
Рис 9.25
выборку 167
q ос Показана инструкция SQL для такого запроса. Вы можете вновь На Рпс- чго соответствующие изменения уже включены в предложение с клю
чевым пар .бедить л'сд" чметром WHERE. В данном случае в этом предложении применяется логи-
•ема «И», которая содержит в качестве операндов и "«нефтепровод»', и приведен^ критерия-
к'ТЯ CXe i 1 ^ ' ^ ' '
' -ю выше подсказку. Иными словами, Access воспринимает ее как значение
tM v e * 1гье,г 2'«У I" ' I Window Help ши
гз . тГс|1| ГЁНДС|Ч ] FilH [Наименование ЧС], Filel.[Дата ЧС], File 1 [Бремя ЧС], File] [Дата сообщения], Filet [бремя сообщения], Filel ~^~(\!*#у\1 Filcl [Наимен:ЕзНие республики], Fi lel.[Код области], 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). Вы сно-
Указываете в таблице Фирмы поле Название фирмы, а в таблице Страны -трана; однако в ячейке Criteria (Условие отбора) столбца Страна вводите
рни Россия (см. рис. 9.27). Отправив запрос на выполнение, вы получите ЧУ, содержащую отобранные сведения (см. рис. 9.28). Она похожа на табли-
V с 9.13, но вместо кода содержит название страны. - вы теперь откроете инструкцию SQL, то увидите в ней новый элемент, ко-
• ;з ; азьшает на связь между таблицами Фирмы и Страны. Это ключевое слово ' vm и п ерация INNER JOIN доступна в любом предложении FROM и позволяет ,Я1
, т ь с а мое простое связывание - объединить записи двух таблиц, если их ',Ъе
1е П о л я содержат одинаковые значения. При этом INNER JOIN определяет '"' им' МЬ'е та^лиЦЫ, а другое ключевое слово ON - объединяемые поля, кото-
К)т одинаковые значения.
iM
168 Программирование на языке SQL
Q Microsoft Access j File Edit View Insert Query Tool : Window Help
[ D t * @ . «L • oil • G? *g -a • C?j .' | П - H g i - ! ° n z AII - rj? \ © -a - СЭ .
i ? QueryS : Select Query
Фирмы
Кодфц*** Издание фир Код страны Адрес _ J
ssT
Страны 5 GUID -^J s_Lmeage Код
Яг5ЯИИ Примечания _J
Ш _tT
Field: Table: 5ort:
Show; Criteria;
or:
НЗЗЕ эмие фирмы Фирмы
и
«i i
Страна Страны
0 "Россия" • • D
-1
—
•г ы if
Рис. 9.27
1 В Microsoft Access File Edit View insert Format Records Tools '
D cs В a a v; es ь м- s § Й У ш
lis1 QueryS : Select Query
* « 1
Название фирмы pAO "Цвет" Нефть-Газ-Наука НПП "ЭКОНМКС" ЭКОХЕЛП ИНСТРУМЕНТС АО "ЭКРОС" Петербургский институт ядерной физики РАН ОКБ ТЕСТ фирмы "Аналитические приборы" ГЕОХИ РАН
1
^Window Help
- °§-м~ Z-I1\ ъ
| Страна Россия Россия Россия Россия Россия Россия Россия Россия
п|х|
»
©V ^ ^
1
л Рис. 9.28
Теперь попробуем усложнить задачу и сформировать универсальный запрос Предположим, вы постоянно работаете с той частью объединенного банка данных, которая включает сведения о контрольно-измерительных приборах. Иначе говоря, вы имеете дело с базой данных Контрольно-измерительные приборы. ВзМ
Запросы но выборку 169
IШ Microsoft Access ! File Edit View Insert Query Tools Window Help
i И • H S - ! • -is1 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 V iew Inser t Quel у T o o l ; W indow Help
w All „ й" \ © ^
i? Queryfi : Select Query
Назначение £._Gerieration _ l l •-_GUID •.Jjneagi Код Назначение _ J
J Приборы, . Номер моделг-lJ Категория Примечание! —' Примечание2 Год по KaiancjJ
Ф1фМЫ
Типы при... 5 GUID s j jneoge Код т т а Тип Примечания
4 1 £
Страны
йеп_Примеча! 5_Generation 5_GUID s_Lineage _^J
Кодфц»ы _d Название фис Код страны Адрес Адрес 2 _ J
J Менеджер *. Номер Кид фирмы Ф НИИЛИЯ
Имя
*
—I d
Field. Table
Suit Show
Cntena or:
Назначение Назначение
0
. I I
Тип Типы приборов
0
Номер модели Приборы, предстае
0 • •
Рис 930
В предложении с ключевым словом SELECT содержится перечень используемых в запросе таблиц и их полей, как уже говорилось, группы (Имя таблицы Имя поля) разделяются между собой запятыми, а внутри группы имя таблицы отделяется от имени поля точкой. Если в имени есть пробел, оно заключается в квадратные скобки. Параметр SELECT имеет следующий синтаксис:
SELECT [предикат] { * | таблица « | [таблица ]поле_1
[AS псевдоним_1] [, [таблица ]поле_2 [AS псевдоним_2] [, ] ] }
FROM выражение [, ] [ IN внешняя База Данных]
[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
D C& В & Ei ЧУ
ЖШ l ook Window H?lp
О-П '
5 1 J J ;,a -41 - О .
аБЕЗШЕНЕЯЗЯ Гт Назначение Тип Номер мода пи HU н-.-иение н* у, а'лни Н-значение не указано Н-лначение не указано 11 морение солености проводимости и температуры воды H-i значение не указано И пррение содержания хлоридов аммония, нитратов, Hmpt (1 морение параметров грунтовых вод И пррение мутности м температуры Одновременное изменение растворенного кислорода соле»-И мерение содержания кислорода И мерение растворенного кислорода, температуры провоД1 Д пговременный мониторинг растеоренного кислорода пров 11 мерение растворенного кислорода (I мерение растеоренного кислорода П..мерение температуры проводимости, кислотности и раст! 11 мервние проводимости, кислотности и ионов 7 е почренж И.мерение кислотности, проводимости, редокс потенциала Измерение кислотности проводимости редокс потенциала. Назначение не указано
Record м | . 1 ["'"^
ирогптиграф хроматограф хроматограф Многпорам Измер Фотометр Фотометр Многпорам Измер Изм Мутности Многпорам Измер Изм Раствор 02 Многпорам Измер Многпорам Измер Изм Раствор 02 Изм Рэстеор 02 Многпорам Измер Многпорам Измер Многпорам Измер Многпорам Измер Флюориметр
• 1 * М И о 1 7 е i L
Odyssey High Performance 1С Sys Odyssey Basic 1С System SRI Gas Chromalograph 8610C YSI 30 SCT Meier YSI 9000 YSI 9100 YSI 3000 T-L С Meier YSI 80 Turbidity Meter YSI 85 DO ^Conductivity Meter YSI 55 Grant/ YSI 3800 YSI 6000 YSI 50B YSI 52 YSI 800 YSI 3560 YSI Логгерная с ма контроля YSI Логгерная с ма контроля
J
Рис 931
Ш Microsoft Access
File Edit
• -
w Insert Quer I c r
• c# В ЬИр
гЭ-
ШЕ\
Ц.^,.Ш.Н.!ЛЯ!ЯЯ ма 1 Назначение .^Generation
.Jjneage Код J Назначение Ч
Приборы, Hi Мир МОДсЛк.^!
тегория Примечание 1 —* Примечание! Гол по ка гат • ]
Типы щи ,_GU1D ••^Lineagp
Код типа Тип Примечания
I. .
А Страны
"Ьеп_Примеча1 s_Generahon __
5 Jjneage _ J
Фирмы Кодф»фМ4 - l l Название фиг; 1 Кпд страны ндрес —' Адрес 2 zl
Менеджер 4-
Номер Код фирмы IЗМИЛИЯ
Ииа
л
—1 zi
ш А FHd
7аЫе На>начемир_ Назначение
Lite "кислотн*
«I I
Типы пр'иаорсв Нон^с мод Tin ПрИГиры, Пр-гДСТЗЕ Менеджер
.п Рис 9 32
172 Программирование на языке SQL
- DISTINCTROW; - ТОР.
Предикаты ограничивают число нозвращаемых записей. Если предикат не указан, по умолчанию используется ALL. Это означает, что выбраны все ноля заданной таблицы или таблиц;
• таблица. Указывается имя таблицы, из которой надо отобрать записи; • поле_1, поле_2. Указываются имена полей, откуда следует отбирать данные. Све
дения будут извлекаться из полей в том порядке, в каком они перечислены; • псевдоним_1, псевдоним^. Задаются имена, которые станут заголовками столб
цов вместо названий, заданных по умолчанию; • выражение. Здесь указываются имена одной пли нескольких таблиц, содержа
щих необходимые данные; а внешняя База Данных. Вводится имя тон базы данных, где расположены табли
цы, которые указаны с помощью аргумента выражение, но находятся за пределами текущей БД.
При выполнении операции SELECT Access 2000 находит указанную таблицу пли таблицы, извлекает из нее (из них) необходимые столбцы, выделяет строки, которые отвечают условию отбора, а затем сортирует или группирует результирующие строки в заданном порядке. (Отметим, что инструкции SELECT не изменяют ни самих данных, ни их расположения в БД.)
Ы Microsoft Access File Edit View Ipsei t Forrridt Records '^/mdow Help
V, n a •
П U Ъ M о.
l - ln |x |
luerjo: Select Query 1-laM Назначение _L Номер модели I Фамилия
[^онитиринг кислотности, прсеоднммсти, р Многпирям 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 •
пшш
0 d
is" Оаегуб : Select Queer Г№1 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,
Рис 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 и ESOPER. Поэтому сначала сформируйте новый запрос на выборку (Select Query) Он должен указывать те поля, которые вы хотите скопировать в создаваемую таблицу. Как и в предыдущих разделах книги, запрос будет построен с помощью конструктора. Все операции, связанные с созданием запроса, вам уже знакомы. Итак, введите в него все поля таблицы Filel, а также условия отбора: в поле Название области - критерий Название области, в поле Характеристика ЧЭС - критерий Нефтепровод* (см. рис. 9.35). Теперь с помощью кнопки j l проверьте, правильно ли производится отбор (см. рис. 9.36). Убедившись в этом, можете формировать запрос на создание таблицы. Щелкните по стрелке прокрутки справа от кнопки
Создание объединенной выборки 175
Ы Microsoft Access Fi l^ ^cJit '^ I m e r t Query T L U I ' ^ W H J V " HPlp.
PHTi
is1 Query": Select Query
FUel
1 ЕмдыЧ' НэИменОЕЭНИ
ДатаЧ Ef-мя И- j j
1
^ Field
Table Surf
Show nteria
or
Нсг.е^ние r fпэгтн Ffcl
0 Тюменгкая о&пагть
<j i
*арэгтер| Tin <,Ч~-"С F iH
0 Lil^ "нефтепровод*
ЕгемяЧС F H I
0
Дата «общения Filel
0
бр^мя г P.lel
плющения
0
Код per File,
nvGOHFM
— 0
•Г
Рис 9 35
I B Microsoft Access
File Edit View Insert Fci roar PeL
• i^ у # & v- © id - н # Ei vc ca
•
* Re
Виды ЧС | Наименование 1U1IJJ ^ЕНрИЯ на М'аП
1010Э Авария на м^п 10109 А&ария на wan 10109 Авария на мап 10109 Порыв нефтепр 10109 Авария на мап 10109 Авария на мзп 10202 Порыв и поч'т[:
,o,d н | 4 1 1 • | и | . . | о.
' I
и d T O L !Ь \Ajndnyv hjp|p
Ь - ^ - eg Л1 - О -П 51 v ; ^ M • * « B ^ - 0
Дата ЧЭС | Название оСл| Характеристика ЧЭС j Время U4/T6/19'J5 Ткменская об г В 55 км севернее г Ур< 04/20/1995 Тюменская O6J UJ за ветхости произои. 04/25/1995 Тюменская O6J Неустановленный тракт 04/25/1995 Тюменская O6J В Нижневартовском pai 06/25/1995 Тюменская O6J ВО время экскаваторно 07/17/1995 Тюменская O6J На комплексном сборне 12/14/1995 Тюменская об; Произошел порыв напо 02/11/1995 Тюменская ofj Из за коррозии металла
a -I I
•
.
ЧЭС [ ш ш 00 00 00 00 10 30 00 17 03 15 04 30
I B H B H J n M
Чэта сообщвния| В 0-1.13Г/1У95 04/25/1995 04/26/1995 04/29/1995
07/17/1995 12/16/1995 12/30/1899 J
-ч 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 Table Name рЯЗВЁЁП
<• Current Database
С Another Database
~3
ш OK
Cancel
Рис 9 37
SJ Microsoft Access ] Eile Edit View Insert Query Tools Window Help
ГТПТЙ]
П.-[М1^'Г4 • !°г i? Query7 : Make Table Query BSD
1
^
Filel
* Виды ЧС 4 Наименовани< Дата ЧС Время ЧС J
Field „Table
Sort Show
Criteria or
Дата ЧС Filel
0
•1 1
Название области Filel
И Тюненская область
Характеристика Ч File!
0
Время ЧС Flel
13 Lite *нефтепроеод*
дата сообщения Filel
0
Время сообщения —
Filel —
0
.г 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 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"
ГЛпГ*1
с? ч © in- о . i? QueryS: Select Query пша
1
^
ES_OPER
Дата ЧС Код насепепи Код вида ЧС Масштаб ЧС _J
Field Table Sort
Show Criteria
Tefcr сообщения Дата обноеяения и ES OPER
Like Тюменск* And Like ""нефтепровод*
Признак коктрдгтя населенный пункт—
-d
Рис 9 39
Щелкните по кнопке ОК, и на экране возникнет окно Append Query (Запрос на добавление) Перед тем как отдать команду на его выполнение, обязательно укажите, в какое поле таблицы-получателя Выборка1 надо поместить данные из соответствующего столбца таблицы ES_OPER Как вы помните, эти две таблицы различны по структуре, а также по набору и формату полей Поэтому соответствие обоих полей определяет пользователь согласно табл 9 1
Append
-Append To
Table Name
F Current Da
С Another D.
F >e fj.j'ne Менеджер Назначение
1 1
OK
Cancel
i*i ]
Рис 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' L i n d j W HPlp
• t£ У -о *, - an • й> =g -£ . d j .
• • H -'• *\ - I °n T AH . a'
His1 Query8 : Append Query
LdJ
ES_OPER
Дата ЧС Код населенн Кол ьида ЧС Масштаб ЧС _ J
field Table Sort
Append To Criteria
or
Р.зненс д>=теи Еэ OPER
Е том чигле погибп ES OPER
Погибло
Погибло детей Е5 OPER
Материопьный уще Е5 OPER
Матери эпьный ущ<
•J 1
в -а - щ.
Потери Е5 OPER
1
Причина Ч'-ES OFER
• - | П | Х |
. | п | х
d
^
— —
•Г
^1
Рис 9 4}
Запрос на удаление записей 179
Э Microsoft Access £le Edit View \\wrt Format Re
D & и a a v-' j- * ^ - и a a У и • Выборка! : Table
•
—
* R*
Виды ЧС | Наименование (l0109 Авария KJ нэп 10109 Авария нэ мап 10109 Авария на мап 10109 Авария на мап 10109 Порыв нефтепр 10109 Авария на мап 10109 Авария на мап 10202 Порыв и пожар 10301 10301 10301 10301 10301 10301 10301 10301 10301
ccid t'\ I ] 1 • I n 1>»l о
йГСИ T c m l W H «luvV H." Ip
' - Ь - ол- ' eg -S - Oil. ' • - £1 л! v ; "й A »«»/
Дата ЧС |Назваиме обл|Хэрактеристи{ 04/06/1^95 Тюменская of]; В 55 км ceeeph 04/20/1995 Тюменская об; Из за ветхости 04/25/1995 Тюменская O6J Неустановлени 04/25/1995 Тюменская D6J В НижневэртоЕ 06/25/1995 Тюменская O6J Во время экск 07/17/1995 Тюменская O6J На комплексно 12/14/1995 Тюменская O6J Произошел по| 02/11/1995 Тюменская O6J Из за коррозии 03/07/1997 04/27/1998 Тюменскз 11/17/1997 Тюмени 01/31/1997 01/19/1999 Тюменская. 05/24/1997 Тюме> 07/30/1998 Тюменская 07/25/1997 Тюменская о 07/27/1997 D Тю«,
М 7 . | |
© - 4 1 - 0
• Jnlxl
-И*| Время ЧС | Дата Сбобщви| Время соо< 00 00 00 00 00 00 00 00 00 10 30 00 00 17 00 03 15 00 04 30 00
04/07/1995 04Л5/19Э5 04/26/1995 04/29/1995
07/17/1995 12/16/1995
00 00 00 03/07/1997 05/05/1998 11/21/1997 09/29/1997 01/29/1999 05/24/1997 08/04/1998 07/25/1997 10/20/1997
00 00 00 00 оооо 00 00
01/09ЛЕ
01/1 ЗЛЕ 00 00
J j
^J
•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
• c£ У "i Ь - ю - й1 ^
nm M
О - У •n X! Й"„> s a - о , P is1 Queryl2 : Delete Query
AA
ES_OPER
Дата ЧС г од насепенн код еида ЧС 1ЬоитабЧС . J
^ШШШШШШШ-\Ф\ d
^ Field
Table DeWe.
Critena: or
Дата ЧС E' OPER where
< l 1
Код наг*- пенного п Е: OPEF where
• ' одеид э ЧС Е5 OPER Where "10101"
Масштаб ЧС Е5 OPER Where
М е т сообщения ES.OfER Where
Дата обн— E5 OPEP — Where
•Г ы ^
Рис. 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% от общего числа записей в таблице ESOPER (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
1:;::::'-,ПЭ\ L_—„_jr — " This wizard creates a query that finds records with duplicate field values in a single table or query,
ШШШ^^Ш?\х\ Design View Simple Query Wizard Crosstab Query Wizard
Find Unmatched Query Wizard
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
1 >.\л хлк m |
3 W, XXX V.-AY. I 1
2 у/ли xxx xxx |
4 мл xxx xxx р ^
2 xxx xxx ^
2 х:.х хг X
Vhich table or query do you i*<arit to feah.fi for duplicate fiel" values'
For example, to find cities with mote than one customer you wuuld choose a Customer table below
CLAS5T CLPEb
Filcl fT'rN REGION REGION D TIPCHS
J
J
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 information7
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>.
3 XI-.X XI-.X XXX
2 xxx хьх ххь
4 xv x"' XT
For example, if ynu chose to look hot duplicate Cit/ values, you could choose CustomerfJame and Addiess heie
A mailable fields Additional query fields
Дэта обнпБп^ния инфор Признак контропя Населенный п^нкт Серийный номер иапис Широта Долгота Объект |'МРГТГ|'|
Cancel
d 3ftvwMf.tr-
* mm
<Въг_к Next > Finish
Рис 9 48
Пока советуем принять имя Find duplicates for ES_OPER (Поиск дублирующихся записей в таблице ESOPER).
Запустив этот запрос на выполнение, вы получите выборку в виде таблицы (см. рис. 9.49). Здесь аккумулированы записи, в которых повторяются поля Дата ЧС, Код населенного пункта и Код вида ЧС, определенные выше в качестве критериев отбора. Как видите, таких записей всего 307, или 5,0% от их общего числа -вполне правдоподобная оценка.
Удаление повторяющихся записей Если следовать формальной логике, при удалении записей нужно использовать запрос на удаление. Можно так и сделать, но это не идеальное решение. Попробуем разобраться.
184 Программирование на языке SQL
1Ш Microsoft Access [ File Edit View Insert Format F
| О й @ # Й С ' * 4§> i >M.- H i i E i ? X. 4n t
ernrd; Tools w»"
, b -* 1
lis1 Find duplicates for ES_OPER: Select Query
. i .
Re
Дата ЧС | Код насаленн 01/01/199711U50010 01/01/1997 11450010 01Л37/1997 11450010 01/07/1997 11450010 01/03/1997 12710240 01/03/1997 12710240 01/08/1997 12710240 02/05/1997 11450010 02/05/1997 11450010 02/19/1997 11450010 02/19/1997 11450010 03/05/1997 11450010 03/05/1997 11450010
cord: к I • 11 i > I и I»»
| Код вида ЧС | 110603 10603 10206 10206 10206 10206 10206 10206 10206 10701 10701 10701 10701 оГм7 ?ЩГ
i ^ H - b M dow Help
i ia- °ё-М~ " l\ .- © V
•i- |n|x| Номер |_ i | 53B4H 725! 847 841!
2715 s
2784 i 3802 2289. 2197 883 826'
2946 2836
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 (Duplicates 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'"" IncHrf Tool. Window Help
n - н (a i-> с
шш
" " ' ' ' — ' •
1 • ES O P E R : Table
_•.
Field Name Код Еида ЧС дополн2 Группы население ТребоЕанич Услссие отбора
_. __ General Lookup |
Field See Format Input Mast Caption Default Value Validation Rule Validation Text Required Allow Zero Length Indexed Unicode Compression
I Data Type I Text Text Text Text
Field Properties
40
'yes No Yes (Duplicates OK) Ves
1 Description
zi
_ | n | x |
k l
J z J
Alio w
umc ode
corn pre
n ГСП i-hi_.
hel 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 ШШ
sU
ES_OPER Дата ЧС - d Код населенн—' Код вида ЧС Масштаб ЧС Текст сообще Ч
d
* \
Field Table
Update То' Cntena'
01
Vr поеме отбор a ES OPER [Дата ЧС1 Ь, [Код населенного п-/мктз1 8*. [Код вида ЧС1
-1 i
— —
>г
3
Рис 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 File Edit View Insert Format Pucord; J_on|- Window H.= lp
15ТЗП
D c& w, - •Л -
»i 51 ~; ^ #4 © | • ES_OPER : Table
•
Re
Код вида ЧС ;| Группы
001 008 001 017 017 008 001 010 018 017 001 001
cord ч I • | | 1 •
насоп Требования
001 031 001 031 031 031 006 031 002 001 001 001
I »i |>»| of 5927
^ М ^ ^ Н l-l | Условна отворэ 10/14/19981107001020501 07/09/19981107003030503 09/16/19981198001030505 01/18/19991191012030505 03/18/19991165001030503 03/18/19991165001030503 04/04/19991132012030501 05/27/19981180001030504 07/27/19981101253630502 07/27/19981160001030504 07/27/19981115132430503 07/27/19981186001030505
_±.
07/27/19981107001030505 ,
3 J _L
J
— 'I
Рис 953
в окне базы данных во вкладке Tables (Таблицы) появится имя новой таблицы -ES_OPERl. Откроите ее в режиме конструктора и измените то свойство поля Условие отбора, которое касается запрета на повторение записей. Сравните значение этого свойства, установленное для скопированной таблицы (см. рис. 9.55), с аналогичным значением для исходной таблицы (см. рис. 9.50).
Теперь займемся формированием долгожданного запроса на добавление. Алгоритм создания подобных запросов был подробно рассмотрен в этой главе, в разделе «Запрос на добавление записей в таблицу», поэтому здесь отметим лишь одну деталь. В данном случае таблицей-получателем является ES_OPERl,
Paste Table As T able Name
[Ш
|E5_OPEPl
Paste Option?
"" structure Only
<~ Structure and Dat
<~ Append Data to Existing Tal
Ok
Cancel
Рис 9 54
Удаление дублирующихся записей 189
\Ш Microsoft Access File Edit VIP Ir^prt
D & У • - Q
loo l : Wmdu! Help
А чи a l Ra (S
II • ES OPER1: Table
_• Field Name
>СЛиЕие Отбора
. , General ] Lookup |
Field Size Furrnat у Ь м ъ Input Mask ^ ^ H caption ^ ^ H Default Value 4 H | Validation Rule ' * " " " ' " Validation Text Requu ed Allow Zero Length Indexed Unicode Comoression
<l
\ Data Type | Те., г
Field Proper tier.
SO
По
Ves
i ^ ^ ^ ^ H H J n l x l
Ъ- ПО' og-M~
\v • [^ " ^ ^ ^ ^ H _ - l > 1
Description |
An
d
A A
index speeds
up search
es and urting on
the field, but may <;lni,\j
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
Номер ДатаЧС Код населен Код вида ЧС
zl
d
1
^
ы Рис 956
1 В Microsoft Access
File Edit View Insert Format Pecords; j 0 | s
• tS В & & v" * ' • " l ,
у- в а а ? • ES O P E R 1 : Table
• Номер | Дата ЧС | Код кчаолёнь
5247 0MJ1/1997 110511 4L 5316 01/01/1997 1152CJ2J 5329 01/01/1997 1141СЖ
725 01/D1/1997 1145О01 3760 01/01/1997 1149CJ01 2641 01/01/1997 11B0Q34 1565 01/01/1997 1192C32S 5400 01/01/1997 12711 61 3720 01/01/1998 1130CD01 3665 01/01/1998 1145CD01 4892 01/01/1998 11870)25 4089 01/01/1998 1198Qin9
Retcid " j < l f 1 • | н | » « | of 5 7 5 ^ 1
bVmdow
• ой -£1 51
Help
' °$ -а • О -ъъ ** >• * е м- д.
| Код вида ЧС | Масштаб ЧС | Текст сообщения | 1U201 30115 10206 10603 10206 30106 10206 30110 20101 10702 10303 10603
Q 0 0 0 0 0 0 0 0 0 0 0
• I I
К е м "рйЕ:СК5я об
Л е н и н г р а д е ц о
XaHTfci • Мантйо г Петропаыов г Москва Республи а Кс
Республика
• Н Inlxl
. M - h M Дата обмовлцЧ
01/01Л99 01/01/199 01/01/199 01/01/199 01/01/199 01/01/199 09/29/199 01/01/199 02/04/199 02/04/199 02/04/199 02/13/199 .
Рис. 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
This wiza crosstab data in a spreadsh
Z. II!
\
'•\ър\а\ s
at
^^^^ШШ?Ы\ Design View Simple Query Wizard Crosstab Query Wizard Ш Find Duplicates Query Wizard Find Unmatched Query Wi2ard
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 fields you want for the crosstab quen, result'?
To include fields from more than one table, create a query containing all the fields you need and then use thi«= query to make the crosstab query
LMSSO
LLASSP LASSQ
i_LASSR CLHSST
.LRES Ec OPER
_d
J
view
(' Tables Г Си С В th
farnple
...
H t a d e r l T JTML
JHeader2 JHeader3
Cancel Next >
Рис 9 59
Crosstab Query Wizard Which fields values do you want as row heading^
You can select up to three fields
Select fields in the order you want information sorted For example, you could sort and group values by Country and then Region
Available Fields
Виды ЧС Наименование ЧС Дата ЧС Бремя ЧС Дата сообщения Время сообщения Код республики Наименование респус Код области Код население го п/н
J
Selected Fields
Sample H&&/4 1 Название об |Название обла |Назеание обла |НазвгзНИР обг\а ^На Е ани»- "|Ьпз
Header 1 |Header2 |Header3 TOTAL
шшшшшпш^
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 each colurrn and row intersectiun?
Functions
I For example you cculd calculate the sum of the field Order Amount for each employee (olumn) by ccuntr/ and region (row)
Do /ou want to ^ummari^e ea h row"'
fv Yer in ludi- row sure
ЕидыЧС Дата ЧС Еремя ЧС Дата сообщения Е ремя сообщения h од респуб!ики Наименование республики г- од области У од населенного пунгта Ha j faHUr - С)И НЭ d
First Last Пах Г Tin
tDev Чит чаг
Sample
Название об Наигенованп Наименован!] Н а и м е н о в а ^ Ц
Название ofjiai Count Номер) Название обла! Название облс Название осп:
Cancel ч Езск Next >
Рис 9 6i
В результате на экране появится окно (см рис 9 62), где в формируемый запрос нужно внести последние уточнения Вэ-первых, мастер спросит вас What do you want to name your Query? (Как вы хэтите назвать ваш запрос'?) В принципе это ваше дело, но мы бы посоветовали тринять имя, которое по умолчанию
7 - 1 1 9
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
с? .:>' © -i lis1 Filel Crosstab : Crosstab Query l - ln lx l
Filel * Номер Виды ЧС Наименован! ДзтаЧС
4 U
-d
1
^
Field Table Total.
Crosstab Sort
Criteria or
Filel Group By Row Headinq
« I . I
Наименование ЧС Filel Group By Column Headinq
Номер Filel Count Value
Total Of Номер Ног* Filel Count Row Headinq
— —
>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
J J
Filel
Номер Виды ЧС Наименовании Дата ЧС zj
• _ | П | Х |
d
^
Field Table; Total'
Сг osstab Soit,
Cntena 01
Назеание области Filel Group 6y Pow Headmq
Наименование ЧС Filel Group Bv Column Heading
Номер Filel Count Value
Total Of Номер: Hof Filel Count Row Heading
— —
"пожар*
Рис 9.65
ш Microsoft Access I File Edit View Insert Format Records Tools Window Help
ШЕ1
fS-^ i -is1 Filel Crosstab : Crosstab Query a
Название области |Total Ot Номе|| Взрыв и пожа| Взрыв и пожа| Лесной пожз.£]
Костромская область Краснодарский край Красноярский край _ Курганская область Курская область Ленинградская область Московская область Мурманская область Нижегородская Новосибирская область Омская область Оренбургская облает}. Орловская область
Rtcuid: н LUP
1 14 5 4 1 7
20 3 1 2 4 1 1
'££"&$&&&. у?2^^-72
-I
Рис. 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 ©
is1 FilelCrosstab : Crosstab Query ГЛЕШ 1 Fi le l
Номер Виды ЧС Наименов Дата ЧС
fj ЭНИ(
А J
Field: Table: Total:
Crosstab: Sort'
Criteria: ot:
На:ванне области Filel Group Бу Row Heading
НаименоЕание ЧС Filel Group By Column Heading
Номер Filel Count Value
Total Of Номер: Ног Filel Count Row Heading
— —i
Like "* 'no*ap*" *н1эфте'*
<l 1 ..Г
Рис. 9.67
Итак, в настоящем разделе мы подробно рассмотрели структуру перекрестного запроса и уяснили для себя существенное правило: чтобы обработать группу записей и получить справку по множеству объектов, надо сначала четко определить само это множество. В данном конкретном примере нам необходимо суммарное число ЧС определенного вида по разным российским регионам. Значит, в первую очередь надо получить такие сведения по каждому из этих регионов. В ряде случаев для решения указанной задачи придется создать запрос на выборку.
Работа со средой Access 2000 без ее инсталляции Подобная постановка вопроса может показаться несколько странной, однако она имеет определенные основания. Предположим, разработчик сначала создал базу
198 Программирование на языке SQL
\Ш Microsoft Access ] File Edit View Insert Format Records Tools Window
j M - H j # & ! ? i • t V *" ' £1 51 j is1 Filel_Crosstab : Crosstab Query
Re
Название области |Total Of Номв|| Авария на Костромская область 1 Краснодарский край 14 Красноярский край 5 Курганская область 4 Курская область 1 Ленинградская область 7 Магаданская область 1 Московская область 20 Мурманская область 3 Нижегородская 1 Новосибирская область 2 Омская область 4 Оренбургская область 1 ~ cord и | • | | 1 » | и | - * | of 43
Help
ъъ м нвфт<| Авария на
А1
- H M _ b l x l
• ж © -^. г: шшпшш нафтв| Авэртл]
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 Address | _ J ram Files\Common Files\Microsoft Shared\MSquery j j Fil*
. a li id is Up Cut Copy Paste
MSquery
M s q r y 3 2 . e K e Прило•ение
Изменен 1 0 / 2 8 / 1 9 9 5 00.00 J
1Й Customer cdx -3| Customer dbf
UH Employee cdx -3| Employee dbf - Mscreate drr
" Msqrv32 aid ^ M s a r v 3 2 hip Ш Orddtail cdx
J | Orddtail dbf ( Й Orders cdx P ] Orders dbf (fa Product cdx Ci] Product dbf %1 0rvint32 dll Щ Supplier cdx yi] Supplier dbf '•*] запрос ! arv
J643KE \M M y Computer
|_ |п |х |
»И1 »
.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
Выбор источника данных Доступные источники данных Использовать! MS Access Database • admin
Отмена
другие
Уд а пить
Источники данных ODBC
£ведите источник данных
IMS Access Database
'Visual FoxPro Tablei Visual FoxPio Database FoxPro Files Paradox Files Text Files MS Access 97 Database MS Access Database I d
Рис 9 71 OK
Создать
Отмена
Удалить
Рис 9 72
конструктора (см. рис. 9.74). Если вы не установите явную связь между двумя таблицами по коду страны, то в результате будет выведен полный набор имеющихся значений: все фирмы и страны независимо от того, в какой стране находится та или иная фирма. Чтобы упорядочить информацию, лучше обозначить связь между таблицами, что вы и видите на рис. 9.74. Если потребуется перейти из этого
Работа со средой Access 2000 без ее инсталляции 201
Добавить таблицу Table Менеджер *] Назначение Приборы для измерения кислотнс Приборы представленные на рын Словарь стран Страны Страны Query Типы приборов
Лобаеить
Закрыть
'Т ирмы в России У .Опции
И Database ]c \Мои документы \E_jJ
Рис 9 73
1 •"- Microsoft Query Файл Правка Просмотр Формат Таблица Критерий Записи Окно
]дЕ]
ш и и шщ га игзп шщ i щ №? "•Запрос! пнтзп
Страны
Gen_npHMe43h s_Generation s_GUID s_Lmeage Kga ;
Фирмы Андрее -Адрес 2 Код страны Код Фирмы Название Фир| Примечания 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 s_GUIO o_Lineage Код Примечания Страна
Фирмы .Адрес J Адрес 2 Код страны Код Фирмы Название фир|_ Примечания
Попе Значение
и пи
Страна Россия 1
Код Фирмы Название Фирмы ] Примечания Страна
ft 1«Н1 Запись И "ТЛмТ
ГЕОХИ РАН Sarlin Aufomofion TAAG
_Mil l r ,n Rr. l i Г г . т г .л ,
Россия Финляндия Португалия
• г Готово ЧИСЛ 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
• " - M i c r o s o f t Q u e r y
Фа
I i i n Правка Просмотр
]{ЩЩ N Ф "•Запрос!
•
—
—
Название Фирмы | YSl incorporated Cole-Parmei Internatioric Alltech SEMSORTECHNIKMEI ,AMEL Instrument ОАО "ЦЕ-ет" Нефть-Газ-Начка НПП 'ЭКОНИКС" ЭКОХЕЛП ИНСТРУМЕ АО 'ЭКРОС" Петербургский инспгг ОКБ ТЕСТ фирмы "Ан. ГЕОХИ РАН LEEMAN LABS Sailin Automation DATA LINK Instruments Фирма не указана Wilks Enterprise. Inc FCI Envnonrnental Milton Roy Company
И Ш З а п м с ь П IMW1 <
Ф о р м а т
O U m Таблица Критерий Записи Огмо 9
йи \ш [ш ш Примечания
Для показа и правки критерия отбора выберите
1 Cij из 04 05 06 06 06 06 06 06 06 06 07 08 09 01 01 01 01
Код
J Просмотр К 1
| Примечания
щ> fjr ":
L ^ H J n l x l
L^LB.Inlxl 1 O p a i ^ i . USA _ j USA USA Германия Италия Россия Россия Россия Россия Россия Россия Россия Россия США Финляндия Франция Страна не ч.к; Страна не чк< Страна не чк; Страна не чк< ,
,числ [ Г~
Рис. 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
Ю 1 N mm и R 1 "«Запрос!
• Название Фирмы | Примечания
ОАО "Цвет" Нефть-Газ Начка | нпп 'зконикс" ; ЭКОХЕЛП ИНСТРУМЕ. АО 'ЭКРОС" Петербчргский ннстит ОКБ ТЕСТ фирмы "Ан ГЕОХИ РАН
Wi l l Запись 11 \ШП i l
Для показа и правки критерия отбора выберите
тнца Критср
1 Код 1 06 06 06 06 06 06 06
1 Просмотр К. |
й Записи GKHO 2.
1
—
Г !
Примечания
Г "{""
н —'
в
|п|ж|
п|х| 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
• Form Header * Detail
Код
Стран
Дрш Ш-ЯЭг- \ЛЯ
i't o n
лрана
• *
Примечания
Рис 10 1
Ml • 10 • i • И i I 2 - 1 -
> г .
\\£ Text Box: Код Format ) Data Before Update . . After Update . .
On Exit
On Lost Focus . . On Click On 0Ы Click . . On Mouse Down . On Mouse Move .
On Key Up On Key Press . . ,
Event | other |
I « Щ
\
f-'-ffj;
Щх\ Ш "~"""* ш
\\ ) ' 1
Ни
1 |_ !
1 •• 1
Рис 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 GoToPage GoToRecord Hourglass Maximize Minimize MoveSize MsgBox
Control Name
Comment
Action Arguments
Страна
g
j
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 |
Before Update Alter Update On Change On Enter On Exit On Got Focus Д Ш Я З 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
. All
JP--1
H I
Рис. ]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
: опрос на создание таблицы Ciat =-,heet ~ Edit-
Opens a select or 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
•
Action | Opf-nQu^ry OpcnQuny
Comment
_ | n | x |
4 J
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 o r o c e » ^ e c ' u r e Процедура, вызывающая реакцию объекта на определенное (Процедура £3 обработки событий) событие
У ,t j ii, ^>етод) Процедура, выполняемая над определенным типом обьекта
с, , irQ Оператор) Комбинация инструкций с ключевыми словами, символами, константами и переменными Одиночная строка или строки, объединенные символами продолжения строки (пробел и знак подчеркивания)
К rci / « ' г ^ 1 - л ю ч е в о е спово) Слово, имеющее определенное значение для компилятора VBA
Аг t /л/"А 'Р гУм е н т) Дополнительная информация, передаваемая функции или процедуре Sub Называется также параметром
0£ъек^;тно-ориентированный язык VBA базируется на трех основных компонентах- о 0 ° ^ ъ е к т ы ' события vi методы.
Объек*-™' к а к Уж е неоднократно говорилось выше, представляют собой элементы входя* я щ и е в с о с т а в приложений: таблицы, формы и их элементы управления, отчеты з 5 0 а п Р о с ы и т д - События подробно рассматривались в предыдущей главе.
ПоследЗ-Дним компонентом являются методы. Для каждого объекта определен набор метогЗ-дов ' к 0 Т 0 Р ы е могут быть к нему применены. Метод представляет собой действие <"' например GoToRecord (Перейти на запись), Apply Filter (Применить Фильтр) • Op 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
I File Edit View Insert Debug Run Tools Add-Ins Window Help
|И А - И ^ P M Propert ies Ф и р м ы х\
[фирмы Роггп_Фирмы _2J
В Event AfterDelCarihi i After Insert AfterUpdate BeforeDelConfi Befurelnsert —' BeforeUpdate KeyPreview False OnActivate OnApplyFilter OnClick OnClose [Event Prore< OnCurrent OnDblClick ,
ю - • и шШ Ы@ЪР (3 1 К dbl - Form_0HpMbi (Code)
JForm -J j c i o s e
Ы
O p t i o n E x p l i c i t
P r i v a t e Sub Form C l o s e ( ) On E r r o r GoTo E r r Form Clc
DoCmd. RunMacro "Макрос DoCmd.RunMacro "Макрос
E x i t Form C l o s e : E x i t Sub
E r r Form C l o s e : ИздВох E r r . D e 3 c r i p t . i o r Resume E x i t Form Close
End Sub|
з е
3 9 " 4 0 "
i«1 i |
l - l n j x l
»
- | Q | x |
d -
d 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
МЫ
Project-A3
Й @ Q EH Form_KOHTpont>HO M3f_±] Pal Form_MeneA>Kep ED Рогт_Назмйчение Ffl Form_npM6opbi
Щ Form_TMnbi Приборпе ED Form_<DMpMbi Fl) Рогт_Экологические Я ReportjDMpMbi
Г~! Modules 1 ~ Class Modules
Properties С тралы *J Страны Рогт_Страны J
in Tools Add-Ins Window Help
«3 dbl - Fomi_<t>HpMbi (Code)
9i dbl - Form Страны (Code) IrJRl ICipaHd " "^ j JAfterUpdate J
№
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 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 Dim a n s w e r As I n t e g e r
a n s w e r = D C o u n t ( " [ С т р а н а ] " , " С т р а н ы " , I f a n s w e r = 1 T h e n
MsgBox P r o m p t : ' " З н а ч е н и е уже с о д е р ж и т е — ' DoCmd.RunKacro " Н а к р о с 2 7 " E l s e DoCrnd.RunMacro " Н а к р о с 2 " DoCmd.RunKacro " Н а к р о с 1 " MsgBox P r o m p t : ' " З а п и с ь в в е д е н а " »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, Sh i f t As Integer)
Для того чтобы выполнить созданную процедуру, надо ее вызвать. При этом аргументы можно задавать как по позиции, так и по имени. В первом случае значения аргументов располагаются в том же порядке, что и в определении процедуры, и разделяются запятыми. Это будет выглядеть следующим образом:
Название_фирмы_Кеуир 15,10
или Cal l Название_фирмы_Кеуир (15,10)
Основные положения VBA 00^
При задании аргументов по имени их !,„__,, .,п^.„„ ,,„ е v i „ эядок можно не соблюдать, так как определяется каждый аргумент. П о с л е и м е н ^ - , , . ^ , , ^ „ „ ' р . ч . ' J РГУментаследуетдвоеточие(:)изнак равенства (=). Аргументы при этом раздел,, _„„„,., u y
^ v / i j i i "• ы запятыми. Ниже показан пример такого задания: ^ ^
Название_фирмы^Кеу11р. Агд2:=10, Агд1:=15
С помощью описателей ByVal и ByRef (см й „ л 1 о\ 7 v юл. 11.J) можно осуществить передачу переменных в процедуру пли ф у н к ц м „„ , „„ , F J , F p J M i .у качестве параметров либо по ссылке, либо по значению. Ьсли переменная пе„„л„ , , „ чается по ссылке, то процедуре или функции будет передан адрес этой перемен- „ „ ^ Jy
^- J v r ^ и в памяти. Тем самым вызываемая процедура может изменить значение факти „
v J F , ^ ского параметра, если она произведет какие-либо действия над параметром. , „ ^ v v ш же фактический параметр передается по значению, то процедура или фун„„ „ „ l y
. ' J K H J ия получают в качестве аргумента только фиксированное значение этого паг, „ v J 4 ' тетра, но не саму переменную, используемую для его изменения. ' J '
Способ передачи параметров процедуре i . ~ ' п и \ функции определяется при описа
нии ее аргументов. Описатель ByVal задает пс,_„ „ „ , г
с ' Дачу по значению, a ByRef-по ссылке. Ьсли явное указание спосооа передачи J и )аметра отсутствует, то по умолчанию подразумевается передача по ссылке. " J
Поясним сказанное на примере. Допусти?. , 1 f ^ J [меются следующие описания двух процедур: "• J
Sub Main() а = 10 b = 20 с = 30 Cal 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 устанавлива-•* значения переменных a, b и с, после чего „„„ v , , ' -Дает их в качестве фактических араметров процедуре Examplel. При этом пег. „ „ „ , „ r r ' Jy v м аргумент передается по ссылке Ьт- 119
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 rg l is 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 же, что и On.GoSub, но не возвращается к следующему оператору после завершения
Команды, осуществляющие выполнение цикла
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)] I c U B I e Edit View Insert Debug Run Tcol i Add-Ins Window Help
Propei-ties - Ниванне фнрмыХ| {Название фир СспЬэЬг
Alphabetic Categorized
~3
OfdBr.rder5tyle 1 5crollBarAlign 0
5peci3lEfTect 2 TextAlign 0
Top 623 Visible True
Width 4560 В Other
(Name) Название Ф
AllowAuroCtirrt True
ColumnHidden False
ControlTipText
Control Type Ш
ГСЕИНИИДИ '
3]
J 2i
На шание_фирмы * j LostFocus
P r i v a t e Sub Название_фирмы_ЬозсГосиз ()
End Sub
l - la|x|
~3 ^
_J
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
Properties Назвакке фир|Х|
Название ф* Combcbox _ J
IAlphabetic Categorized I
OldBorderSty 1 ScrallBar Align 0 SpecialEffect 2 TextAlign 0 Top
A
623 True 4560
Название <\
Visible Width
S Other (Name) AHowAutoCot True ColumnHiddei False ControlTipTe ControlType 111 Щ Э Е Е Е Название.
1\Г№ J
(Название фирмы 3 Privace Sub Название_фирмы_1.озсЕосиз () On Error: GoTo Err Название фирмы LoscFocus Click
Егг_Название_фирмы_Ьозг.Госиз_С11ск;: MsgBox Err.Description Resume Ех1С_Название_фирмы_Ьозг:Госиз_С11ск
End Sub
M3 Sjjcj'
n 1
_l
^
Рис 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 forms1[Фирмы]1[Код фирмы] = [Cod] DoCmd RunMacro Макрос14
End I f DoCmd DoMenuItem acFormBar, acRecordsMenu, 5
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)
acMenuVer70
Я Microsoft Visual Basic - dbl - [Гогт_Фирмы (Code)] >'\ <£i File edit View Insert Debug
•Pmjecf ЛЗ X\
Ъ n "Б
Щ*} Run Tools AdcHns Window Help
' • II • M Ы & V ^ © Ln 15D Col 64
^Jj9J2<j
- ^ d b 3 ( d b l ) . ^ -_\ Microsoft Access CI a
ГП Рогт_Контрольм Ш Рогт_Менед,жер ПИ Рогт_Назначемн( Щ Рогт_Приборы Ш Form_C граны [Ц Рогт_Типы Приб( ПИ FormjtiMpMbi СИ Form_3Konorn4^-(
Propertres Название фирмыХ|
[Название фир СотЬсЬох »|
Alphabetic I Categorized |
AfterUpdate Ма*рос36 AllowAutoCorrec True
Натание_фирмы H LostFocus "3 Private Sub Название_фирмы_ЬозсГосиз () On Error Go To Егг_Название_фирмы Clic)--L irn Cod As Integer Dim answer As Integer
answer = DCount("[Название фирмы]", If answer = 1 Then MsgBox Prompt:="3начение ухе содержится DoCmd.RunMac г о "Макрос 3 2" Else DoCmd.RunMacro "Karpoc2" DoCmd.RunMacro "Макрос1" MsgBox Prompt ="Запись введена" Cod = DMax("[Kofl фирмы]", "Фирмы") + 1 Forms'[Фирмы]'[Код фирмы] = [Cod] DoCmd.RunMacro "Макрос14"
End If Irr Название_фирмы LostFocus_Click
MsgBox Err Description Resume Exlr:_Haзвaниe_фиpмы_LostFocus_CllCk
End Sub
3
"Фирмы", "[Название фигны
файле и повторно не
J
-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
Г ~Б
Страна
Ашес
Аппес2
Примечания
Изменить запись
~3
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
Агюес2
Примечания
Изменить запись
Название фирмы jОR101 11
Стоана
Дпо ее
3
d
МЯЖЩЩИВРШ'Ж'ШЖШЯИ»
Удалить запись
«-& ч -Новая страна
Record и | . | | 27" > I >• | » » | of 27 .J j j ,
Рис / / / /
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
hi - a a a zr- A I Z I Y / П 51 1]
53 -• +
ПЙТЗЛ
© В Назначение шш
Код назначения
Назначение прибора
Примечания
Изменить запись
W
Удалить ЗаПИСЬ
Record и | < | J 37 > 1 " | " > | of 37 J j j
Рис ? / 15
Удаление записи с установкой на последнюю запись 247
к событию On Click (Щелкнуть по кнопке) в таблице свойств кнопки Command Button (Командная кнопка) - см. рис. 11.16. Далее следует выбрать опцию Удалить запись
Как и раньше, с помощью кнопки _^ откройте окно модуля. Оно выглядит так же, как аналогичное окно, которое было показано на рис. 11.6. Процедура опять будет формироваться в окне модуля, по и на сей раз речь пойдет только о текстовых операторах.
JOn Mouse Down , •On Mouse Move . . fori Mouse Up . . . . On 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 шш •
Action Set^'atningsl
1 J
Comment
— И J
• н и Warnings™
Action Arguments
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 Count: («expr») | J
d
P j Назначение (±1 Tables
1 (±J Queries Lfl Form? & Reports P i Functions
L Q d b l P j Constants CD Operators P i Common Expressions
<AII> Arrays Conversion Database Date/Time DDE/OLE Domain Aggregate Error Handling Financial General Input/Output Inspection Marh 23Я5ЕЯИИИ1 Proaram Flow J
nputBox$ MsgEox
InputBox(prompt; title; default: xpos; ypos)
LH
Cancel
Undo
~ р * ] &| = > < 4 H And ЬУ rTot I » j ( ) 1 Paste | Help |
-Й РИС. / / /S
эезюме В главе рассматриваются основные положения языка программирования VBA, который стал стандартным средством макропрограммирования для различных приложений. Сфера приложения VBA практически безгранична. В качестве примера в этой главе выбрано «обустройство» собственно базы данных - обеспечение удобства работы с ней для пользователя. Обычно у каждого пользователя свои взгляды на то, что удобно, а что нет, и нередко сервис базы данных приходится дорабатывать. Обращение к VBA оправдано тогда, когда средства, заложенные в Access, либо не позволяют добиться нужного результата, либо предлагают сложное и громоздкое решение. В качестве конкретных примеров использования языка VBA в настоящей главе рассмотрены: - предупреждение дублирования записей при их вводе с помощью формы; - установка на последнюю запись при открытии формы; - удаление записи с дальнейшей установкой на последнюю запись.
Глава XI 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 могут возникнуть проблемы, например указание на несовместимость клавиатуры. Кроме того, перед
2 5 2 Другие возможности 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 за
• SETUP
i Maintenance Mode
) Selecting Features
Installing Office
<l
э э
_ ! '
t ® d
X -1 Integrated File Management Microsoft Access for Windows _ J ' _ J ~ Z3~ ttJ> 0-J -O J -_ J -_ J ' Micros
Help Typical Wizards Additional Wizards Sample Databases Snapshot Viewer Database Replication Calendar Control Client Server Visual Design Tools
oft FrontPage for Windows
X -1 Microsoft Office (French) В X " I Microsoft Word for Windows
X - | Address Book
1
d
J
• |
Description: Applications and support files for use with Microsoft Office.
Size: Selected Features: 16MB
Help Cancel
Free Disk Space 1153ПВ
< < 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) - полностью удалить пакет с компьютера. ьнейшие действия пользователя не содержат ничего необычного.
1f£ 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 Micioioft Office 2 0 0 0 Maintenance Mode из OfTice Maintenance Mode
Please select one of the following options
SETUP
Maintenance Mode
fffl 'iJ
Help
Repair Office 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 Delete Microsoft Office 2000 Premium trorn this computer.
Cancel
Рис. 12.5
Условное форматирование Условное форматирование позволяет представлять в особом формате поля, которые соответствуют определенным, заранее заданным критериям. По функциям эта операция является разновидностью пользовательского запроса к базе данных. Более того, практически все критерии, применяемые в условном форматировании, могут задаваться и в запросе.
Пример условного форматирования Рассмотрим условное форматирование на конкретном примере. Откройте форму пли отчет в режиме конструктора (Design view).
На рис. 12.6 показана форма Фирмы, взятая из базы данных Контрольно-измерительные приборы. Здесь форма открыта в режиме формы (Form view), а на рис. 12.7 - в режиме конструктора. Наиболее интересен второй вариант. Выделите в форме Фирмы поле, которое хотите представить в условном формате, -Название фирмы (см. рис. 12.7).
Теперь в верхней строке меню Format (Формат) активизируйте опцию Conditional formatting (Условное форматирование). В результате на экране появится
/36 Другие возможности Access 2000
Ы Microsoft Accet * - [Фирмы]
ол - °S © Si Xi v/ *й • • >* Э й -
isH
(3 Коп Фиомы 24
Название фирмы jLEEMAN LABS
Стоана
Апоес
~Б США
Ашес2
Примечания
Изменить запись
Российское представительство ЦНИИ КМ "Прометей" и Ассоциация "Центролаб" 1ч1186г ОЯНКТ-ПАТРППУПГ нлб п Мондгтыпш 1
Удалить запись Новэд страна
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:
Название qDupMbi
гоан
• №
Ашес
>име
мы
-пни
Исметаь
К О Д ф П р М Ы
т: I 1 = • Название qnipMti Т.
Код страны 7> 1 • - • - - • • 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
Default Formatting
This format will be used if no conditions are met:
Condition 1 ~ -
|Field Value Is ^ ] |equd to
Preview of format to use when condition is true:
AaBbCcYyZz
•*] |"LEEMAN LABS
AaRhC.rYyF7
A d d »
В / U "N - A
в i I и ! Ь -1 A .
Delete .. OK Cancel
ИЕ1
Рис 12 8
Microsoft Access - [Фирмы]
к - и & а у] 1Щх]
п-о - . I • » • * ; ' © д - | 5 U
Коп Фиомы 24
Название фирмы LEEM.AN LABS "3
Стоана
Ашес
Агюес2
Примечания
США И Российское представительство ЦНИИ КМ "Прометей" и Ассоциация"Центролаб" 191186 г Оянкт-nftTfinfivnr иаб п Монястыгжи 1
Record: и | < | f 24 > | " | f * j of 27 ' zJ
Рис. 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
Left margin
Pjght margin
Top margin.
Bottom margin-
Default database folder
|С.\Мои документы\
f? Recently used file list:
W Provide feedback with
Г~ Compact on Close
Web Options . 1
|ЭЕШ5Я
] : , 199crn
|2,199crri
|z,499cni
SOUnd d
Name AutoCorrect
W Track name AutoCorrect info
P Perform name AutoCorrect
W Log name AutoCorrect changes
New database sort order :
j ' jeneral
Use four-digit year formatting
P This database
Г - All databases
d
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 Back-end Database
JJ Мои документы "3 *-' a 33
® Ц, П Ь Tools Access
Zrnono
Гридин
Мои рисунки
Монография
МЧС-развитие
Универсум
1 Файлы справок
щВаскир of Проектирование базы данных.wbk
KjCATMAPl.xls
ydbl.mdb V | d b 2 mdb
Vjdb3 mdb ydb4 mdb -^]dbS Idb
^ d b S mdb
$ } dbS_be mdb
V | db6.mdb
%Jdb7 mdb
~ ' desktop mi
T^JESJDPER.xIs
[л] Microsoft Office.ZIP
j ^ J Old Excel Documents
# ] Paget.htm
^ ] Визитка.doc
Ч З Володя.doc
^Jror ieo.doc
i<1foweocT,lex
!л]гомеост1.1ех
^ Д о п о л н е н и я к плану монографи
±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 My Pictut es My Webs Zmono Гридин Мои рисунки Монография МЧС-разбитие Универсум Файлы справок
V) dbl.mdb ydo2.mdb ydb3.mdb Vjdb4.mdb ^JdbS.mdb
^J Old Excel Documents 3 J Старые документы Excel
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
0) 0 ] ЕЕ Ш EI Е! т т т ш т т т т щ т т
Cre.^e roirn in Design view
Create form by using wizard
Менеджер
Менеджер Subf orrn
Менеджер Subforml
Назначение
Приборь i
Страны
Страны1
Страны?
Типы Приборов
Фирмы
Фирмы Subform
Фирмы 1
тВВт ФирмыЗ
Экологические приборы
±1 I >|
Рис 12 16
*езюме 1. Потенциальные возможности Access 2000 несколько шире, чем те, которые
использованы и показаны в книге. Поэтому заключительная глава была посвящена описанию этих нераскрытых моментов и особенностей.
2. Желательно, чтобы при первой инсталляции среда Access 2000 устанавливалась не отдельно, а в составе пакета Office 2000. При этом, чтобы не возникало каких-либо непредвиденных затруднений, лучше устанавливать пакет на базе версии Windows не ниже Windows 98.
3. Условное форматирование позволяет представлять в особом формате поля, которые соответствуют определенным, заранее заданным критериям. По функциям эта операция является разновидностью пользовательского запроса к базе данных. Более того, практически все критерии, применяемые в условном форматировании, могут задаваться и в запросе.
4. В предыдущих версиях Office буфер обмена был один, и в каждый момент времени с помощью буфера можно было работать только с одним файлом.
Objects
• «ш?
^ 1
3
Резюме 267
В пакете Office 2000 таких буферов стало 12. Соответственно, пользователь может обрабатывать одновременно до 12 файлов.
5. Access 2000 автоматически переносит изменение имени поля на все зависимые от него объекты: запросы, формы, таблицы, отчеты, поля. Поэтому пользователь может без дополнительной корректировки продолжать работу с приложением.
6. Access 2000 предоставляет возможность разделить базу данных на две независимые части, точнее говоря, выделить из существующей БД, которая остается неизменной, еще одну, причем новая база данных будет включать только таблицы. На их основе впоследствии можно наращивать информацию и развивать новую БД.
7. Как правило, файл базы данных является довольно «рыхлым». В нем много пустых или частично заполненных ячеек. Поэтому возникает необходимость сжать базу данных, когда она не используется, чтобы БД занимала меньший объем памяти. В активном же состоянии база данных разворачивается до исходного размера. Такое сжатие в Access 2000 может проводиться автоматически.
8. Работа с БД, выполненной в одной из предыдущих версий Access, в среде Access 2000 требует предварительного преобразования (конвертации). Эту же операцию приходится выполнять и в случае обратного перехода.
Алфавитный указатель
тоотчет 92, 103 тостраница 108, 122 тоформа 56 шерсанд 185 тумент 144
зы данных 12 БДЧЭС 125, 140 Контроль ЧС 125, 140 Контрольно-измерительные триборы 124 нки данных 9 блиографическая информация 18 блиотекаУВА 229 анк 116 ianpoca 149 сонструктора 156 •траницы 116
ладка ivent 206 -orms 221 4асго 144 Queries 148 ieports 221 ables 150 эженные 'тчеты 97 траницы доступа к данным 114 аблицы 50 юрмы 62 гшний ключ 47 ражение 223
Г Гиперссылки 84 Группировка 91, 95, 97 Групповые операции 153
д Двумерные файлы 46 Дизайн 14 Динамические ссылки 106 Документ 19 Драйвер ODBC 198 Дубликат 232 Дублирование 181
3 Закладка 86 Запись 114 Запрос
SQL 147, 157 к серверу 147 на добавление 188 на изменение 146 на обновление 147 на объединенную выборку 173 на поиск повторяющихся записей 181 на присоединение 134, 147 на создание таблицы 174 на удаление 184 перекрестный 193 подзапрос 147 с дополнительными условиями 159 с использованием групповых операций 153, 154 с параметрами 166 со связями 169 управляющий 147
Алфавитный указатель 269
И Иерархические
дерево 51 структуры 50, 54
Импорт 125 Инструкция
On Error 234 Resume 235 SQL 151, 157
К Картографическая информация Ключевые слова 227
INNER JOIN 167 ON 167 WHERE 158
Код 31 Visual Basic 260 записи 237 первичный 30 репликации 48
Количество записей 164 Командная кнопка 247 Конвертация 14,124 Конвертеры 123, 140 Конкатенация 185 Константа 223
внутренняя 224 символьная 224
Конструктор кнопок 72 макросов 214 отчетов 92 страниц 115 таблиц 32
Контекстное меню 67 Копии таблиц 263 Корневая часть слова 159 Критерии
выбора СУБД 14 выражения 256 значения поля 256
Л Логические
выражения 15 структура 23
м Макрокоманды 142 Макрооператоры 142 Макрос 142 Маркер 117 Мастер 14
запросов 181 кнопок 70 отчетов 95 печати связей 52 подстановок 42 преобразования поля 34 страниц 109 таблиц 28, 54, 86 форм 58
Методы VBA 220 Модуль 100
класса 223
н Набор ANSI 210 Начальная форма 64, 90
О Обработка
ошибок 234 событий 206, 217
Объекты 220 Окно
базы данных 75 диалоговое 60 конструктора 94 мастера 70 модуля VBА 221 редактирования связей 48
Операнд 167 Операторы 143 Операция замены/вставки 132 Описатели 225
270 Access 2000
Отношение «одип-к-одному» 31 Отчет 95
п Панель инструментов 66 Первичный код 30 Переключатель 43 Переменные
неявные 223 область действия 223 явные 223
Подстановки 42 Подчиненная форма/отчет 92 Показатель 18 Получение фокуса 210 Поля-дескрипторы 23 Построитель
выражений 232 макросов 232 программ 143
Потеря фокуса 208 Префикс 127 Программа VBA 221 Программная среда 13 Просмотр объектов 229 Процедуры
Function 227 Sub 226 VBA 145 инструкция 226 описание 226
Р Расширение
.dat 125
.dbf 125
.doc 84
.map 82
.mdb 105
.snp 99, 104 Режим
SQL 158 диалога 12 конструктора страницы 108, 122 конструктора форм 61 корректировки 12 начальной загрузки 12
реорганизации и анализа 12 таблицы 28, 54, 155 фильтра 75 формы 130
Реквизит 18 значение 18 имя 18 признак 18
Репликация 33, 34
С Свертка информации 51 Сводная таблица 119, 122 Свойства объектов 220
Format 35, 54 Связанные поля 48
каскадное обновление 49 каскадное удаление 49
Связи 47 Сервер 118 Словарные файлы 139 Событие 205 Сортировка записей 134 Списки
аварий 160 аргументов 227 полей 119
Средства управления программой 230 Статическая копия отчета 99, 104 Столбец подстановки 43 Страница доступа к данным
анализ данных 107 ввод данных 107 групповая 121 диалоговый отчет 107
Структура двухуровневая 51 трехуровневая 51
Структуризация данных 19 СУБД 127, 131, 140
Т Таблицы
базовая 56 дочерняя 48 родительская 48
Алфавитный указатель 271
Твердая копия 55 Тип объединения 49 Тип связи 49 Типы данных 32
Autonumber 33 Currency 33 Data/Time 33 Hyperlink 34 Lookup Wizard 34 Memo-поля 33 Number 33 Text 33 Yes/No 34
У Условия отбора 184 Условные операторы 230 Уточнение 22
Ф Файлы
данных 15 источник 126
Фактографическая информация 18 Фильтр 232 Флажок 112 Фокус 206 Форматы данных 14, 123, 140 Формы 55, 90 Функции 155, 225
встроенные 144 специализированные 144
ч ЧС 84, 87, 124, 174
э Экспорт страницы доступа к данным 119 Элемент
данных 19, 69, 120, 208, 210 управления активный 208
Я Языки программирования 141, 145
С CD-ROM 252 Clarion 3.0 12 Customize 252
D Data Access Page Toolbox 106, 122 Data type 32 dBase3 125 Description 32
E Excel 34, 82, 83, 121
F Field name 32 FoxPro 2.5 12
H HTML 106
M Microsoft Office 82, 83 MS Query 199
N Null 78
О ODBC 198 OLE 34
s Setup.exe 252 SQL 141
V VBA 219
W Web
браузер 118 сервер 118