165
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Нижегородский государственный университет им. Н.И. Лобачевского В.Л. Тарасов Работа с базами данных в Access 2003 Учебно-методическое пособие Нижний Новгород 2012

В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Нижегородский государственный университет им. Н.И. Лобачевского

В.Л. Тарасов

Работа с базами данных в Access 2003

Учебно-методическое пособие

Нижний Новгород 2012

Page 2: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

2

Содержание Предисловие ....................................................................................................................................................... 6

1. Основные понятия .................................................................................................................................... 7 1.1. База данных ....................................................................................................................................... 7 1.2. Архитектура системы баз данных ................................................................................................... 8

1.2.1. Три уровня архитектуры ................................................................................................................... 8 1.2.2. Языки работы с базами данных ........................................................................................................ 8 1.2.3. Функции администратора БД............................................................................................................ 9 1.2.4. Функции СУБД ................................................................................................................................. 9 1.2.5. Архитектура клиент/сервер..............................................................................................................10 1.2.6. Распределённая обработка ...............................................................................................................10

1.3. Проектирование базы данных ..........................................................................................................12 1.4. Рынок СУБД .....................................................................................................................................13

2. Среда Access ..............................................................................................................................................15 2.1. Загрузка.............................................................................................................................................15 2.2. Интерфейс Access ............................................................................................................................17 2.3. Окно базы данных .............................................................................................................................17 2.4. Объекты базы данных Access ..........................................................................................................18

3. Таблицы ....................................................................................................................................................20 3.1. Типы данных .....................................................................................................................................20 3.2. Структура базы данных ..................................................................................................................21 3.3. Создание таблиц ..............................................................................................................................22

3.3.1. Конструктор таблиц .........................................................................................................................22 3.3.2. Свойства полей .................................................................................................................................23 3.3.3. Мастер подстановок .........................................................................................................................24 3.3.4. Задание ключевого поля...................................................................................................................26 3.3.5. Создание таблиц с помощью мастера ..............................................................................................26 3.3.6. Создание таблиц путём ввода данных .............................................................................................26 3.3.7. Импортирование данных..................................................................................................................27

3.4. Установление связей между таблицами .........................................................................................27 3.5. Ввод и просмотр данных в режиме таблицы ..................................................................................31

3.5.1. Ввод и редактирование данных .......................................................................................................31 3.5.2. Ввод графической информации в поля таблицы .............................................................................31 3.5.3. Управление видом информации ......................................................................................................32 3.5.4. Подтаблицы ......................................................................................................................................33 3.5.5. Сортировка информации ..................................................................................................................35 3.5.6. Поиск и замена информации ............................................................................................................35

3.6. Фильтрация записей .........................................................................................................................35 3.6.1. Фильтр по выделенному ..................................................................................................................36 3.6.2. Использование обычного фильтра ...................................................................................................37 3.6.3. Расширенный фильтр .......................................................................................................................38

4. Запросы .....................................................................................................................................................41 4.1. Создание простого запроса..............................................................................................................41

4.1.1. Кнопка Вид .......................................................................................................................................43 4.2. Конструктор запросов .....................................................................................................................44 4.3. Запросы с выводом наборов значений ..............................................................................................45

Page 3: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

3

4.4. Подведение итогов по записям ........................................................................................................46 4.5. Вычисляемые поля ............................................................................................................................48 4.6. Перекрестные запросы ....................................................................................................................50

4.6.1. Создание перекрестного запроса на базе таблицы ..........................................................................52 4.6.2. Создание перекрестного запроса на базе простого запроса ............................................................56

4.7. Запросы на изменение данных ..........................................................................................................59 4.7.1. Создание таблицы из запроса ..........................................................................................................59 4.7.2. Запрос на удаление данных ..............................................................................................................61 4.7.3. Запрос на добавление .......................................................................................................................61 4.7.4. Запрос на обновление .......................................................................................................................61

5. Формы .......................................................................................................................................................63 5.1. Создание формы ...............................................................................................................................63

5.1.1. Мастер форм .....................................................................................................................................64 5.2. Использование формы ......................................................................................................................66 5.3. Модификация форм ..........................................................................................................................67

5.3.1. Добавление связанных элементов управления ................................................................................68 5.3.2. Свойства элементов управления ......................................................................................................69 5.3.3. Форматирование элементов управления .........................................................................................70 5.3.4. Перемещение ....................................................................................................................................70 5.3.5. Изменение размеров и выравнивание ..............................................................................................71 5.3.6. Цвет и шрифт ...................................................................................................................................71

5.4. Ввод данных с помощью формы .......................................................................................................72 5.5. Подчиненные формы ........................................................................................................................75

5.5.1. Использование мастера автоформ ...................................................................................................76 5.5.2. Использование мастера форм ..........................................................................................................77

6. Отчеты ......................................................................................................................................................79 6.1. Автоотчеты.....................................................................................................................................80 6.2. Мастер создания отчетов ...............................................................................................................82 6.3. Использование отчета .....................................................................................................................87 6.4. Модификация структуры отчета ...................................................................................................88

6.4.1. Работа в конструкторе отчетов ........................................................................................................88 6.4.2. Управление группировкой ...............................................................................................................93 6.4.3. Форматирование элементов управления .........................................................................................94

6.5. Создание наклеек ..............................................................................................................................94 6.6. Связь с другими компонентами Office .............................................................................................97

6.6.1. Создание документа слияния в Office 2000 .....................................................................................97 6.6.2. Создание документа слияния в Office XP и Office 2003 ................................................................ 100 6.6.3. Публикация в Word ........................................................................................................................ 105 6.6.4. Анализ в Excel ................................................................................................................................ 105

7. Макросы ................................................................................................................................................. 106 7.1. Группа макросов ............................................................................................................................. 107 7.2. Условные макрокоманды ................................................................................................................ 108 7.3. Запуск макроса ............................................................................................................................... 109 7.4. Назначение клавиш для выполнения макросов ............................................................................... 110

8. Управление приложением Access ......................................................................................................... 112 8.1. Главная кнопочная форма .............................................................................................................. 112 8.2. Анализ базы данных ........................................................................................................................ 115

Page 4: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

4

8.2.1. Анализ таблиц ................................................................................................................................ 115 8.3. Защита базы данных ...................................................................................................................... 120

8.3.1. Установка пароля ........................................................................................................................... 120 8.3.2. Удаление пароля ............................................................................................................................ 121

9. Модули .................................................................................................................................................... 122 9.1. Первая программа .......................................................................................................................... 122 9.2. Краткий обзор языка VBA .............................................................................................................. 123

9.2.1. Алфавит и лексика ......................................................................................................................... 123 9.2.2. Ключевые слова ............................................................................................................................. 124 9.2.3. Операции ........................................................................................................................................ 124 9.2.4. Типы данных .................................................................................................................................. 124 9.2.5. Переменные, константы, массивы ................................................................................................. 124 9.2.6. Операторы цикла и условия ........................................................................................................... 125 9.2.7. Процедуры и функции ................................................................................................................... 125

9.3. Среда разработки .......................................................................................................................... 126 9.3.1. Состав среды .................................................................................................................................. 126

9.4. Отладка .......................................................................................................................................... 127 9.5. Управление структурой проекта .................................................................................................. 128 9.6. Справка ........................................................................................................................................... 128 9.7. Классы и объекты .......................................................................................................................... 129

9.7.1. Объявление типов .......................................................................................................................... 129 9.7.2. Понятие класса ............................................................................................................................... 129 9.7.3. Пример класса ................................................................................................................................ 130 9.7.4. Объекты и ссылки на объекты ....................................................................................................... 131 9.7.5. Иерархия классов ........................................................................................................................... 132 9.7.6. Скрытие данных ............................................................................................................................. 133

9.8. Полиморфизм .................................................................................................................................. 133 9.8.1. Оператор With ................................................................................................................................ 135

9.9. Пример обработки данных на VBA ................................................................................................ 135 9.9.1. Подключение библиотек объектов ................................................................................................ 135 9.9.2. Постановка задачи .......................................................................................................................... 136 9.9.3. Алгоритм решения задачи.............................................................................................................. 137 9.9.4. Программа заполнения таблицы ПоставленныеДетали ............................................................... 138

10. Элементы теории баз данных .......................................................................................................... 141 10.1. Метод «сущность-связь» ............................................................................................................... 141

10.1.1. Сущности и их атрибуты.............................................................................................................. 141 10.1.2. Домены ......................................................................................................................................... 141 10.1.3. Связи между сущностями ............................................................................................................ 141 10.1.4. Слабые сущности и обязательные связи ...................................................................................... 142 10.1.5. Документирование сущностей и связей....................................................................................... 142

10.2. Реляционная модель данных ........................................................................................................... 143 10.2.1. Отношения.................................................................................................................................... 143 10.2.2. Виды отношений .......................................................................................................................... 144 10.2.3. Сущности и отношения ................................................................................................................ 144

10.3. Реляционная алгебра ....................................................................................................................... 144 10.4. Нормализация отношений .............................................................................................................. 146

10.4.1. Цели проектирования базы данных ............................................................................................. 146 10.4.2. Первая нормальная форма (1НФ) ................................................................................................ 147 10.4.3. Функциональные зависимости ..................................................................................................... 147 10.4.4. Вторая нормальная форма ............................................................................................................ 148 10.4.5. Третья нормальная форма ............................................................................................................ 148

Page 5: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

5

11. Язык SQL ........................................................................................................................................... 150 11.1. Краткая история SQL .................................................................................................................... 150 11.2. SQL в Access .................................................................................................................................... 150 11.3. Работа с таблицами ...................................................................................................................... 152

11.3.1. Создание таблиц ........................................................................................................................... 152 11.3.2. Создание индекса ......................................................................................................................... 154

11.4. Инструкция SELECT ...................................................................................................................... 155 11.4.1. Примеры использования инструкции SELECT ........................................................................... 156

11.5. Использование SQL в VBA .............................................................................................................. 159 11.5.1. Классы для работы с запросами ................................................................................................... 159 11.5.2. Вывод содержимого запроса ........................................................................................................ 161 11.5.3. Сохранение запроса в таблице базы дданных.............................................................................. 162

Литература ...................................................................................................................................................... 165 Основная ....................................................................................................................................................... 165 Дополнительная ........................................................................................................................................... 165

Page 6: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

6

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

программы Access. Выбор Access обусловлен тем, что с помощью этой программы можно разрабатывать базы данных различной сложности: от индивидуальной, предназначенной для использования на отдельном компьютере, до систем масштаба предприятия, работа-ющих в сетях. Access, как одно из приложений пакета MS Office, доступна практически на любом компьютере, где установлен Office, но еще недостаточно широко используется из-за слабой подготовки пользователей. Часто задачи, эффективно и надежно решаемые с помощью Access, пытаются решать с помощью программы Excel, которая предназначена в основном для организации табличных вычислений и не ограждает от ошибок при работе с базами данных.

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

Рассмотрение начинается с общих вопросов, относящихся к базам данных, затем рассматривается конкретная работа с базами данных в среде Access. После того, как чита-тель получит конкретные навыки по работе с базами данных в среде конкретной СУБД Access, рассматривается теория реляционных баз данных, язык SQL, нестандартная обра-ботка данных с использованием языка программирования VBA в Access.

Page 7: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

7

1. Основные понятия

1.1. База данных Существование каждого предприятия, организации, отдельного человека сопро-

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

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

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

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

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

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

баз данных включает в себя данные, непосредственно сохраняемые в базе данных (БД), аппаратное обеспечение, программное обеспечение (ПО) и пользователей.

СУБД (система управления базами данных) – это программная система, предназна-ченная для создания на компьютере базы данных для многих приложений, поддержания её в актуальном состоянии и обеспечения эффективного доступа пользователей к содер-жащимся в ней данным в рамках предоставленных им полномочий.

Пользователи подразделяются на прикладных программистов, конечных пользова-телей и администраторов баз данных (АБД).

Прикладные программисты отвечают за написание прикладных программ, исполь-зующих БД.

Конечные пользователи работают с СУБД непосредственно через рабочую станцию или терминал.

Администраторы баз данных – это технические специалисты, отвечающие за ад-министрирование БД и СУБД в соответствии с требованиями, устанавливаемыми админи-стратором данных.

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

Системы баз данных могут реализовываться как на малых персональных компью-терах (ПК), так и на больших машинах или системах машин, объединенных в сеть. В зави-

Page 8: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

8

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

Однопользовательская система (single-user system) – это система, в которой к базе данных в одно и то же время может получить доступ не более одного человека.

Многопользовательская система (multi-user system) – это система, в которой к базе данных могут получить доступ сразу несколько пользователей.

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

1.2. Архитектура системы баз данных 1.2.1. Три уровня архитектуры Под архитектурой системы баз данных понимают общий подход к ее описанию.

Различают три уровня архитектуры: внутренний, концептуальный и внешний, рис.1.1.

Рис. 1.1. Три точки зрения на базу данных

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

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

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

1.2.2. Языки работы с базами данных Для работы с данными можно использовать универсальные языки программирова-

ния: С, Pascal, Basic, C++ и специализированные языки, например, FoxPro. Универсальные языки называются базовыми языками. Они могут включать подъязык данных. В настоя-щее время в качестве подъязыка данных используется SQL (Structured Query Language,

Внешний уровень (индивидуальные представления

пользователей)

Концептуальный уровень (обобщённое представление

пользователей)

Внутренний уровень (представление в памяти)

Page 9: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

9

структурированный язык запросов). Подъязык данных включает язык определения дан-ных и язык обработки данных.

1.2.3. Функции администратора БД Администратор базы данных (АБД) отвечает за нормальное функционирование БД.

В его функции входит: Определение концептуальной схемы. Определение внутренней схемы. Взаимодействие с пользователями. Определение правил безопасности и целостности. Определение процедур резервного копирования и восстановления. После того,

как предприятие доверило свои данные СУБД, оно стало критически зависимым от успешного функционирования системы. В случае повреждения какой–либо части БД важно иметь возможность восстановить данные с минимальной за-держкой.

Управление производительностью и реагирование на изменяющиеся требова-ния.

1.2.4. Функции СУБД СУБД – это программное обеспечение, которое управляет работой с базой данных.

СУБД должна обеспечивать выполнение ряда функций. Перечислим их. Определения данных. СУБД должна обеспечивать определение структуры БД, то

есть создание внешней, концептуальной и внутренней схемы. Обработка данных. СУБД должна обрабатывать запросы пользователей на вы-

борку, изменение или удаление существующих данных, а также на добавление новых данных в базу. Запросы к данным могут быть планируемыми, которые заранее предусмотрел АБД, и не планируемыми.

Безопасность и целостность данных. СУБД должна контролировать пользова-тельские запросы и пресекать попытки нарушения правил безопасности и це-лостности.

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

Словарь данных. Он содержит описание данных, входящих в данную БД. Сло-варь данных является системной базой данных, содержащей данные о данных.

Производительность. СУБД должна обеспечивать быстрое выполнение запро-сов пользователя к БД. Заметим, что в своё время система FoxPro стала лидером среди СУБД для персональных компьютеров именно благодаря своей высокой производительности.

Как правило, СУБД реализует внутренний и концептуальный уровни архитектуры, то есть обеспечивает хранение данных на дисках и предоставляет возможность описания логической структуры данных. Для реализации внешних представлений пользователей пишется отдельная программа с удобным для конечного пользователя интерфейсом и возможностью выполнения типовых запросов как надстройка над СУБД. Опишем после-довательность обработки запроса пользователя к БД.

Пользователь выдаёт запрос на доступ; СУБД перехватывает этот запрос и анализирует его;

Page 10: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

10

Затем СУБД просматривает внешнюю схему для этого пользователя, соответ-ствующее отображение внешний–концептуальный, концептуальную схему, отображение концептуальный–внутренний и определение структуры хранения;

Выполняет необходимые операции над хранимой базой данных.

1.2.5. Архитектура клиент/сервер Систему баз данных можно рассматривать как систему, состоящую из двух частей –

сервера (или машины базы данных) и набора клиентов (или внешнего интерфейса), рис.1.2. Сервер – это собственно СУБД. Он поддерживает все основные функции СУБД. Клиенты – это различные приложения, которые выполняются “над” СУБД – приложения, написанные пользователем и встроенные приложения, предоставляемые поставщиками СУБД или сторонними поставщиками.

Рис. 1.2. Схема архитектуры клиент-сервер

1.2.6. Распределённая обработка Распределенная обработка предполагает использование нескольких компьютеров,

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

Рис. 1.3. Клиент и сервер запускаются на разных машинах

Компьютер, на котором запускается программа-сервер, часто называют также сер-вером.

Один сервер может предоставлять доступ нескольким клиентам, рис.1.4.

СУБД

Приложения

База данных

Сервер

Клиенты

Конечные пользователи

СУБД

Приложения

База данных

Компьютер сервера

Компьютер клиента

Page 11: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

11

Рис. 1.4. Один сервер, много клиентов Каждая машина может одновременно являться и клиентом и сервером, рис.1.5. Та-

кая схема взаимодействия компьютеров характерна для сети Интернет. Рис. 1.5. Каждый компьютер является и клиентом и сервером

Коммуникационная сеть

клиенты

серверы клиенты

серверы

клиенты

серверы

клиенты

серверы

клиенты

серверы

Коммуникационная сеть

Компьютеры клиентов

Компьютер сервера

Page 12: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

12

1.3. Проектирование базы данных В настоящее время в основном информация в базах данных хранится в виде таб-

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

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

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

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

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

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

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

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

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

Таблица Поставщики

Имя поля Назначение КодПоставщика Поставщик Город Рейтинг

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

Page 13: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

13

Таблица Детали

Имя поля Назначение КодДетали Название Цвет Вес Эскиз

Уникальный номер Название детали Цвет Вес Рисунок, чертеж или эскиз

Накладная фиксируют факт поставки определенного количества какой-либо детали

некоторым поставщиком. Эту информацию можно хранить в виде таблицы Поставки, структура которой приведена ниже.

Таблица Поставки

Имя поля Назначение КодПоставщика КодДетали Количество Дата

Номер поставщика Номер детали Количество в партии Дата поставки

В данной таблице хранятся только числовые коды поставщиков и деталей. Зная эти

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

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

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

1.4. Рынок СУБД В настоящее время существует много фирм, предлагающих СУБД. Все СУБД мож-

но разделить на два класса: СУБД для настольных систем или ПК и промышленные или «тяжелые» СУБД.

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

Промышленные СУБД предназначены для использования на больших машинах и в крупных сетях. Они способны хранить практически неограниченные объемы данных, от-личаются высоким быстродействием, имеют развитые механизмы контроля целостности данных и восстановления после сбоев. Здесь следует прежде всего упомянуть систему DB2 фирмы IBM, Oracle фирмы Oracle, Microsoft SQL Server фирмы Microsoft.

Для использования в Интернет применяют СУБД MySQL, которую можно исполь-зовать бесплатно.

В настоящее время все более популярной становится СУБД Access. Это полноцен-ная реляционная СУБД, с помощью которой можно создавать достаточно сложные при-

Page 14: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

14

ложения, работающие на одном компьютере или в сети. Access является одним из компо-нентов интегрированного пакета Microsoft Office, который включает такие широко из-вестные приложения как текстовый редактор Word, электронные таблицы Excel, редактор презентаций Power Point, программа управления перепиской и личными сведениями Out-look. Access имеет развитый интерфейс, похожий на интерфейс других приложений пакета Office, интегрирована с другими приложениями пакета, то есть имеет возможность пере-давать данные в редактор Word, например, для составления типовых писем, или в Excel для анализа числовых данных из БД.

Далее будет описываться работа в СУБД Access. Данная программа постоянно раз-вивается, появляются все новые ее версии. В настоящей работе рассмотрена версия Access 2000. Номер версии 2000 соответствует году ее выхода. Позднее появились версии Access XP, Access 2003. Все изложенное для версии Access 2000 без изменения применимо к бо-лее поздним версиям. Там где имеются значительные отличия, приведено описание как для ранней версии, так и для более поздних.

Page 15: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

15

2. Среда Access

2.1. Загрузка При загрузке Access предъявляется диалог, на котором можно выбрать режим рабо-

ты, рис.2.1: создать новую БД; запустить мастер для создания БД; открыть существующую БД.

Рис. 2.1. Диалог загрузки Access

Если решено создавать новую БД, после нажатия ОК появится диалог Создание с двумя вкладками, рис.2.2. На вкладке Общие нужно выбрать режим База данных для со-здания пустой базы данных.

Рис. 2.2. Диалог создания БД, вкладка Общие

На вкладке Базы данных, рис.2.3, содержатся шаблоны типовых баз данных: Глав-ная книга Контакты и др., по образу которых можно создать свою БД. Если выбрать шаб-лон, то дальнейшее создание БД идёт с помощью мастера, который предъявляет несколько

Page 16: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

16

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

Рис. 2.3. Диалог создания БД, вкладка Базы данных

При создании новой БД предъявляется диалог сохранения файла БД, рис.2.4, в ко-тором следует выбрать папку для файла БД и указать имя сохраняемого файла, например, для БД поставщиков и деталей можно задать имя ПоставщикиДетали.mdb. В дальнейшем

эту базу данных

будем называть

по имени файла По-

ставщи-киДетали.

Рис. 2.4. Диалог сохранения файла базы данных Access создает единственный файл с расширением .mdb, в котором размещается вся

информация базы данных. Перейти от работы с текущей БД к созданию новой можно, выполнив команду ме-

ню Файл, Создать, при этом текущая БД будет закрыта. Access может работать одновре-менно только с одной базой данных, в отличие от, например, текстового редактора Word, который может работать сразу с несколькими открытыми документами. Если нужно дер-жать открытыми несколько баз данным, можно запустить несколько экземпляров Access.

Page 17: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

17

2.2. Интерфейс Access Интерфейс Access представлен на рис.2.5. Интерфейс включает стандартные ком-

поненты в виде меню и панелей инструментов. Представленная на рис.2.5. панель ин-струментов называется База данных. Набор кнопок на панели инструментов, а также со-став команд меню изменяется в зависимости от того, с каким объектом ведется работа в данный момент времени.

Рис. 2.5. Интерфейс Access. Окно базы данных

На рис. 2.6 показана панель инструментов База данных, когда открыта таблица в режиме конструктора.

Рис. 2.6. Панель инструментов База данных

Крайняя слева кнопка называется Вид, щелчок по ней позволяет переходить из ре-жима таблицы в режим конструктора и обратно. Переключаться между режимами ра-боты с объектами БД можно также командами меню Вид. Назначение остальных кнопок можно понять по подсказке, которая появляется после установки курсора на кнопке.

2.3. Окно базы данных Особенностью интерфейса Access является наличие окна базы данных, которое

обеспечивает удобный доступ ко всем объектам, хранящимся в БД, рис. 2.5. Слева в окне БД представлен список типов объектов, справа перечисляются все объекты выбранного типа.

Окно БД можно свернуть. Если закрыть окно БД, закрывается соответствующая ба-за данных.

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

выбрать команду База данных из меню Окно;

щёлкнуть по кнопке Окно базы данных на панели задач;

Окно базы данных

Page 18: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

18

нажать F11. Окно БД имеет собственную панель инструментов с кнопками, вид и описание ко-

торых зависят от типа объекта, выбранного в окне БД. Перечислим их (слева направо) для случая, когда работа ведется с таблицами, рис. 2.5:

Открыть. Открывается таблица, выбранная в окне БД в режиме таблицы; Конструктор. Таблица открывается в режиме конструктора, в котором можно ре-

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

здания таблицы; Удалить. Из БД удаляется выбранная таблица; Следующие 4 кнопки управляют видом представления информации в окне БД:

Крупные значки, Мелкие значки, Список, Таблица.

2.4. Объекты базы данных Access Рассмотрим вкратце роль и назначение различных объектов базы данных. Таблицы – это основа БД, именно в них хранится информация. Таблицы состоят из

строк и столбцов. Каждая строка таблицы – это запись, каждый столбец – поле. Таким об-разом, запись состоит из полей. Все элементы какого-либо столбца имеют один и тот же тип, например, числовой, текстовый и т.п. Тип поля задаётся в процессе создания струк-туры таблицы. На рис.2.7 показано содержимое таблицы со сведениями о фирмах-поставщиках. Таблица называется Поставщики. Каждый поставщик имеет уникальный числовой номер КодПоставщика, текстовое имя Поставщик, место расположения Город текстового типа и числовую характеристику Рейтинг.

Рис. 2.7. Содержимое таблицы Поставщики

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

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

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

Страница доступа к данным напоминает форму, но хранится в отдельном файле формата НТМL, поэтому её можно просматривать в Web-браузере, например, Internet Ex-plorer и, следовательно, иметь доступ к данным из Интернета или корпоративной сети. (HTML, Hypertext Markup Language – язык разметки гипертекстов – используется для со-здания Web-страниц.)

Page 19: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

19

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

Модули представляют собой программы, написанные на встроенном языке Visual Basic for Application (VBA). Они разрабатываются для выполнения действий, которые трудно осуществить с помощью команд меню Access или для автоматизации обработки данных, хранящимися в БД.

Page 20: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

20

3. Таблицы

3.1. Типы данных Информация, хранящаяся в базе данных, может быть самой разной по смыслу и по

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

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

64000 символов. Числовой. Данное поле может содержать некоторое числовое значение. Конкрет-

ный числовой тип определяется свойством «размер поля». Возможные значения числово-го типа приведены в табл. 3.1.

Таблица 3.1. Типы числовых данных

Тип Размер, байт

Диапазон значений

Байт 1 от 0 до 255 Целое 2 от –32768 до 32767 Длинное целое 4 от –2147483648 до 2147483647 Одинарное с пла-вающей точкой

4 От –3.402823 1038 до -1.401298 10-45 для отрицательных от 1.401298 10-45 до 3.402823 1038 для положительных

Двойное с плаваю-щей точкой

8 от –1.79769313486231 10308 до -4.94065645841247 10-324 для отрицательных, от 4.94065645841247 10-324 до 1.79769313486231 10308 для положительных

Код репликации 16 Глобальный уникальный идентификатор (GUID). Действительное 10

Код репликации размером в 16 байт используется в базе данных Microsoft Access

для создания уникального идентификатора при репликации. Репликация – это создание копий баз данных (реплик), которые могут обмениваться обновляемыми данными или реплицированными формами, отчетами или другими объектами. Такой обмен называют синхронизацией. Каждая копия базы данных называется репликой, и каждая реплика со-держит общий набор таблиц, запросов, отчетов, форм, макросов и модулей. Каждая ре-плика может также содержать локальные объекты, которые существуют только в этой ре-плике. В Microsoft Access коды GUID называются кодами реплик.

Дата/время. Содержит дату и время в диапазоне от 100 до 9999 года. Денежный. Применяется для значений валют. Предотвращает округления при про-

ведении вычислений. Может иметь до 15 цифр в целой части и до 4 в дробной. Счётчик. Обеспечивает автоматическую вставку последовательных (увеличиваю-

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

Логический. Содержит только одно из двух значений: Да/Нет Истина/Ложь, Вкл/Выкл.

Page 21: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

21

Поле объекта OLE. Может содержать двоичные объекты, например, документы MS Word, MS Excel, рисунки, звуки и другие двоичные данные, созданные в программах, ис-пользующих протокол OLE (Object Linking and Embedding – связывание и встраивание объектов). Технология OLE обеспечивает обмен данными между различными программа-ми, например, с помощью этой технологии в текстовый документ можно вставить рису-нок, созданный в каком-либо графическом редакторе. Объекты, хранимые в базе данных, могут быть связанными или внедренными. Для отображения объекта OLE на форме или в отчёте необходимо использовать присоединённую рамку объекта.

Гиперссылка. Гиперссылка хранит путь к месту назначения, например, к объекту, документу или Web-странице в Internet. Гиперссылка может представлять адрес в Интер-нете или в интрасети (URL, Uniform Resource Locator – единообразный указатель ресурса) или сетевой маршрут к файлу в локальной сети (UNC, Universal Naming Convention – универсальное соглашение об именах). Адрес гиперссылки может также содержать неко-торую специальную адресную информацию (например, объект базы данных, закладку Mi-crosoft Word или диапазон ячеек Microsoft Excel, на которые указывает адрес). При выборе гиперссылки Web-обозреватель или Microsoft Access используют адрес гиперссылки для перехода по заданному адресу. Гиперссылка вставляется в поле таблицы командой меню Вставка, Гиперссылка, которая предъявляет диалог для поиска файла или другого объекта, связь с которым должна быть установлена.

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

3.2. Структура базы данных Прежде, чем создавать базу данных, нужно продумать её структуру, т.е. решить ка-

кие таблицы с какими полями должны в нее входить. Вернемся к примеру базы данных Поставщики и Детали, рассмотренному в гл.1.

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

Таблица Поставщики Имя поля Тип поля Назначение КодПоставщика Поставщик Город Рейтинг

Счетчик Текстовый Текстовый Числовой

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

Таблица Детали Имя поля Тип поля Назначение КодДетали Название Цвет Вес Эскиз

Счетчик Текстовый Текстовый Числовой Поле OLE

Уникальный номер Название детали Цвет Вес Изображение детали

Page 22: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

22

Таблица Поставки Имя поля Тип поля Назначение КодПоставщика КодДетали Дата Количество

Числовой Числовой Дата/Время Числовой

Номер поставщика Номер детали Дата поставки Количество

При проектировании таблиц нужно обеспечить наличие ключей. Ключ состоит из

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

3.3. Создание таблиц Для работы с таблицами следует перейти в раздел Таблицы окна базы данных. Со-

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

Рис.3.1. Диалоговое окно Новая таблица

3.3.1. Конструктор таблиц Режим конструктора позволяет полностью контролировать процесс создания таб-

лицы. На рис.3.2. показан бланк конструктора таблиц в процессе создания структуры таб-

лицы Поставки. Новое поле добавляется путем ввода его имени в свободную ячейку столбца Имя

поля. Поле можно удалить, для чего его нужно выделить и выполнить команду меню

Правка, Удалить строки. Нельзя удалить поле, которое используется для связи с другой таблицей (см. п. 3.10). Для удаления такого поля сначала нужно удалить связь.

Для вставки поля между существующими полями нужно выделить нижележащее поле и выполнить команду Вставка, Строки.

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

Page 23: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

23

Рис. 3.2. Конструктор таблиц

3.3.2. Свойства полей Свойства полей устанавливаются с помощью вкладок Общие и Подстановка в ниж-

ней половине окна конструктора таблиц, рис.3.2. Рассмотрим эти свойства. Размер поля. Для текстового поля это максимальное число символов (до 255). По

умолчанию устанавливается размер 50 символов. При выборе размера надо учитывать, что в поле размером 20 символов нельзя будет ввести текст длиной 30 символов. С другой стороны, установка слишком большой длины может привести к бесполезному увеличе-нию размера файла базы данных, если значения, хранимые в поле будут существенно меньше его установленной длины. Для числовых полей размер выбирается из списка воз-можных числовых типов данных, которые перечислены в табл. 3.1.

Формат устанавливает вид данных на экране, например, для типа Дата/Время мож-но выбрать представление даты вида 30 июня 1999 г. или 6/30/99.

Число десятичных знаков определяет количество цифр после десятичной точки для дробных чисел. Это значение влияет только на вид представления числовых величин, а не их способ хранения в памяти.

Маска ввода позволяет задать шаблон для ввода, который дает некоторую гарантию правильности ввода данных, применяется для полей типа Дата/Время и текстовых. Маска ввода выводит на экран символы – местозаменители, показывает, сколько символов нуж-но ввести, включает разделительные символы (дефис, скобки). Например, для даты маска ввода может выглядеть так: --.--.--. Данная маска кодируется набором символов 99/99/00. Заполнитель 9 означает, что разрешается вводить только цифры, причём её ввод не явля-ется обязательным, заполнитель 0 требует обязательного ввода цифры. При выборе свой-ства Маска ввода справа появляется кнопка , по которой запускается мастер, помогаю-щий создать маску.

Подпись используется в качестве заголовка столбца в режиме таблицы. Значение по умолчанию позволяет автоматически вводить в поле какое–либо значе-

ние. Свойство Обязательное поле имеет два значения Да и Нет. Если установить значе-

ние Да, Ассеss потребует обязательного ввода какого-либо значения в данное поле. Свойство Индексированное поле определяет, будет или нет проводиться индексация

по данному полю. Индексация состоит в создании списка номеров записей, упорядочен-

Page 24: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

24

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

3.3.3. Мастер подстановок Сделать более простым ввод данных в таблицу позволяет подстановка. Например,

обеспечим возможность ввода значения поля Цвет таблицы Детали путем выбора нужно-го цвета из списка. Перейдем в режим конструктора для таблицы Детали и выберем для типа данных поля Цвет значение Мастер подстановок… . Первый диалог мастера показан на рис.3.3.

Рис. 3.3. Первый диалог мастера подстановок. Выбор источника значений

Выберем способ Будет введен фиксированный набор значений. На втором диалоге, рис.3.4, вводим значения цветов в столбец.

Рис. 3.4. Второй диалог мастера подстановок. Ввод возможных значений

На последнем диалоге задаем название столбца подстановки, рис.3.5.

Page 25: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

25

Рис. 3.5. Третий диалог мастера подстановок. Ввод подписи

Таблица с использованием столбца подстановки показана на рис.3.6. Надпись, вве-денная на третьем диалоге, рис.3.5, совпадает с названием поля таблицы, поэтому назва-ние столбца не изменилось.

Рис. 3.6. Использование столбца подстановок в режиме таблицы

Если создать форму для таблицы Детали после добавления столбца подстановки для поля Цвет, то автоматически на форме будет создан список для выбора значения. Пример такой формы показан на рис.3.7.

Рис. 3.7. Использование столбца подстановок в форме

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

Page 26: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

26

3.3.4. Задание ключевого поля Ключевое поле позволяет однозначно идентифицировать запись, то есть отличить

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

Выбрать поле; Выполнить команду Правка, Ключевое поле, либо щёлкнуть правой кнопкой по

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

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

3.3.5. Создание таблиц с помощью мастера Мастер помогает быстро создать таблицы базы, используя шаблоны таблиц, входя-

щие в состав Access. Для использования мастера нужно перейти в раздел Таблицы окна БД, нажать кнопку Создать на панели инструментов и в появившемся окне Новая таблица, рис. 3.1, выбрать Мастер таблиц. Будет предъявлен диалог с образцами таблиц, рис.3.8. Следует составить набор полей новой таблицы, выбирая их из предлагаемых образцов.

Рис. 3.8. Выбор образца таблицы

3.3.6. Создание таблиц путём ввода данных Имеется возможность создания таблицы путем непосредственного ввода данных в

ячейки таблицы. Для этого нужно в окне БД перейти в раздел Таблицы, нажать кнопку Со-здать и в окне Новая таблица выбрать Режим таблицы. На экране появиться пустая табли-ца, рис.3.9, в ячейки которой можно вводить значения. Access по введенному значению определит тип данных и включит его в структуру таблицы. В дальнейшем можно откор-ректировать структуру, переключившись в режим конструктора, например, изменить названия полей, которые по умолчанию называются Поле1, Поле2,… на более содержа-тельные.

Page 27: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

27

Рис. 3.9. Создание таблицы путем ввода данных

3.3.7. Импортирование данных Таблицы можно создавать путем импорта данных из другой БД, созданной в какой-

либо совместимой СУБД. Например, возможен импорт данных из электронных таблиц Excel. Для импорта нужно:

Открыть БД; В окне БД выбрать Таблицы и нажать кнопку Создать; В окне Новая таблица выбрать Импорт таблиц, рис. 3.1. Мастер импорта выдаст диалог, рис.3.10, на котором следует выбрать файл для им-

порта. Далее нужно отвечать на вопросы мастера.

Рис. 3.10. Выбор файла для импорта

3.4. Связи между таблицами Если между таблицами установлены связи, возможен контроль за данными, хра-

нядщимися а базе

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

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

Появится диалоговое окно Добавление таблицы, рис.3.11, из которого кнопкой Добавить

Page 28: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

28

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

Рис. 3.11. Добавление таблиц в схему данных

После закрытия окна Добавление таблицы становится активным окно Схема дан-ных, рис.3.12. Связи между таблицами устанавливаются путём перетаскивания мышью поля из одной таблицы на соответствующее поле другой таблицы.

Рис. 3.12. Установление связи между таблицами

Как правило, одно из полей в связанных таблицах имеет уникальные значения. Это может быть ключевое поле или поле, для которого свойство Индексированное поле имеет значение Да (совпадения не допускаются). Таблица, содержащая уникальное поле, называ-ется базовой, а вторая таблица – подчинённой. Поскольку одной записи в базовой таблице может соответствовать нескольким записей в подчинённой, подобная связь называется «один-ко-многим».

В нашем примере связь Поставщики→Поставки и Поставки←Детали имеет вид «один-ко-многим».

Поле подчиненной таблицы, которое связано с ключевым полем базовой таблицы, называется внешним ключом. Например, внешними ключами в таблице Поставки являют-ся поля КодПоставщика и КодДетали.

При создании связи путём перетаскивания поля открывается диалог Изменение свя-зей, рис.3.13.

Page 29: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

29

Рис. 3.13. Настройка связи между таблицами

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

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

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

Установленные связи между таблицами можно изменять или удалять. Для редакти-рования связи ее нужно выделить щелчком мыши, затем нажать правую кнопку мыши и выбрать нужную команду контекстного меню, рис.3.14.

Рис. 3.14. Редактирование связей

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

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

В окне Схема данных одна из таблиц всегда активна. Активная таблица удаляется из данного окна (не из схемы данных!) командой Связи, Скрыть таблицу, или соответ-ствующей командой контекстного меню, при этом все связи скрытой таблицы сохраняют-

Page 30: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

30

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

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

3.4.2. Подстановка данных При заполнении таблицы Поставки в поля Кодпоставщика и КодДетали нужно

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

Откроем таблицу Поставки в режиме конструктора, перейдем на закладку Подстановка и выполним настройки для поля КодДетали, показанные на рис.3.15.

Рис. 3.15. Настройка подстановки

По умолчанию устанавливается Поле в качестве типа элемента управления. При выборе Поля со списком появляется возможность отображать целый список значений с возможностью выбора. Значение 2 параметра Число столбцов означает, что отбираются два столбца из таблицы Поставщики, указанной в качестве источника данных. Установка параметра Ширина столбцов в 0 скрывает от отображения значения ключевого поля Код-Поставщика.

Аналогично настроим подстановку для поля КодДетали. После настройки подстановок для полей КодПоставщика и КодДетали таблица По-

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

Page 31: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

31

Рис. 3.16. Использование подстановки

3.5. Ввод и просмотр данных в режиме таблицы Таблица базы данных открывается в режиме таблицы, если ее выбрать в окне базы

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

3.5.1. Ввод и редактирование данных В режиме таблицы информация расположена по строкам и столбцам. Информация

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

Новая запись добавляется в конец таблицы. Перемещаться между полями можно клавишей Tab (в прямом направлении) или Shift+ Tab (в обратном).

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

Запись можно удалить, выделив её, и выполнив затем команду Правка, Удалить за-пись. Удалённую запись восстановить нельзя.

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

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

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

3.5.2. Ввод графической информации в поля таблицы Если в полях таблицы предполагается хранить графические изображения, целесо-

образно подготовить их заранее. Это можно сделать сканированием фотографий, других

Page 32: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

32

изображений, можно создать изображение в каком-либо графическом редакторе или найти в Интернете. Для вставки готового изображения в поля таблицы, нужно открыть ее в ре-жиме таблицы и перейти к полю для изображения. Откроем таблицу Детали и выберем поле Эскиз у какой-либо записи. Выполним команду Вставка, Объект. На диалоге Вставка объекта выберем режим Создать из файла, рис.3.17.

Рис. 3.17. Диалог вставки объекта в поле таблицы

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

Рис. 3.18. Выбор рисунка для помещения в базу данных

В дальнейшем рисунки можно отображать на формах и в отчетах.

3.5.3. Управление видом информации Имеется возможность изменять ширину столбцов и высоту строк путём перетаски-

вания границы между ними курсором мыши, форма которого должна приобрести вид дву-направленной стрелки: ↔‚ ↕. Нужная ширина столбца, соответствующая ширине данных, расположенных в столбце, устанавливается автоматически после двойного щелчка по его правой границе. Для управления шириной столбца можно также воспользоваться коман-дой Формат, Ширина столбца.

Page 33: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

33

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

В режиме таблицы можно отображать только часть столбцов таблицы. Для выбора отображаемых столбцов нужно выполнить команду Формат, Отобразить столбцы, рис.3.19, и отметить нужные. Эта команда применима и для подтаблиц, см. ниже.

Рис. 3.19. Отбор столбцов для отображения в таблице

3.5.4. Подтаблицы Если открыта главная таблица, которая имеет связь с подчинённой, то автоматиче-

ски создаётся подтаблица, которую можно открыть, щелкнув по знаку «плюс» (+), рис.3.20. При этом раскрывается часть подчинённой таблицы, содержащая записи, связан-ные с конкретной записью базовой таблицы.

Рис. 3.20. Подтаблица

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

Page 34: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

34

Рис. 3.21. Управление подтаблицами

Команда Удалить удаляет подтаблицу, при это исчезает знак «плюс». Если базовая таблица имеет связи с несколькими подчиненными таблицами, только

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

Рис. 3.22. Выбор подтаблицы

Если выбрана подтаблица, не имеющая связи с базовой, то подтаблицы будут пу-стыми. Например, на рис.3.23 показан вид подтаблицы Детали для базовой таблицы По-ставщики.

Рис. 3.23. Подтаблица, не связанная с базовой таблицей

Page 35: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

35

3.5.5. Сортировка информации Для удобства просмотра информации в таблице ее содержимое можно отсортиро-

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

тов (сортировка по возрастанию) или кнопку (сортировка по убыванию).

3.5.6. Поиск и замена информации Нужное значение в таблице можно найти, воспользовавшись командой Правка,

Найти или нажав клавиши Ctrl+F. В диалоге Поиск и замена, рис.3.24, указывается образец для поиска, задаётся область поиска. Это может быть одно поле или таблица целиком. За-даётся критерий совпадения, который может иметь значения: С любой частью поля, Поле целиком, С началом поля. Ассеss найдёт запись, у которой первой произойдёт совпадение. Затем поиск можно продолжить кнопкой Найти далее.

Рис. 3.24. Настройка параметров поиска

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

Рис. 3.25. Настройка параметров замены значений полей

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

ряющих некоторому условию.

Page 36: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

36

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

некоторого поля совпадают полностью или частично со значением поля в выбранной для фильтрации записи.

Для создания фильтра следует выполнить действия: Выделить содержимое поля или части поля таблицы; Выполнить команду Записи, Фильтр, Фильтр по выделенному или щёлкнуть по

кнопке . Ассеss отобразит записи, удовлетворяющие критерию фильтрации. Например, если

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

Чтобы вернуться к просмотру всех записей, нужно выполнить команду Записи, Удалить фильтр, или щёлкнуть кнопку .

Позднее можно снова использовать последний назначенный фильтр командой За-писи, Применить фильтр или щёлчком по кнопке Применить фильтр.

Кнопка может быть в двух состояниях: утопленном и отжатом. В утопленном состоянии, когда фильтр применён, нажатие данной кнопки удаляет фильтр, а если кнопка отжата, ее нажатие применяет фильтр.

Ассеss всегда запоминает последние параметры фильтрации. Можно перед фильтрацией выделить только часть поля, например, одну первую

букву Н в поле Город таблицы Поставщики, тогда фильтрация выделит все записи с горо-дами на букву Н.

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

Можно выделить значения из нескольких соседних записей и применить Фильтр по выделенному. В этом случае Ассеss выводит записи, совпадающие хотя бы с одним из вы-деленных значений. Например, если в таблице Поставщики выделить в соседних записях значения Н.Новгород и Кстово, рис.3.26, то будут показаны записи для поставщиков из этих городов, рис.3.27.

Рис. 3.26. Выбор для фильтра значений в соседних записях

Page 37: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

37

Рис. 3.27. Таблица Поставщики после применения фильтра по выделенному

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

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

Рис. 3.28. Таблица с пустыми полями для задания условий фильтрации

Условия для фильтрации в окне Фильтр можно задавать на нескольких вкладках: на вкладке Найти и на одной или нескольких вкладках Или. В ячейках следует ввести выра-жение, с которым будут сравниваться значения полей. При вводе выражения можно вос-пользоваться списком, раскрываемом кнопкой , который содержит все значения соот-ветствующего поля во всех записях таблицы. Например, на рис.3.28 видны названия всех городов, встречающиеся в таблице. Выберем, например, Н.Новгород. На вкладках Или за-даются альтернативные критерии фильтрации. Всякий раз, когда выбирается одно или не-сколько значений на вкладке Или, становится доступной новая вкладка Или. На рис.3.29 показана вкладка Или, на которой установлено условие отбора поставщиков с рейтингом больше 70.

Рис. 3.29. Условие фильтрации на вкладке Или

После применения фильтра Ассеss отобразит записи, которые совпадают или со значениями на вкладке Найти или со значениями на вкладке Или. На рис.3.30 приведен ре-зультат применения фильтра. Отобраны записи о поставщиках из Нижнего Новгорода и о поставщиках с рейтингом больше 70.

Page 38: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

38

Рис. 3.30. Результат фильтрации по двум условиям

В выражениях, определяющих критерии фильтрации, можно использовать операто-ры сравнения >, <, >=, <=, =, <>.

Вкладку Или можно удалить командой Правка, Удалить вкладку. Всё содержимое фильтра очищается командой Правка, Очистить бланк.

3.6.3. Расширенный фильтр Расширенный фильтр позволяет задать сложные условия отбора записей из актив-

ной таблицы. Откроем таблицу Детали и с помощью команды Формат, Отобразить столбцы вы-

берем три столбца Название, Цвет, Вес для показа, как наиболее информативные, рис.3.31. Выполним далее команду Записи, Фильтр, Расширенный фильтр. Появится диа-лог с бланком запроса для ввода критериев отбора, рис.3.32.

Рис. 3.31. Таблица Детали

Бланк состоит из двух частей. В верхней части представлена схема таблицы. Ниж-няя часть состоит из нескольких строк, в ячейках которых задаются условия отбора запи-сей. Условие включает: поле, используемое для сравнения; оператор, описывающий тип сравнения; величину, с которой должно сравниваться значение поля. В строке Поле блан-ка запроса устанавливаем нужное поле, перетаскивая его название из таблицы или выби-рая его из списка, который появляется после щелчка по кнопке . Обозначение * в схеме таблицы означает все поля таблицы.

Page 39: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

39

Рис. 3.32. Бланк расширенного фильтра

Выберем, например, поле Вес. В строке Условие отбора введём выражение >= 2. Включим еще в фильтр поле Цвет. Для составления условия, которому должно удовле-творять это поле, воспользуемся Построителем выражений, который вызывается командой Построить контекстного меню. Напомним, что нужное контекстное меню вызывается щелчком правой кнопки по строке Условия отбора. Построитель выражений позволяет со-здавать сложные выражения с участием полей таблиц, встроенных функций, операторов, причем не требуется ручной ввод с клавиатуры, что помогает избежать ошибок. На рис.3.33 показан Построитель выражений в процессе ввода условия на цвет детали.

Рис. 3.33. Построитель выражений

Слева внизу в окне Построителя выражений показаны доступные объекты. Выбира-ем таблицу Детали, ее поле Цвет и щелкаем кнопку Вставить. Имя поля переносится в верхнюю часть Построителя. Щелкая по кнопке с изображением знака =, переносим соот-ветствующий оператор в выражение, затем вводим значение ”голубой” для поля. Значе-ния для текстовых полей следует заключать в кавычки. Завершив работу с построителем кнопкой ОК, возвращаемся в окно бланка расширенного фильтра, рис.3.32.

Просмотр результатов фильтрации производится по команде Фильтр, Применить фильтр или кнопкой Применение фильтра. Результат фильтрации показан на рис.3.34. Видно, что отобраны только детали голубого цвета, вес которых не меньше 2. Обратим

Page 40: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

40

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

Рис. 3.34. Результаты фильтрации

Поместим условие на цвет в строку Или, а для веса в строке Сортировка зададим условие сортировки по возрастанию, рис.3.35. В фильтр отберутся записи о деталях с ве-сом >=2, а также записи о деталях голубого цвета, причем записи будут расположены в порядке возрастания веса, рис.3.36.

Рис. 3.35. Использование условия или в фильтре

Рис. 3.36. Результаты фильтрации с условием или

В меню Правка входят команды, с помощью которых можно управлять расширен-ным фильтром:

Удалить строку – удаляет строку из бланка, Удалить столбец – удаляет поле из бланка, Очистить бланк – полностью очищает бланк.

Page 41: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

41

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

удовлетворяющих определенному условию. Запрос подобен фильтру, но фильтр действу-ет только «здесь и сейчас» и не сохраняется в базе данных. Запрос является объектом, хранимым в БД, поэтому его можно использовать по мере необходимости. Фактически в запросе хранится лишь описание способа отбора записей из различных таблиц, сами же данные хранятся в таблицах. Запрос может выступать источником данных для отображе-ния в формах, для создания отчетов и построения других запросов наравне с таблицами.

Рис. 4.1. Выбор способа создания запроса

Чтобы начать создание запроса, нужно в окне БД выбрать Запросы и щёлкнуть кнопку Создать. В окне Новый запрос, рис.4.1, можно выбрать один из способов создания запроса. Рассмотрим эти способы.

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

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

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

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

4.1. Создание простого запроса Предположим в БД ПоставщикиДетали нужно получить перечень всех деталей,

поставляемых каждым поставщиком. В окне Новый запрос, рис.4.1, выберем Простой за-прос. Начнет работать мастер создания простого запроса.

На первом диалоге мастера, рис.4.2, отбираем поля для включения в запрос: поле Поставщик из таблицы Поставщики и поле Название из таблицы Детали.

Page 42: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

42

Рис. 4.2.Отбор полей для запроса

На втором диалоге, рис.4.3, можно выбрать тип запроса: подробный – выводятся все записи из различных таблиц, удовлетворяющие за-

данным условиям; итоговый – отображает суммарную информацию, а не все подходящие записи. Выберем тип запроса подробный.

Рис. 4.3. Выбор типа запроса

На последнем третьем диалоге, рис.4.4, задается имя запроса. Согласимся с пред-ложенным по умолчанию именем Поставщики Запрос. Кроме того, оставим переключа-тель Открыть запрос для просмотра данных. В результате будет показана таблица с ре-зультатами запроса, рис.4.5.

Page 43: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

43

Рис. 4.4. Ввод имени запроса

Рис. 4.5. Результат запроса Поставщики Запрос

4.1.1. Кнопка Вид Слева на панели инструментов расположена кнопка Вид, с помощью которой удоб-

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

Рис. 4.6.Список команд кнопки Вид для запросов

Пример представления запроса в Режиме таблицы приведен на рис.4.5. Режим Конструктор для запросов подробно обсудим ниже.

Page 44: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

44

Режим SQL обеспечивает просмотр запроса в виде инструкции языка SQL. На рис.4.7 в режиме SQL показан запрос Поставщики Запрос. Именно эта краткая инструк-ция языка SQL и сохраняется в базе данных как запрос.

Рис. 4.7. Инструкция языка SQL, реализующая запрос Поставщики Запрос

4.2. Конструктор запросов Перейдем в режим Конструктор для запроса Поставщики Запрос. Откроется бланк

конструктора запросов, показанный на рис.4.8.

Рис. 4.8. Бланк конструктора запросов

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

Работа с бланком запроса аналогична работе с подобным бланком для расширенно-го фильтра. В бланке на рис.4.8 не заданы условия отбора для полей Поставщик и Назва-ние, включенных в запрос. Это значит, что в запрос включаются записи о всех поставщи-ках, которые поставляют какие-либо детали. Зададим, например, в строке Условие отбора для поля Название значение «Болт», тогда в запрос будут включены только поставщики болтов. Результат такого запроса показан на рис.4.9.

Page 45: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

45

Рис. 4.9. Запрос о поставщиках болтов

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

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

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

Открыть запрос в режиме конструктора; Задать сортировку записей; В списке Набор значений на панели инструментов выбрать желаемое число за-

писей для отбора в запрос; Для просмотра результатов перейти в режим Таблица. Выберем, для примера, три самые тяжелые детали из таблицы Детали. В окне Но-

вый запрос, рис.4.1, выберем Конструктор. При загрузке конструктора появится окно вы-бора таблицы, рис.4.10, в котором выберем таблицу Детали. Кстати, от выбора таблицы можно отказаться и сделать это позже, вызвав окно Добавление таблицы командой Запрос, Добавить таблицу.

Рис. 4.10. Выбор таблицы для включения в бланк конструктора

Работая в конструкторе, включим в запрос поля Название и Вес и проведем сорти-ровку по убыванию значений поля Вес, рис.4.11. В списке Набор значений, расположенном на панели инструментов, зададим значение 3.

Page 46: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

46

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

Записи, включенные в запрос, показаны на рис.4.12.

Рис. 4.12. Запрос о трех самых тяжелых деталях

4.4. Подведение итогов по записям В запросе можно задать операцию над полями, включенными в запрос. Это делает-

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

Создадим запрос, в котором определим общее количество деталей каждого вида, полученных от различных поставщиков. Перейдем в окне БД в раздел Запросы и щелкнем кнопку Создать. В диалоге Новый запрос, рис.4.1, выберем Простой запрос, на следующем диалоге, рис.4.2, выбираем из таблицы Детали поле Название и поле Количество из таб-лицы Поставки. На следующем диалоге, рис.4.3, выбираем Итоговый, при этом становит-ся активной кнопка Итоги, нажимаем ее и переходим в окно настройки запроса, рис.4.13.

Page 47: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

47

Рис. 4.13. Выбор групповой операции

Выбираем в этом окне групповую операцию, которую следует выполнить над чис-ловым полем Количество, включенным в запрос, в данном случае Sum. После нажатия кнопки ОК возвращаемся к предыдущему диалогу, рис.4.3, с которого по кнопке Далее пе-реходим к диалогу ввода имени запроса, рис.4.4. Назовем запрос, например, ОбщееЧисло-Деталей. Результат запроса показан на рис.4.14.

Рис. 4.14. Результат запроса об общем числе деталей

В режиме конструктора данный запрос имеет вид, показанный на рис.4.15. Из спис-ка строки Групповая операция можно выбрать нужную функцию для обработки значений полей.

Рис. 4.15. Возможные функции для обработки группы записей

В табл.4.1 приведено описание доступных функций. В формулах предполагается, что x1, x2, ... xn, – значения поля для записей, включенных в группу.

Page 48: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

48

Таблица 4.1. Функции для групповых операций

Функция Описание Формула Sum Суммирование значений группы

n

iixSum

1 Avg Среднее значение

nSumnxAvgn

ii

1 Var Дисперсия для выборки, состоящей из

значений группы 11

2

nAvgxVarn

ii

StDev Стандартное отклонение для выборки,

состоящей из значений группы VarStDev

Min Минимальное значение в группе Max Максимальное значение в группе Count Количество значений в группе First Первое значение в группе Last Последнее значение в группе

4.5. Вычисляемые поля Вычисляемое поле может быть создано в запросе, форме или отчете. Вычисляемое

поле используется лишь для проведения подсчетов и не является обычным полем табли-цы.

Для создания вычисляемого поля в строке Поле бланка запроса вводится некоторое выражение. Подсчитаем, например, общий вес деталей, поставленных поставщиками. Со-здадим запрос ДеталиПоставщиков, в который включим поле Название из таблицы Де-тали, поле Поставщик из таблицы Поставщики и поле Количество из таблицы Постав-ки. Откроем данный запрос в режиме конструктора и в свободной ячейке строки Поле введем выражение Вес*Количество. После завершения ввода вычисляемого выражения оно автоматически преобразуется в виду Выражение1: [Вес]*[Количество], которое видно на рис.4.16.

Рис. 4.16. Создание вычисляемого поля в запросе

На рис.4.17 показан результат этого запроса.

Page 49: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

49

Рис. 4.17. Запрос с вычислимым полем

Имя вычисляемого поля состоит из слова Выражение и номера, показывающего, ка-ким по счету оно было создано. Это имя можно изменить в конструкторе запросов, запи-сав нужное имя в ячейке перед двоеточием. Для рассматриваемого примера назовем вы-числяемое поле Общий вес. Запрос в режиме таблицы с новым названием вычисляемого поля приведен на рис.4.18.

Рис. 4.18. Новое название для вычисляемого поля

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

Рис. 4.19. Вызов построителя выражений командой контекстного меню

Page 50: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

50

4.6. Запросы с параметрами Запросы с параметрами позволяют запрашивать у пользователя значения парамет-

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

города. Составим с помощью мастера запрос, в который включим поля: Поставщи-ки.Поставщик, Поставщики.Город, Детали.Название (рис.4.20).

Рис. 4.20. Поля, отобранные в запрос

Сохраним запрос как ПоставщикиГородаДетали. В режиме таблицы этот запрос приведен на рис.4.21.

Рис. 4.21. Запрос ПоставщикиГородаДетали

Соответствующая инструкция языка SQL имеет вид:

SELECT Поставщики.Поставщик, Поставщики.Город, Детали.Название FROM Поставщики INNER JOIN (Детали INNER JOIN Поставки ON Детали.КодДетали = Поставки.КодДетали)

ON Поставщики.КодПоставщика = Поставки.КодПоставщика;

Page 51: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

51

Выполним для данного запроса команду Файл, Сохранить как и сохраним его до-полнительно под именем ПоставщикиГородаДеталиУсл. Откроем последний запрос в режиме конструктора (рис.4.22).

Рис. 4.22. Запрос ПоставщикиГородаДеталиУсл в режиме конструктора

Для того, чтобы при выполнении запроса выводилось окно для ввода параметра за-проса, в конструкторе запросов в строке Условие отбора нужно написать текст, заключен-ный в квадратные скобки. Этот текст показывается как приглашение при вводе параметра запроса. В примере на рис. 4.22 текст в квадратных скобках задан для полей Название и Город.

Выполним команду Запросы, Запуск, нажмем кнопку Запуск, или перейдем к режи-му таблицы. При этом сначала появится окно для ввода значения поля Город (рис.4.23). Введем в это окно в качестве значения параметрапараметра Н.Новгород.

Рис. 4.23. Ввод значения для поля Город

Затем появится окно для ввода названия детали ().

Рис. 4.24. Ввод значения для поля Название

Результат запроса приведен на рис.получится

Page 52: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

52

Рис. 4.25. Результат запроса с параметрами

Соответствующая инструкция языка SQL автоматически сформированная кон-структоро имеет вид: SELECT Поставщики.Поставщик, Поставщики.Город, Детали.Название FROM Поставщики INNER JOIN (Детали INNER JOIN Поставки ON Детали.КодДетали = Поставки.КодДетали) ON Поставщики.КодПоставщика = Поставки.КодПоставщика WHERE (((Поставщики.Город)=[Укажите город]) AND ((Детали.Название)=[Укажите деталь]));

Таким образом, в запросе появилось предложение WHERE, задающее условия отбо-ра посредством задания полям Город и Названия значений, которые должны быть введены при выполнении запроса.

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

параметрам. В этом случае используются перекрестные запросы.

4.7.1. Создание перекрестного запроса на базе таблицы Пусть имеется таблица Тестирование со структурой, показанной на рис.4.26.

Рис. 4.26. Структура таблицы Тестирование

Заметим, что здесь для удобства ввода значений в поле Пол ему назначен элемент управления Поле со списком. В качестве Типа источника строк выбран Список значений, а

Page 53: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

53

возможные значения перечислены через точку с запятой в строке Источник строк. Содер-жание данной таблицы показано на рис.4.27.

Рис. 4.27. Содержание таблицы Тестирование

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

Рис. 4.28. Перекрестная таблица с двумя входами

Создание перекрестного запроса с помощью мастера происходит следующим обра-зом. В окне БД выбираем Запросы и нажимаем кнопку Создать, в диалоговом окне Новый запрос, рис.4.1, выбираем Перекрестный запрос, после чего начинает работать мастер со-здания перекрестного запроса.

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

Рис. 4.29. Выбор источника данных для перекрестного запроса

Page 54: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

54

На втором диалоге выбираем поле Возраст, значения которого будут заголовками строк, рис.4.30.

Рис. 4.30. Выбор поля для заголовков строк перекрестного запроса

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

Рис. 4.31. Выбор поля для заголовков столбцов перекрестного запроса

На четвертом диалоге выбираем поле Балл и функцию Среднее, чтобы отобразить средний результат тестирования для каждого подмножества участников, рис.4.32.

Page 55: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

55

Рис. 4.32. Выбор обобщаемого показателя для перекрестного запроса

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

В пятом диалоговом окне задается имя запроса, рис.4.33.

Рис. 4.33. Задание имени перекрестному запросу

Как видно на рис.4.28, числовые данные представлены в форме с фиксированной точкой и двумя знаками после десятичной точки. Для управления форматом представле-ния данных нужно перейти в режим конструктора запросов и настроить формат поля. На рис.4.34 показан созданный перекрестный запрос в режиме конструктора и окно свойств для поля Балл, в котором показан выбор нужного числового формата. Окно свойств выво-дится командой меню Вид, Свойства, нажатием клавиши F4 или командой Свойства кон-текстного меню.

Page 56: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

56

Рис. 4.34. Выбор формата для поля

4.7.2. Создание перекрестного запроса на базе простого за-проса

Рассмотрим еще пример, когда перекрестный запрос создается на базе другого за-проса. Пусть в базе данных ПоставщикиДетали необходимо проанализировать поставки различных деталей от различных поставщиков. Создадим простой запрос, в который включим поле с названием поставщика Поставщик из таблицы Поставщики, поле Назва-ние из таблицы Детали и поле Количество из таблицы Поставки. Содержимое этого за-проса показано на рис.4.35.

Рис. 4.35. Простой запрос ДеталиПоставщиков

На базе данного запроса создадим перекрестный запрос с помощью мастера. На первом диалоге в качестве источника данных указываем Запросы и выбираем запрос Де-талиПоставщиков, рис.4.36.

Page 57: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

57

Рис. 4.36. Выбор источника данных для перекрестного запроса

На втором диалоге указываем поле для заголовков строк перекрестного запроса, рис.4.37.

Рис. 4.37. Выбор поля для заголовков строк

На третьем диалоге выбираем поле Название для заголовков столбцов запроса, рис.4.38.

Page 58: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

58

Рис. 4.38. Выбор поля для заголовков столбцов

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

Рис. 4.39. Выбор функции для вычисления в перекрестном запросе

На последнем диалоге соглашаемся с предложенным именем запроса ДеталиПо-ставщиков_перекрестный. Содержимое этого запроса показано на рис.4.40.

Рис. 4.40. Перекрестный запрос

Page 59: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

59

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

Рис. 4.41. Перекрестный запрос в режиме конструктора

На рис.4.41 показан созданный перекрестный запрос в режиме конструктора. Стро-ка Перекрестная таблица появляется в бланке запроса после выбора соответствующей строки в списке кнопки Тип Запроса на панели инструментов, рис. 4.42.

Рис. 4.42. Список кнопки Тип запроса

4.8. Запросы на изменение данных При работе с запросом в режиме конструктора существующий запрос можно пре-

образовать к другому виду, воспользовавшись командами меню Запрос. Рассмотрим при-меры применения этих команд.

4.8.1. Создание таблицы из запроса Когда активно используется база данных, количество записей в ней растет, что ве-

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

В качестве примера перенесем из таблицы Поставки записи с датами более ранни-ми, чем 1 июля 2002г. в отдельную архивную таблицу.

Page 60: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

60

Создадим простой запрос, в который включим все поля таблицы Поставки. В стро-ке Условие отбора для поля Дата введем выражение <1.07.2002, рис.4.43. Значение даты будет автоматически окаймлено символами #. Это условие означает, что в запрос следует отобрать записи с датами более ранними (меньшими), чем 1 июля 2002г. Созданный за-прос можно предварительно просмотреть.

Рис. 4.43. Создание новой таблицы на основе запроса

Выберем затем в меню Запрос команду Создание таблицы и зададим имя создавае-мой таблице, рис.4.44.

Рис. 4.44. Задание имени для новой таблицы

Таблица из запроса создается командой Запрос, Запуск или щелчком по кнопке с восклицательным знаком. В процессе создания таблицы выводится сообщение о числе помещенных в нее записей. Созданная таблица показана на рис.4.45

Page 61: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

61

Рис. 4.45. Таблица, полученная из запроса

4.8.2. Запрос на удаление данных Удаленные записи восстановить нельзя, поэтому перед удалением их нужно тща-

тельно просмотреть. Нами были сохранены данные о поставках за 1-е полугодие 2002г. в отдельной таблице, но они остались и в исходной таблице Поставки. Удалим их из нее.

Откроем запрос ПоставкиЗапрос, рис.4.43, в режиме конструктора, оставим в нем то же ограничение на дату и выполним команду меню Запрос, Удаление. После этого в бланке запроса появится строка Удаление, в ячейках которой будет введено значение Условие. Это значит, что можно задать дополнительные условия отбора записей. Перед удалением записей еще раз просмотрим запрос в режиме таблицы, он должен иметь вид как на рис.4.45. Выполним запрос на удаление командой Запрос, Запуск. Access выведет сообщение о числе удаляемых записей и потребует подтвердить удаление.

4.8.3. Запрос на добавление С помощью запроса на добавление записи из одной таблицы можно поместить в

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

Создадим запрос, в который включим все поля таблицы Поставки-За1Полугодие2002 и зададим условие отбора по дате >=#01.05.02#, которое позволит отобрать майские и июньские поставки. Затем выполним команду Запрос, Добавление и в окне Добавление, рис.4.46, выберем таблицу Поставки, в которую будут помещены ото-бранные записи. Запрос на добавления выполняется командой Запрос, Выполнить, при этом выводится сообщение о количестве добавляемых записей и предлагается подтвер-дить запрос.

Рис. 4.46. Выбор таблицы для добавления

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

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

Page 62: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

62

Пусть принято решение увеличить диапазон значений поля Рейтинг таблицы По-ставщики в 10 раз, чтобы более дифференцированно характеризовать поставщиков. Со-здадим простой запрос, в который включим поле Рейтинг таблицы Поставщики. Откроем этот запрос в режиме конструктора и выполним команду Запрос, Обновление, рис.4.47. В строке Обновление введем выражение [Рейтинг]*10, значение которого будет использо-вано как новое значение поля Рейтинг. Если просто перевести данный запрос в режим таблицы, то запланированные изменения не будут показаны, будут выведены прежние значения изменяемого поля. Чтобы в таблицу были внесены изменения, нужно выполнить запрос командой Запрос, Запуск. Access выдаст сообщение о количестве изменяемых за-писей и попросит подтвердить внесение изменений. Таблица Поставщики после выпол-нения запроса на изменение приведена на рис.4.48.

Рис. 4.47. Запрос на обновление в режиме конструктора

Рис. 4.48. Таблица после выполнения запроса на изменение поля Рейтинг

Page 63: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

63

5. Формы Форма – это средство, упрощающее ввод, редактирование и отображение информа-

ции, хранящейся в таблицах базы данных. Она представляет собой окно с набором эле-ментов управления (ЭУ), которые используются для отображения информации, ввода и изменения данных, выполнения определённых действий или просто для украшения. При-мерами элементов управления являются кнопки, надписи, текстовые поля, линии, рамки, списки.

5.1. Создание формы В окне базы данных перейдем в раздел Формы и щёлкнем по кнопке Создать. От-

кроется окно Новая форма, рис.5.1, в котором перечислены способы создания форм.

Рис. 5.1. Окно Новая форма

В режиме Конструктор форма создается путем размещения элементов управления на пустом бланке конструктора, рис.5.2.

Рис. 5.2. Конструктор форм

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

Если выбрать один из трёх режимов Автоформа, мастер сразу же создаст соответ-ствующую форму для выбранной таблицы. На рис.5.3 показана форма, созданная в режи-ме Автоформа: ленточная для таблицы Поставщики.

Page 64: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

64

Рис. 5.3. Автоформа ленточная для таблицы Поставщики

Диаграмма позволяет представить данные в наглядном графическом виде. Сводная таблица отображает на форме итоговые данные с необходимыми расчета-

ми.

5.1.1. Мастер форм Построим теперь форму для той же таблицы Поставщики с помощью мастера. Вы-

берем в окне Новая форма, рис.5.1, из списка источников данных таблицу Поставщики, выделим способ создания Мастер форм и нажмём ОК.

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

Рис. 5.4. Первый диалог мастера форм. Выбор полей для формы

На втором диалоге, рис.5.5, можно выбрать порядок расположения элементов управления на форме: в один столбец, ленточный, табличный, выровненный. Выберем, например, в один столбец.

Page 65: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

65

Рис. 5.5. Второй диалог мастера форм. Выбор внешнего вида формы

На третьем диалоге, рис.5.6, выбирается стиль формы, который определяет цвет и фактуру окна, шрифты и другие элементы оформления. Выберем, например, стиль Стан-дартный.

Рис. 5.6. Выбор стиля для формы

На четвёртом диалоге, рис.5.7, надо дать форме имя и выбрать дальнейшие дей-ствия. Назовём форму Поставщики и выберем переключатель Открыть форму для про-смотра и ввода данных.

Рис. 5.7. Четвёртый диалог Мастера форм. Задание имени формы

Созданная форма Поставщики показана на рис.5.8.

Page 66: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

66

Рис. 5.8. Форма Поставщики в режиме формы

5.2. Использование формы На форме, показанной рис.5.8, имеются надписи с именами полей таблицы и тек-

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

Между активными элементами управления на форме можно переходить, нажимая клавишу Таb (в одном направлении) или комбинацию клавиш Shift+Tab (в другом направ-лении). Клавиша PgDown обеспечивает переход к следующей записи, PgUp – к предыду-щей.

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

Рис. 5.9. Кнопки навигатора

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

Щелчок на полосе слева на форме обеспечивает выделение целой записи. Работа с выделенной записью ведётся командами меню Правка: Вырезать (Ctrl+X), Копировать (Ctrl+C), Удалить (Del). Скопированную в буфер обмена запись можно вставить как значе-ние новой записи командой Правка, Вставить (Ctrl+V). Той же командой можно заменить существующую запись содержимым буфера обмена. Заменяемую запись нужно предвари-тельно выделить.

Текст полей можно проверить на наличие грамматических ошибок, выполнив ко-манду Сервис, Орфография или нажав клавишу F7. При обнаружении ошибки появится диалоговое окно Орфография, показанное на рис.5.10.

первая запись количество записей

номер записиновая запись предыдущая записьпоследняя запись следующая запись

Page 67: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

67

Рис. 5.10. Окно проверки орфографии

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

5.3. Модификация форм Для внесения изменений в существующую форму нужно перейти в режим кон-

структора командой Вид, Конструктор или щелчком по соответствующей кнопке . Окно конструктора форм показано на рис.5.11.

Рис. 5.11. Форма Поставщики в режиме конструктора

Бланк конструктора формы состоит из трех разделов. Разделы Заголовок формы и Примечание формы в данном примере пусты, но в них можно поместить элементы, кото-рые не будут меняться при переходе от записи к записи. Эти разделы можно размещать на бланке или убирать с бланка конструктора командой Вид, Заголовок/примечание формы. Размеры разделов можно изменять, перетаскивая границу между разделами на линейке, расположенной на бланке конструктора слева. Размеры самой формы также можно изме-нять, перетаскивая границу между формой и темным фоном справа и снизу от формы.

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

Новые элементы управления помещаются на форму с помощью инструментов, раз-мещённых на Панели элементов, рис.5.12, вызываемой на экран командой Вид, Панель элементов.

Page 68: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

68

Рис. 5.12. Панель элементов

Для размещения на форме нового ЭУ его нужно выбрать щелчком мыши на панели элементов, перейти на бланк конструктора, при этом курсор должен принять форму кре-стика +, и нарисовать прямоугольник, удерживая левую кнопку мыши. В этом прямо-угольнике будет размещен созданный ЭУ.

Ниже перечислены кнопки на Панели элементов и указано их назначение.

– Выбор объектов. Позволяет выделить определённый элемент управления или группу элементов управления, если держать нажатой клавишу Shift.

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

– Надпись. Описательный текст.

– Текстовое поле для ввода и редактирования текста.

– Группа переключателей.

– Выключатель. Может быть в двух состояниях: включено и выключено.

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

– Флажок. Используется для включения и отключения параметра.

– Поле со списком. В поле можно ввести новое значение или выбрать существу-ющее из списка.

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

– Кнопка.

– Рисунок. Не меняется при переходе от одной записи к другой.

– Свободная рамка объекта. Может отображать объект OLE.

– Присоединённая рамка объекта. Отображает объекты OLE, хранящиеся в запи-сях таблиц, например, рисунки, фотографии.

– Разрыв страницы.

– Набор вкладок. Позволяет разделить форму на несколько вкладок.

– Подчинённая форма/отчёт. В форму добавляется информация из дополнитель-ной таблицы.

– Линия.

– Прямоугольник.

– Другие элементы. Раскрывает список установленных на компьютере других элементов управления, которые также можно разместить на форме.

Элементы управления на бланке конструктора выделяются щелчком мыши. Если

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

5.3.1. Добавление связанных элементов управления Связанный элемент управления – это элемент, однозначно соответствующий полю

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

Page 69: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

69

бавляются с помощью списка полей, который при работе в конструкторе выводится ко-мандой Вид, Список полей, рис.5.13.

Рис. 5.13. Окно списка полей

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

5.3.2. Свойства элементов управления В любой момент времени при работе в конструкторе выделен какой-либо один эле-

мент управления, сама форма или ее раздел. Элемент управления, раздел выделяются щелчком мыши, для выделения формы в целом надо щелкнуть по серому фону не занято-му областью формы. Окно свойств выделенного элемента управления выводится коман-дой Вид, Свойства, рис. 5.14. Оно имеет несколько вкладок.

На вкладке Данные задается источник данных для элемента управления. Это может быть поле таблицы или запроса, например, на рис. 5.14 видно, что текстовое поле связано с полем КодПоставщика и отображает его значения. На вкладке Другие имеется свойство Имя, по которому к элементу управления можно обратиться из макроса или программы на VBA.

Рис. 5.14. Окно свойств элемента управления

На рис.5.15 показано окно свойств самой формы. Свойство Подпись содержит текст, отображаемый в заголовке окна формы. Если для свойства Тип границы установить значение Окна диалога, то у формы нельзя будет изменять размеры и вместо трех кнопок в правом верхнем углу останется только кнопка закрытия.

Page 70: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

70

Рис. 5.15. Окно свойств формы

Тип элемента управления можно изменить командой Формат, Преобразовать эле-мент в…. Например, текстовое поле можно преобразовать в Надпись, Список, Поле со спис-ком. Элемент Флажок можно преобразовать в Выключатель и Переключатель.

5.3.3. Форматирование элементов управления Рассмотренные выше элементы управления можно располагать не только на фор-

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

На макетах отчетов и форм имеется сетка, которую можно использовать для вырав-нивания ЭУ. Шаг сетки по горизонтали и вертикали устанавливается в окне свойств фор-мы, рис.5.15, заданием свойства Число делений по X и Число делений по Y. По умолчанию устанавливается 10 делений на сантиметр по горизонтали и по вертикали. При использо-вании в качестве единиц измерения дюймов, по умолчанию устанавливается 24 деления на дюйм по горизонтали и вертикали.

5.3.4. Перемещение

Элементы управления выделяются щелчком мыши. Щелкнем, например, по эле-ментам управления для поля Город на рис.5.11. Выделенные ЭУ показаны на рис.5.16.

Рис. 5.16. Выделенный элемент управления

маркеры перемещения маркеры размеров

Page 71: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

71

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

Можно создать группу элементов управления, выделяя их щелчками мыши при нажатой клавише Shift. Тогда возможно перемещать одновременно все элементы группы. Ряд действий по выравниванию, рассмотренных ниже, применимы только к группам эле-ментов.

5.3.5. Изменение размеров и выравнивание Если выполнена команда Формат, Привязать к сетке (против этой команды в меню

стоит флажок), то положение и размеры ЭУ устанавливается по узлам сетки. Если флажка нет, элемент может занимать произвольное положение.

Изменение размеров ЭУ можно производить вручную, перетаскивая маркеры раз-меров, рис.5.16. Можно также воспользоваться командой Формат, Размер, которая предла-гает выбрать способ задания размера: по размеру данных или по узлам сетки. Если выделе-на группа элементов управления, то становятся доступными дополнительные команды установки размеров: по самому высокому, по самому низкому, по самому широкому, по са-мому узкому.

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

Взаимное расположение элементов управления, включенных в группу, определяет-ся интервалами по вертикали и горизонтали. Для изменения интервалов нужно выполнить команду Формат, Интервалы по горизонтали или Формат, Интервалы по вертикали, и вы-брать далее способ изменения интервалов, рис.5.17.

Рис. 5.17. Управление интервалами между элементами управления

5.3.6. Цвет и шрифт Управление внешним видом выделенного ЭУ производится настройками в окне

свойств, которое показывается после выполнения команды Вид, Свойства или командой Свойства контекстного меню. Цвет всех компонентов ЭУ можно установить на вкладке Макет окна свойств. Можно установить: Цвет фона, Цвет текста, Цвет границы и т.д. На рис.5.18 показана вкладка Макет окна свойств элемента Надпись и диалоговое окно выбора цвета, которое вызывается щелчком по кнопке , которая появляется при установке зна-чения цвета.

Page 72: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

72

Рис. 5.18. Вкладка Макет окна свойств и диалог выбора цвета

Шрифт текста в элементе управления устанавливается или кнопками на панели ин-струментов Формат, или на вкладке Макет окна свойств, рис.5.18, где можно выбрать вид шрифта, его размер и другие свойства.

5.4. Ввод данных с помощью формы Элементы управления позволяют обеспечить удобный ввод данных в таблицы с

помощью форм. Создадим с помощью мастера форму для таблицы Поставки, рис.5.19.

Рис. 5.19. Форма, созданная с помощью мастера

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

Перейдем в режим конструктора форм, нажмем кнопку Мастера элементов и по-местим на форму Поле со списком. Начнет работу Мастер списков.

На рис.5.20 показан первый диалог мастера. На этом диалоге задается источник данных для списка. Выберем значение переключателя Объект «поле со списком» будет ис-пользовать значения из таблицы или запроса.

Page 73: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

73

Рис. 5.20. Выбор источника данных для поля со списком

На втором диалоге выбирается таблица или запрос, которые будут источником дан-ных для поля со списком. Выбираем таблицу Поставщики, рис.5.21.

Рис. 5.21. Второй диалог Мастера списков. Выбор таблицы

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

Рис. 5.22. Отбор полей таблицы для поля со списком

На четвертом диалоге можно установить нужную ширину столбца для поля со списком, рис.5.23. Оставляем установленным флажок Скрыть ключевой столбец, так как

Page 74: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

74

числовое значение поля КодПоставщика не несет полезной для пользователя информа-ции.

Рис. 5.23. Четвертый диалог Мастера списков

На пятом диалоге, рис.5.24, выбираем переключатель Сохранить в поле и выбираем поле КодПоставщика таблицы Поставки, в котором будет сохраняться выбранное из списка значение ключевого поля КодПоставщика. Заметим, что пользователю для выбора будут предоставлены имена поставщиков в списке Поставщик, сохраняться же в таблице Поставки будет значение поля КодПоставщика.

Рис. 5.24. Пятый диалог Мастера списков

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

Рис. 5.25. Задание надписи для поля со списком

После нажатия кнопки Готово форма открывается в режиме конструктора. Здесь можно подправить расположение списка и надписи. Список и надпись перемещаются

Page 75: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

75

вместе. Для отдельного перемещения списка и надписи нужно использовать маркер в ле-вом верхнем углу, рис.5.26.

Рис. 5.26. Поле со списком и надпись к нему в конструкторе

Выделим созданный список и выведем окно свойств списка, рис.5.27. На вкладке Другие зададим имя списка Поставщики, на вкладке Данные значение свойства Ограни-читься списком установим в Да. Это запретит ввод поставщиков, которых нет в таблице Поставщики.

Рис. 5.27. Окно свойств поля со списком

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

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

Рис. 5.28. Форма со списками

5.5. Подчиненные формы Если имеются связанные таблицы, то информация из них может отображаться с

помощью подчиненных форм. Например, для базы данных ПоставщикиДетали важно знать, какие именно детали и в каком количестве поставляет тот или иной поставщик. Рассмотрим средства для создания форм, отображающих информацию из связанных таб-лиц.

Page 76: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

76

5.5.1. Использование мастера автоформ Простейшим способом создания подчиненной формы является использование ма-

стера автоформ. В окне БД перейдем к разделу Таблицы, выделим таблицу Поставщики, раскроем список кнопки Новый объект и выберем из него Автоформа, рис.5.29.

Рис. 5.29. Создание подчиненной формы средством Автоформа

Мастер автоматически создаст форму, представленную на рис.5.30.

Рис. 5.30. Подчиненная форма

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

Page 77: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

77

Рис. 5.31. Ввод имени формы

Созданную форму можно использовать для просмотра и ввода информации. Не-удобство ее использования состоит в том, что необходимо помнить числовые номера де-талей КодДетали.

5.5.2. Использование мастера форм Выберем из списка кнопки Новый объект команду Форма или нажмем кнопку Со-

здать на странице Форма окна БД. В окне Новая форма выберем Мастер форм и таблицу Поставщики из соответству-

ющего списка, рис.5.32.

Рис. 5.32. Выбор базовой таблицы для формы

На первом диалоговом окне мастера форм, рис.5.33, выбираем поля Поставщик, Город, Рейтинг из таблицы Поставщики, поле Название из таблицы Детали и поле Коли-чество из таблицы Поставки.

Page 78: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

78

Рис. 5.33. Первый диалог мастера форм. Выбор полей для формы

На втором диалоге можно выбрать главную таблицу, рис.5.34. По умолчанию глав-ной устанавливается первая таблица. Выберем также режим Подчиненные формы.

Рис. 5.34. Второй диалог мастера форм. Выбор главной таблицы

На третьем диалоге нужно выбрать вид формы (ленточный или табличный), выбе-рем ленточный. На четвертом диалоге можно выбрать стиль оформления, например, стан-дартный. На пятом диалоге нужно дать имена для главной и подчиненной форм, рис.5.35.

Page 79: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

79

Рис. 5.35. Назначение имен главной и подчиненной формам

Окончательный вид формы представлен на рис.5.36.

Рис. 5.36 Подчиненная форма, созданная с помощью мастера

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

6. Отчеты Отчеты предназначены для создания печатных копий информации из базы данных.

К категории отчетов относятся также наклейки и диаграммы. Отчеты хранятся как объек-ты в базе данных, их можно просматривать на экране и при необходимости распечатывать на бумаге.

Создание отчета начинается с выбора раздела Отчеты в окне БД и нажатия кнопки Создать. Появится диалог Новый отчет, рис.6.1.

Page 80: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

80

Рис. 6.1.Диалоговое окно Новый отчет

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

Конструктор позволяет создавать отчет с нуля на бланке отчета; Автоотчёты быстро создают отчеты стандартного вида, включая в них все поля

таблицы; Мастер диаграмм позволяет построить диаграмму на основе данных, хранящихся

в базе данных; Почтовые наклейки предназначены для наклеивания на конверты при рассылке

писем адресатам, информация о которых хранится в базе данных. Работа с отчетами происходит в двух режимах: режиме просмотра и в режиме

конструктора, переход между которыми происходит с помощью команд Конструктор и Предварительный просмотр меню Вид или нажатием одноименных кнопок на панели ин-струментов.

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

6.1. Автоотчеты Стандартные отчеты делятся на столбцовые и ленточные. В столбцовом отчете

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

Создадим столбцовый автоотчет для таблицы Детали, для чего выберем эту табли-цу из списка на диалоге Новый отчет, рис.6.1. Созданный автоматически отчет показан на рис.6.2.

Page 81: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

81

Рис. 6.2. Автоотчет в столбец для таблицы Детали

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

Рис. 6.3. Ленточный автоотчет для таблицы Поставщики

Page 82: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

82

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

ется перечислить все детали, указать для них поставщика и количество поставленных им деталей. Выберем в окне Новый отчет, рис. 6.1, Мастер отчетов и нажмем ОК.

В первом диалоговом окне выбираются таблицы и запросы, на основе которых бу-дет построен отчет, а также их поля. В состав выбранных полей включим Название из таблицы Детали, Поставщик из таблицы Поставщики и поле Количество из таблицы По-ставки, рис.6.4.

Рис. 6.4. Выбор таблиц и полей для отчета

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

Рис. 6.5. Второй диалог мастера отчетов

По кнопке Вывести дополнительные сведения можно получить справочную инфор-мацию о создании отчётов, рис.6.6.

Page 83: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

83

Рис. 6.6. Окно справочной информации по созданию отчётов

В данном примере выбранная первой таблица Детали используется для группиро-вания записей отчета по полю Название. В отчете будут перечислены сначала все записи по болтам, затем по винтам и т.д.

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

Рис. 6.7. Группировка отчета по полю Поставщик

В рассматриваемой базе данных таблицы Поставщики и Детали имеют связь «один-ко-многим» с таблицей Поставки, т.к. каждой записи в этих таблицах может соот-ветствовать несколько записей в таблице Поставки, поэтому по ним возможна группи-ровка. Если же для группировки выбрать таблицу Поставки, то группировка невозможна и схема отчета будет такой, как показано на рис.6.8.

Page 84: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

84

Рис. 6.8. Схема отчета без группировки

Вернемся ко второму диалоговому окну, рис.6.5, нажмем на нем кнопку Далее, пе-рейдем к третьему диалогу мастера отчетов, рис. 6.9, на котором можно уточнить пара-метры группировки записей. Например, можно добавить для группировки поле Постав-щик, и тогда схема отчета будет иметь вид, показанный на рис.6.9.

Рис. 6.9. Добавление второго поля для группировки

Добавленное поле Поставщик выделяется синим цветом. Кнопками со стрелками можно перемещать добавленное поле по уровням иерархии группировки.

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

Page 85: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

85

Рис. 6.10. Выбор порядка сортировки записей в отчете

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

Рис. 6.11. Выбор функции для итоговых значений

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

Рис. 6.12. Выбор макета и ориентации отчета

Page 86: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

86

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

В шестом диалоговом окне выбирается стиль оформления отчета. Выберем, напри-мер, стиль Деловой, рис.6.13.

Рис. 6.13. Выбор стиля оформления отчета

В седьмом диалоге, рис.6.14, отчету дается имя, например Детали, и завершается работа мастера.

Рис. 6.14. Ввод имени отчета

По завершении создания отчет можно просмотреть. Первая страница созданного отчета показана на рис.6.15.

Page 87: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

87

Рис. 6.15. Первая страница отчета Детали

Если бы не задавался вывод итогов, то соответствующих строчек Sum в отчете бы не было.

6.3. Использование отчета Основное назначение отчета – представить в обработанной и наглядной форме ин-

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

Детали Название Поставщик Количество Гайка Макрос 300 Итоги для 'Поставщик' = Макрос (1 запись) Sum 300 Прииск 300 Итоги для 'Поставщик' = Прииск (1 запись) Sum 300 Итоги для 'КодДетали' = 1 (2 записей) Sum 600 Болт Астра 200 Итоги для 'Поставщик' = Астра (1 запись) Sum 200 Виктория 200 Итоги для 'Поставщик' = Виктория (1 запись) Sum 200 Макрос 400 Итоги для 'Поставщик' = Макрос (1 запись) Sum 400 Прииск 200 Итоги для 'Поставщик' = Прииск (1 запись) Sum 200 Итоги для 'КодДетали' = 2 (4 записей) Sum 1000 Винт Прииск 400 Итоги для 'Поставщик' = Прииск (1 запись) Sum 400 Итоги для 'КодДетали' = 3 (1 запись) Sum 400 30 марта 2004 г. Страница 1 из 2

Page 88: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

88

На экран можно выводить разное число страниц отчета. Управление видом вывода производится командой меню Вид, Число страниц или кнопками на панели инструментов:

– Одна страница, – Две страницы, – Несколько страниц. Внизу окна отчета, см. рис.6.2, 6.3, расположен навигатор, облегчающий переме-

щение между страницами отчета. Назначение кнопок навигатора приведено на рис.6.16.

Рис. 6.16. Навигатор для отчета

На принтер отчет выводится командой Файл, Печать. Имеется возможность экспортировать отчет, созданный в Access, в другой формат

командой Файл, Экспорт. В списке Тип Файла диалога Экспорт объекта, рис.6.17, можно выбрать формат файла, в который будет экспортирован отчет. Например, при экспорте в файл формата RTF (Rich Text Format – богатый текстовый формат) будет полностью со-хранено форматирование отчета. Формат RTF используется для обмена текстовыми доку-ментами. Он поддерживается многими приложениями, в том числе и текстовым редакто-ром Word. Приведенная на рис.6.15 страница отчета получена именно таким образом.

Рис. 6.17. Экспорт отчета

6.4. Модификация структуры отчета 6.4.1. Работа в конструкторе отчетов Модификация структуры отчета выполняется в режиме Конструктора. Переход в

этот режим производится командой меню Вид, Конструктор. Создадим мастером отчет со структурой, показанной на рис.6.18. Назначим на 4-м диалоге мастера отчетов Итоги, рис.6.10, суммарное значения по полю Количество. Назовем отчет Детали_Количество.

первая страницапредыдущая страница

последняя страница следующая страница номер страницы

Page 89: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

89

Рис. 6.18. Вариант группировки данных в отчете

Отчет будет иметь вид, представленный на рис.6.19.

Рис. 6.19. Отчет Детали_Количество

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

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

Детали_Количество Название Поставщик Количество Гайка Макрос 300 Прииск 300 Итоги для 'КодДетали' = 1 (2 записей) Su 600 Болт Астра 200 Виктория 200 Макрос 400 Прииск 200 Итоги для 'КодДетали' = 2 (4 записей) Su 1000 Винт Прииск 400 Итоги для 'КодДетали' = 3 (1 запись) Su 400 Винт Астра 300 Прииск 200 Итоги для 'КодДетали' = 4 (2 записей) Su 500 Муфта Астра 400 Прииск 100 Итоги для 'КодДетали' = 5 (2 записей) Su 500 Шпилька Прииск 100 Итоги для 'КодДетали' = 6 (1 запись) Su 100 ИТОГО 3100 31 марта 2004 г. Страница 1 из 1

Page 90: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

90

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

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

ню. Если раздел включен в отчет, то в меню Вид стоит галочка против соответствующей команды. При удалении раздела удаляются все размещенные в нем ЭУ.

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

Рис. 6.20. Отчет Детали_Количество в режиме конструктора

Элементы управления могут быть просто надписями, не связанными со значениями полей, например, название отчета, или могут быть связаны с полями. Каждый ЭУ имеет свойства, которые перечислены в окне свойств. Это окно открывается командой Свойства из контекстного меню или меню Вид, рис.6.21.

Page 91: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

91

Рис. 6.21. Окно свойств раздела Заголовок отчета

В разделе Примечание группы ‘КодДетали’ стоит выражение, значением которого является или слово Запись или слово Записей. Созданное автоматически выражение не обеспечивает формирование правильных окончаний слова Записи во всех возможных слу-чаях. Отредактируем это выражение, чтобы слово записи выводилось с правильным окон-чанием. Откроем окно Свойства для элемента управления, расположенного в разделе При-мечание группы ‘КодДетали’ и рассмотрим выражение на вкладке Данные, рис.6.22.

Рис. 6.22. Окно свойств раздела отчета Примечание группы ‘КодДетали’

Полностью данное выражение имеет вид:

="Итоги для " & "'КодДетали'=" & " " & [КодДетали] & " (" & Count(*) & " " & IIf(Count(*)=1; "запись"; "записей") &")" (1) В нем используется нотация VBA (Visual Basic for Application). Строки символов

заключаются в двойные кавычки, имена полей выделяются квадратными скобками. Функция Count(*) возвращает число записей в группе, которая включает записи с

одинаковым значением поля КодДетали. Функция IIf(«expr»; «truepart»; «falsepart») относится к категории Управление,

рис.6.23. При истинности выражения «expr» функция возвращает значение выражения «truepart», а при ложности – «falsepart».

Page 92: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

92

Рис. 6.23. Использование построителя выражений

В окне свойств, справа от свойства Данные находятся две кнопки: – список полей и – вызвать построитель выражений.

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

="Итоги для " & "'КодДетали' = " & " " & [КодДетали] & " (" & Count(*) & " "& IIf(Count(*)=1 Or (Count(*)>20 And Count(*) Mod 10=1); "запись"; IIf((Count(*)>1 And Count(*)<5) Or (Count(*)>21 And Count(*) Mod 10>1 And Count(*) Mod 10<5);"записи"; "записей")) & ")" Это выражение обеспечит создание правильного окончания для слова записи

вплоть до количества записей равного 100. После ввода выражения в построителе выра-жений нажимаем ОК, переходим в окно Свойства, куда в соответствующую строку будет перенесено составленное выражение. Здесь для завершения ввода нажимаем Enter, после чего новое выражение переносится на макет отчета, если в выражении нет синтаксических ошибок. При наличии ошибок выводятся диагностические сообщения.

Page 93: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

93

Рис. 6.24. Отчет после коррекции структуры

Изменим Примечание отчета. Выделим надпись, где написано Итого, и напишем в этой надписи ВСЕГО ПОСТАВОК, а вместо выражения =SUM([Количество]) введем =Count(*) для вывода общего количество поставок. Созданный отчет показан на рис.6.24.

6.4.2. Управление группировкой Структура групп в отчетах, а также сортировка записей в разделе Область данных

определяется командой Сортировка и Группировка меню Вид, рис.6.25.

Page 94: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

94

Рис. 6.25. Задание сортировки и группировки в отчете

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

6.4.3. Форматирование элементов управления Работа с элементами управления, размещенными в отчетах, ведется теми же прие-

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

6.5. Создание наклеек Наклейки используются, например, в качестве адресов получателей на почтовых

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

мер, в качестве ярлыков на ящиках, в которых хранятся детали определенного вида. Наклейки относятся к отчетам, для их создания переходим в раздел Отчеты в окне базы данных и нажимаем кнопку Создать, а затем в окне Новый отчет выбираем Почтовые наклейки, рис.6.26. Здесь же выбираем таблицу Детали, по данным которой будут созданы наклейки.

Рис. 6.26. Начало создания наклеек

В первом диалоговом окне выбирается система единиц измерения: британская или метрическая и тип бумаги: на листах или рулонная, рис.6.27.

Page 95: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

95

Рис. 6.27. Настройка наклеек

Во втором диалоговом окне, рис. 6.28 задаются элементы форматирования: вид шрифта, его размер, начертание, цвет.

Рис. 6.28. Выбор шрифта для наклейки

На третьем диалоге отбираются поля для включения в наклейку, рис. 6.29. Кроме того, здесь можно поместить на наклейку поясняющий текст, который будет повторяться на каждой наклейке. В приводимом примере это слова Название, Цвет, Вес.

Рис. 6.29. Отбор полей для наклеек

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

Page 96: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

96

Рис. 6.30. Выбор поля для сортировки наклеек

На последнем диалоге, рис.6.31 вводится имя наклеек.

Рис. 6.31. Ввод имени наклеек

На рис.6.32 показано окно с созданными наклейками. На одном листе бумаги раз-мещается равномерно несколько наклеек.

Рис. 6.32. Окно с наклейками по данным таблицы Детали

Открыв наклейки в режиме конструктора, рис.6.33 можно подправить их формат обычными средствами форматирования отчетов, например, можно добавить надписи для

Page 97: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

97

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

Рис. 6.33. Наклейки в режиме конструктора

6.6. Связь с другими компонентами Office Мощным средством создания большого количества однородных документов,

например, типовых писем, поздравлений, напоминаний, конвертов, наклеек с использова-нием информации, хранящейся в базе данных, являются документы слияния текстового редактора Word. Их можно создавать, работая в Word и обращаясь к базе данных Access за данными, а можно начинать их создание в Access, переходя затем в Word. Техника созда-ния документа слияния будет описана отдельно для версии Word 2000 и версий XP и 2003, так как они отличаются.

6.6.1. Создание документа слияния в Office 2000 Вместо создания наклеек непосредственно в Access можно связать таблицу Access с

документом слияния MS Word, а затем воспользоваться этим документом для печати наклеек, конвертов или типовых писем с информацией из таблицы или запроса. Для уста-новления связи с редактором Word нужно выделить таблицу или запрос в окне БД и вы-полнить команду Сервис, Связи с Office, Слияние с MSWord.

Пусть нужно распечатать наклейки с названиями деталей, с указанием их веса и цвета, чтобы использовать их в качестве ярлыков на складе. Выполним указанную выше команду, появится диалог Слияние с документами Microsoft Word, рис.6.34. Можно связать данные Access с уже существующим основным документом слияния или же создать но-вый документ слияния.

Рис. 6.34. Окно Слияние с документами Microsoft Word

Page 98: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

98

На диалоге Слияние с документами Microsoft Word выберем Создать новый документ и установить связь с ним. Загрузится Word. Дальнейшая работа производится в этой про-грамме.

В редакторе Word можно создавать группы типовых документов, имеющих общее основное содержание и отличающихся в деталях, например, типовые письма одинакового содержания, направляемые различным адресатам. Это реализуется с помощью документа слияния, в котором объединяется типовой документ Word и данные из какого-либо источ-ника данных. Word поддерживает различные источники данных, в том числе таблицы Ac-cess. Наклейки для обозначения деталей, о которых идет речь, относятся к документам та-кого типа. После выполнения вышеуказанной команды будет создан источник данных на базе выбранной таблицы Детали, доступный в Word.

Опишем теперь действия, которые надо сделать в Word для создания наклеек. Выполним команду Сервис, Слияние. Появится диалог Слияние, рис.6.35. Нажмем

на нем кнопку Создать и выберем Наклейки.

Рис. 6.35. Работа по созданию документа слияния

Появится окно сообщения, рис.6.36, в котором выберем кнопку Изменить тип доку-мента, после чего вернемся в окно Слияние.

Рис. 6.36. Выбор режима создания документа слияния

Далее в окне Слияние следует нажать кнопку Настройка, после чего появляется диа-лог Параметры наклейки, рис.6.37, на котором выбираем сорт наклейки и тип наклейки со-ответствующего сорта. Можно создать собственный тип наклейки, нажав кнопку Создать.

Page 99: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

99

Рис. 6.37. Настройка наклеек

После нажатия кнопки ОК появляется диалог Создание наклеек, рис.6.38, на котором вводим текст, который должен быть в каждой наклейке, и кнопкой Вставить поле слияния помещаем необходимые поля из источника данных. Здесь можно выполнить простейшее форматирование текста, например, выбрать курсивный шрифт.

Рис. 6.38. Создание образца наклейки

Далее на диалоге Слияние, рис.6.35, нужно нажать кнопку Объединить, после чего появится диалог, рис.6.39, на котором можно установить условия отбора записей, вы-брать, что делать с наклейками: печатать, сохранить в новом документе или отправить по электронной почте.

Рис. 6.39. Настройка записей для слияния

После нажатия кнопки Объединить будет создан документ с наклейками, показан-ный на рис.6.40. Видно, что он основан на таблице редактора Word, что обеспечивает рав-номерное расположение наклеек на листе бумаги.

Page 100: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

100

Рис. 6.40. Лист документа с наклейками

6.6.2. Создание документа слияния в Office XP и Office 2003 Рассмотрим создание документов слияния в более новых версиях пакета Office на

примере создания наклеек. Выберем в окне базы данных Access таблицу Детали и выполним команду Сервис,

Связи с Office, Слияние с Microsoft Word. Появится диалог Слияние с документами Microsoft Word, рис. 6.34, в котором выберем переключатель Создать новый документ и установить связь с ним. После нажатия OK загружается Word в режиме создания документа слияния, рис.6.41.

Рис. 6.41. Начало создания документа слияния

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

Page 101: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

101

полнить 6 этапов по созданию документа слияния. Итак, на первом этапе выбирается тип документа слияния. Выберем Наклейки и, нажав кнопку Далее, перейдем ко второму эта-пу, рис.6.42. Здесь следует нажать кнопку Параметры наклейки, после чего появляется диалог Параметры наклейки, рис.6.37, в котором выбирается один из шаблонов наклеек. После выбора шаблона возвращаемся в окно второго этапа, рис. 6.42, и переходим к тре-тьему этапу, рис. 6.43, где нужно выбрать получателей создаваемых типовых документов. В нашем примере список получателей уже имеется – это детали из таблицы Детали базы данных ПоставщикиДетали, поэтому просто переходим к следующему этапу.

Рис. 6.42. Второй этап создания документа слияния

Рис. 6.43. Выбор получателей типовых до-кументов

Заметим, что при создании документов слияния используется терминология (например, «получатели»), относящаяся к созданию типовых писем, хотя в нашем случае цель создания наклеек другая.

На четвертом этапе происходит разработка первой наклейки, рис.6.44. Здесь просто вводится текст, который будет повторяться во всех наклейках, а для того чтобы отобража-лись данные из источника данных, нужно нажимать кнопку Другие элементы в Области задач и выбирать в окне Добавление полей слияния нужные поля базы данных для вставки в наклейку. После создания первой наклейки следует нажать кнопку Обновление всех наклеек. Произойдет автоматическое создание наклеек для всех записей из таблицы Дета-ли.

Page 102: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

102

Рис. 6.44. Создание первой наклейки

На пятом этапе можно просмотреть отдельные наклейки, рис.6.45.

Рис. 6.45. Просмотр отдельных наклеек

На шестом этапе можно распечатать наклейки или перейти к просмотру отдельных наклеек, рис.6.46.

Page 103: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

103

Рис. 6.46. Завершение создания документа слияния

Если нажать кнопку Печать, будет выведено окно, рис. 6.47, в котором можно вы-брать диапазон для печати наклеек. Далее выполняются обычные действия по печати до-кумента.

Рис. 6.47. Выбор диапазона для печати наклеек

Если нажать кнопку Изменить отдельные наклейки, выводится окно, рис.6.48, с по-мощью которого можно отобрать записи для включения в составной новый документ. По-сле нажатия кнопки OK будет создан обычный документ с названием Наклейки1.doc, со-держащий отобранные наклейки, рис. 6.49.

Рис. 6.48. Выбор записей для документа

Page 104: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

104

Рис. 6.49. Документ с текстами наклеек

Документ Наклейки1.doc с наклейками сохраним под именем НаклейкиДетали.doc. Перейдем к исходному документу слияния Документ1.doc, используя меню Окно,

рис. 6.50.

Рис. 6.50. Переход к исходному документу слияния

Сохраним документ слияния Документ1.doc под именем СлияниеДетали.doc. При повторном открытия этого документа будет выдаваться предупреждение об открытии со-ответствующего источника данных для документа, рис.6.51.

Рис. 6.51. Сообщение о помещении данных в документ слияния

Page 105: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

105

Если данные в таблице Детали были изменены, в документе слияния СлияниеДета-ли.doc будут использованы обновленные данные, то есть в документе слияния всегда ис-пользуются актуальные данные.

В обычном документе НаклейкиДетали.doc будут содержаться наклейки для запи-сей таблицы Детали на момент создания этого документа.

6.6.3. Публикация в Word Выберем в окне базы данных таблицу Поставщики и выполним команду Сервис,

Связи с Office, Публикации в MSWord. В папке Мои документы будет автоматически создан файл Поставщики.rtf в формате RTF, в котором будет размещена информация из выбран-ной таблицы. Вслед за этим созданный файл будет открыт в редакторе Word. При откры-тии будет предложен список форматов файлов для преобразования, рис.6.52. Следует вы-брать Текст в формате RTF. Документ, созданный по данным таблицы Поставщики, пока-зан на рис.6.53. Видно, что содержимое таблицы Access преобразовано в таблицу Word.

Рис. 6.52. Выбор формата преобразования

Рис. 6.53. Публикация таблицы Поставщики в Word

6.6.4. Анализ в Excel Для обработки данных можно использовать мощные средства численного анализа

электронных таблиц Excel. Проведем анализ данных из запроса ДеталиПоставщиков, в котором определен

общий вес каждой детали, поставленной поставщиком, рис.4.18. Выполним команду Сер-вис, Связи с Office, Анализ в MS Excel. По данным запроса в папке Мои документы будет создана рабочая книга Excel, имя которой совпадает с именем таблицы или запроса. На рис.6.54 показан лист Excel с этим запросом.

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

Page 106: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

106

Рис. 6.54. Запрос ДеталиПоставщиков, экспортированный в Excel

7. Макросы Access имеет в своем составе набор макрокоманд, которые позволяют выполнять

некоторые типовые действия, например, имеется макрокоманда Открыть (таблицу, форму, отчет).

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

Макросы имеются также в Word, Excel, но там они представляют собой подпро-граммы на VBA. Кроме того, в указанных программах имеется возможность запоминать последовательность действий пользователя в виде макроса. Такой возможности в Access нет.

Для создания макроса нужно выбрать Макросы в окне БД и нажать кнопку Создать или выполнить команду Вставка, Макрос. Появится бланк конструктора макросов, рис. 7.1, с помощью которого в макрос вставляются макрокоманды.

Page 107: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

107

Рис. 7.1. Бланк конструктора макросов

Макрокоманда выбирается из списка в ячейках столбца Макрокоманда. Всего суще-ствует более 50 встроенных макрокоманд. В столбце Примечание вводятся комментарии для пояснения действия макрокоманды. В нижней части бланка задаются параметры мак-рокоманд, например, для команды ОткрытьФорму здесь нужно указать имя открываемой формы, а для команды НаЗапись – номер записи, к которой следует перейти.

При закрытии окна бланка, при выполнении команд Файл, Сохранить или Файл, Со-хранить как появляется окно, в котором нужно задать имя макроса. Показанный на рис. 7.1 макрос предназначен для ввода данных о новой поставке, для чего в него включена ко-манда ОткрытьФорму с аргументом Поставки, (данная форма показана на рис.5.28) и ко-манда НаЗапись с аргументом Новая, что обеспечит переход в таблице Поставки к вводу новой записи.

Макрос запускается на выполнение кнопкой или командой Сервис, Макрос, Выполнить макрос.

7.1. Группа макросов Если в режиме конструктора макросов нажать на панели инструментов кнопку

Имена макросов или выполнить команду Вид, Имена макросов, то в бланке конструк-тора макросов появится еще один столбец Имя макроса, рис.7.2, с помощью которого в со-ставе макроса можно выделить последовательности макрокоманд с собственными имена-ми. Повторное нажатие кнопки Имена макросов или повторное выполнение команды Вид, Имена макросов убирает столбец Имена макросов из бланка.

На рис. 7.2. представлена группа макросов МакросДеталиПоставщики, содержащая два макроса Детали и Поставщики.

Рис. 7.2. Группа макросов

Page 108: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

108

При запуске макроса в группе макросов выполняется макрокоманда в столбце мак-рокоманд, а также все следующие макрокоманды, для которых ячейки столбца Имя макро-са пусты. Для запуска макроса из группы макросов нужно выполнить команду Сервис, Макросы, Запуск макроса, а затем в окне Запуск макроса выбрать из списка нужный мак-рос, рис.7.3. Имя макроса из группы является составным и записывается в виде МакросДе-талиПоставщики.Поставщики – через точку.

Рис. 7.3. Диалоговое окно Запуск макроса

7.2. Условные макрокоманды В бланк конструктора макросов можно добавить столбец Условие, рис. 7.4, нажав

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

Page 109: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

109

Рис. 7.4. Бланк конструктора макросов со столбцом Условие

Условие, показанное на рис.7.4, состоит в том, что выводится окно сообщения, на котором пользователь должен нажать кнопку ОК для перехода к вводу новой записи. Если кнопка OK нажата не будет, макрокоманда не выполнится, рис.7.5.

Рис. 7.5. Окно сообщения с вопросом

7.3. Запуск макроса При запуске макроса выполнение макрокоманд начинается с первой строки макроса

и продолжается до конца или до начала следующего макроса, если макрос входит в груп-пу.

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

Создадим макрос Первая запись. Для этого выберем макрокоманду НаЗапись, в ка-честве значения аргумента Запись выберем из списка значение Первая, рис.7.6.

Page 110: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

110

Рис. 7.6. Макрос без конкретного аргумента

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

Рис. 7.7. Форма Поставщики в режиме конструктор и окно свойств кнопки

На форме Поставщики для работы с записями из таблицы Поставщики поместим кнопку, рис.7.7, и выведем для нее окно свойств. Свойству Подпись (вкладка Макет), кото-рое содержит надпись на кнопке, дадим значение Первая запись, свойству Имя (вкладка Другие) дадим значение КнопкаПерваяЗапись, а событию Нажатие кнопки выбором из списка присвоим значение макроса ПерваяЗапись, рис.7.8.

Рис. 7.8. Выбор макроса для обработки события

В результате при работе с данной формой в любой момент времени нажатие со-зданной кнопки выведет в форму первую запись.

7.4. Назначение клавиш для выполнения макро-сов Свяжем выполнение макрокоманды или набора макрокоманд с нажатием какой-

либо клавиши или комбинации клавиш. Для этого в окно конструктора макросов нужно добавить столбец Имя макроса командой Вид, Имена макросов. В этом столбце можно ука-зать клавишу или сочетание клавиш, с которыми будет связана макрокоманда или набор макрокоманд. Описание клавиш имеет вид:

^ А или ^4 Ctrl+ любая буква или любая цифра; {F1} любая функциональная клавиша; +{F1} Shift+ любая функциональная клавиша;

Page 111: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

111

^{F1} Ctrl+ любая функциональная клавиша; {INSERT} клавиша Ins; ^{INSERT} комбинация Ctrl+Insert; +{INSERT} комбинация Shift+Insert; {DELETE} или {DEL} клавиша Delete; ^{DELETE} или ^{DEL} комбинация Ctrl+Del; +{DELETE} или +{DEL} комбинация Shift+Del. Макрос или группу макросов, выполнение которых будет происходить по нажатию

клавиш, следует сохранить под именем AutoKeys. Новые сочетания клавиш вступят в дей-ствие сразу после сохранения макроса и будут доступны при каждом открытии базы дан-ных. Если макрокоманда или набор макрокоманд связывается с сочетанием клавиш, кото-рое уже используется в Access (например, CTRL+C – сочетание клавиш для команды Копи-ровать), то новое назначение макрокоманд на это сочетание клавиш заменит стандартное назначение.

На рис.7.9 показан конструктор макросов с макросом, обеспечивающим переход на первую запись таблицы Детали по комбинации клавиш Ctrl+1 при работе с формой Дета-ли.

Рис. 7.9. Комбинация клавиш и имя для макроса

Если теперь открыть форму Детали, то при нажатии Ctrl+1 будет происходить пе-реход к первой записи.

Page 112: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

112

8. Управление приложением Access

8.1. Главная кнопочная форма Главная кнопочная форма предоставляет удобный интерфейс пользователю для ра-

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

Создание кнопочной формы начинается с выполнения команды Сервис, Служебные программы, Диспетчер кнопочных форм. Если база данных не содержит кнопочных форм, выводится диалог, показанный на рис.8.1.

Рис. 8.1. Начало создания кнопочной формы

После нажатия кнопки Да появляется диалог Диспетчер кнопочных форм, рис. 8.2, в котором перечисляются все страницы кнопочной формы. По умолчанию создается одна страница, имя которой (Main Switchboard или Главная кнопочная форма) показывается в списке.

Кнопка Создать позволяет добавить на кнопочную форму еще одну страницу.

Рис. 8.2. Диалоговое окно Диспетчера кнопочных форм

Для создания кнопок на существующей странице кнопочной формы нужно нажать кнопку Изменить. Появится диалог Изменение страницы кнопочной формы. На рис. 8.3 этот диалог показан в начальном состоянии, когда еще не созданы элементы кнопочной формы. На рис. 8.5 в этом диалоге показаны созданные элементы кнопочной формы.

Для создания нового элемента кнопочной формы нужно нажать кнопку Создать на диалоге Изменение страницы кнопочной формы. Нажав кнопку Изменить, можно отредак-тировать существующий элемент кнопочной формы. Существующий элемент удаляется с помощью кнопки Удалить. Взаимное расположение элементов кнопочной формы изменя-ется с помощь кнопок Вверх и Вниз.

Page 113: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

113

Рис. 8.3. Редактирование элементов кнопочной формы

После нажатия кнопки Создать вызывается окно для задания параметров нового элемента кнопочной формы, рис. 8.4.

Рис. 8.4. Создание элемента кнопочной формы

В поле Текст вводится надпись, поясняющая назначение создаваемой кнопки, в списке Команда выбирается команда, которая будет выполняться при нажатии кнопки. Ес-ли выбрана команда, требующая аргумента, появляется список для его выбора. Например, для команды Открыть форму для изменения список возможных аргументов будет назы-ваться Форма. В нем следует выбрать форму, которая будет открыта при нажатии создава-емой кнопки. По установкам, сделанным на рис. 8.4, на кнопочной форме будет создана кнопка для открытия формы Поставщики в режиме изменения записей таблицы Постав-щики.

Аналогично добавляются другие кнопки на кнопочную форму, рис. 8.5.

Рис. 8.5. Список кнопок на кнопочной форме

С кнопкой Завершить работу с БД свяжем команду Выйти из приложения, рис. 8.6.

Page 114: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

114

Рис. 8.6. Параметры кнопки, завершающей работу с базой данных

После включения в форму необходимых элементов кнопкой Закрыть закрываем ок-но Изменение страницы кнопочной формы, рис. 8.5, а затем окно Диспетчера кнопочных форм, рис. 8.2. В списке форм окна базы данных появится форма с названием Switchboard (Кнопочная форма), а в списке таблиц появится таблица Switchboard Items, содержащая описания элементов кнопочной формы, рис. 8.7.

Рис. 8.7. Таблица, описывающая элементы кнопочной формы

Для того чтобы кнопочная форма загружалась при запуске приложения, выполним команду Сервис, Параметры запуска и на диалоге Параметры запуска, рис. 8.8, в списке Вывод формы/страницы выбираем главную кнопочную форму.

Рис. 8.8. Выбор формы, начинающей работу с базой данных

Созданная кнопочная форма показана на рис. 8.9.

Page 115: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

115

Рис. 8.9. Вид главной кнопочной формы

8.2. Анализ базы данных Средства анализа содержимого базы данных позволяют оптимизировать структуру

таблиц.

8.2.1. Анализ таблиц С помощью анализа таблиц можно выявить повторяющиеся данные в таблицах и

разместить повторяющиеся сведения в новых таблицах. Выполним команду Сервис, Анализ, Таблица. Начнет работать мастер анализа таб-

лиц. Первые два диалога показаны на рисунках 8.10, 8.11. Они объясняют, как таблицу можно разделить на две или более для устранения избыточности данных.

Рис. 8.10. Первый диалог мастера анализа таблиц с объяснением постановки задачи

Page 116: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

116

Рис. 8.11. Второй диалог мастера анализа таблиц с примером

На третьем диалоге, рис. 8.12, выбираем таблицу для анализа, например, Постав-щики.

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

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

Page 117: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

117

Рис. 8.13. Выбор способа разделения таблицы

Если мастер анализа таблиц решит, что таблицу разделять не следует, будет выве-дено информационное сообщение, рис. 8.14, на котором, однако, имеется кнопка OK, нажав которую можно перейти к ручному разделению таблицы.

Рис. 8.14. Информация мастера анализа таблиц

Разделение таблицы производится на специальном бланке, рис. 8.15. Для преобра-зования поля или нескольких полей в отдельную таблицу их следует перетащить мышью из исходной таблицы наружу. На рис. 8.15 в отдельную таблицу выделено поле Город, так как в таблице Поставщики у этого поля есть повторяющиеся значения. Сразу же появля-ется окно для ввода имени созданной таблицы, которая по умолчанию называется Табли-ца2. Изменим это название на Города, а Таблицу1 назовем Поставщики1.

Page 118: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

118

Рис. 8.15. Разделение таблицы

Ряд действий в окне Анализ таблиц можно выполнить с помощью кнопок:

– выводит окно с советами;

– переименовать таблицу;

– сделать поле ключевым;

– добавить ключевое поле. Окно с перечнем советов приведено на рис. 8.16.

Рис. 8.16. Советы по разделению таблиц

После нажатия кнопки Далее на диалоге, показанном на рис. 8.15, появится диалог с вопросом о создании запроса вместо старой таблицы, рис. 8.17. Если согласиться на со-здание запроса, то будет создан запрос Поставщики, который будет использован везде, где ранее использовалась таблица Поставщики, а сама таблица Поставщики будет назва-на Поставщики_СТАРАЯ.

Page 119: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

119

Рис. 8.17. Предложение создать запрос вместо разделенной таблицы

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

Рис. 8.18. Две таблицы, полученные из таблицы Поставщики

Page 120: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

120

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

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

8.3.1. Установка пароля Установка пароля возможна, если база данных открыта в режиме монопольного до-

ступа. Для этого при открытии БД нужно выбрать режим Монопольно в списке кнопки Открыть диалога Открытие файла базы данных, рис. 8.19.

Рис. 8.19. Выбор режима открытия базы данных

Установка пароля производится командой Сервис, Защита, Задать пароль базы дан-ных. Появится окно для ввода пароля, рис. 8.20, в котором надо ввести и подтвердить па-роль. После этого при каждом открытии базы данных будет предлагаться ввести пароль, рис. 8.21.

Рис. 8.20. Задание пароля

Page 121: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

121

Рис. 8.21. Ввод пароля при открытии базы данных

8.3.2. Удаление пароля Для удаления пароля базу данных следует открыть в монопольном режиме, рис.

8.19. Если пароль установлен, то в меню появится команда Сервис, Защита, Удалить па-роль базы данных…, выводящая окно, рис.8.22, на котором нужно ввести старый пароль. После нажатия OK пароль будет удален.

Рис. 8.22. Ввод старого пароля при его удалении

Page 122: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

122

9. Модули Объекты Модули Access содержат программный код на языке программирования

Visual Basic for Application (VBA). Этот язык встроен в Access, он также используется в Word, Excel и некоторых других приложениях. VBA не следует путать с языком Visual Basic (VB), который является независимым средством разработки. Язык Basic (Beginners All – purpose Symbolic Instruction Code – универсальный язык для начинающих) появился в 1964 г. В 1992 г. Microsoft выпустила первую систему визуальной разработки приложе-ний Visual Basic. В 1994 г. появился языкVBA для использования в составе других прило-жений.

9.1. Первая программа Командой Сервис, Макрос, Редактор Visual Basic в отдельном, независимом от

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

Рис. 9.1. Редактор VBA и контекстное меню для проекта

Рис. 9.2. Настройка свойств проекта

С каждой базой данных связывается проект VBA, структура которого показывается в окне Project. Командой контекстного меню Properties, рис. 9.1, выводится окно свойств

Page 123: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

123

проекта, рис.9.2, в котором можно сделать некоторые настройки, например, изменить имя проекта, задать описание проекта в поле Project Description, связать с проектом файл справки в поле Help File Name.

Новый модуль кода включается в проект, если в разделе Модули окна базы данных нажать кнопку Создать или выполнить команду Insert, Module в редакторе VBA. Модуль по умолчанию будет назван Module1. Выполним эту команду и в появившемся окне редак-тирования программы, рис.9.3, введем следующий код:

Sub hello() MsgBox(”Здравствуй, мир!”) End Sub Здесь слово Sub начинает подпрограмму, слова End Sub завершают подпрограмму.

Стандартная функция MsgBox создает на экране окно и выводит в нем текст, передавае-мый ей в качестве аргумента.

В состав модуля могут входить несколько подпрограмм. Выполним команду File, Save, рис.9.3, и сохраним модуль под именем Module_Hello.

Рис. 9.3. Сохранение модуля

Для запуска программы выполним команду Run, Run Sub/UserForm или просто нажмем F5. Результат работы программы показан на рис.9.4.

Рис. 9.4. Окно работающего программного модуля

Модуль из проекта удаляется командой File, Remove или такой же командой кон-текстного меню.

9.2. Краткий обзор языка VBA

9.2.1. Алфавит и лексика Алфавит включает большинство символов кодовой таблицы, в том числе и русские

буквы, причем русские буквы можно использовать при образовании имен объектов про-граммы, но надо помнить, что это справедливо лишь в локализованной (русифицирован-ной) версии Access. Большие и малые буквы считаются одинаковыми.

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

Page 124: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

124

переноса символ подчеркивания (_). Несколько инструкций можно размещать в одной строке текста, разделяя их двоеточием (:).

Комментарии к программе начинаются апострофом ’ и завершаются концом строки.

9.2.2. Ключевые слова Язык включает ключевые слова, которые имеют заранее предопределенный смысл.

Их нельзя использовать для обозначения переменных, констант, других объектов про-граммы. Например, ключевыми словами являются названия типов данных: Integer, String.

9.2.3. Операции Арифметические операции обозначаются общепринятым образом: + сложение, - вычитание, * умножение, / деление. Имеются еще арифметические операции: a ^ b возведение a в степень b, a \ b целая часть от деления a на b, a Mod b остаток от деления a на b.

9.2.4. Типы данных VBA поддерживает следующие типы данных: Byte, Integer, Long – целые, размером 1, 2 и 4 байта; Single, Double – числа с плавающей точкой размером 4 и 8 байт; Currency – денежный с 4-мя цифрами после десятичной точки; Decimal – любое число до 28 цифр; Boolean – логический со значениями True и False; Date – дата от 01.01.0100 до 31.12.9999; String – строковый, длиной до 64 Кбайт; Object – ссылка на объект; Variant – вариантный, совместимый со всеми другими типами.

Если тип переменной не указан явно, считается, что это тип Variant.

9.2.5. Переменные, константы, массивы Явное объявление простой переменной имеет вид: Dim ИМЯ1 [As<ТИП>] [, ИМЯ2 [As<ТИП>]]… Здесь в квадратные скобки заключены необязательные элементы. После каждой переменной нужно указывать тип, иначе переменная получит тип

Variant. Например,

Dim s As String ' Строковая переменная Dim i As Integer, d As Double ' i - целого типа, d – плавающего двойной точности Объявление констант имеет вид:

Const ИМЯ_КОНСТАНТЫ [As<ТИП>] = Выражение При определении массивов размерность указывается в круглых скобках:

Dim ИМЯ_МАССИВА (<размер1>[,размер2>]...) [As <ТИП>] Например,

Page 125: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

125

Dim A(10, 10) As Integer ’ Целочисленный двумерный массив Индексация элементов массива начинается с 1.

9.2.6. Операторы цикла и условия VBA имеет несколько операторов цикла. Циклы со счетчиком объявляются с использованием ключевого слова For, напри-

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

Sub Fact20() f = 1 ’ Неявное объявление переменной f For i = 20 To 1 Step - 1 ’ Цикл по убыванию f = f * i Next i MsgBox (f) End Sub Программа выдаст значение 2.43290200817664E+18. Если шаг цикла Step явно не указан, он принимается равным 1. Существуют два вида циклов с условием, отличающихся местом расположения

условия. Цикл с предусловием записывается в виде: Do While Условие [Блок операторов] Loop Цикл с постусловием имеет вид:

Do [Блок операторов] Loop While Условие Данные циклы повторяются до тех пор, пока условие остается истинным. Если ключевое слово While заменить на Until, то циклы будут повторяться, пока

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

While Условие [Блок операторов] Wend Условный оператор применяется для выбора одного из нескольких вариантов вы-

полнения программы. Его синтаксис следующий:

If условие Then [Блок_Операторов1] Else [Блок_Операторов2] End If

9.2.7. Процедуры и функции В виде процедур оформляются фрагменты программы, выполняющие некоторую

самостоятельную часть вычислений. Процедуры оформляются следующим образом: [Private|Public] Sub ИмяПроцедуры([Список_аргументов]) [Блок_Операторов] End Sub

Page 126: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

126

Здесь вертикальная черта разделяет альтернативные варианты. Ключевое слово Private задает в качестве области видимости процедуры только те-

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

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

Sub Change (ByRef a As Integer, ByRef b As Integer) Dim Tmp As Integer Tmp = a: a = b: b = Tmp End Sub Двоеточие разделяет инструкции программы, расположенные в одной строке. Для передачи аргументов по значению используется ключевое слово ByVal. Функции – это подпрограммы, возвращающие значение. Внутри функции должен

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

Public Function Max(ByVal A As Integer, ByVal B As Integer) As Integer If A > B Then Max = A ’ Имени функции присваивается значение Else Max = B End If End Function VBA имеет обширную встроенную библиотеку процедур и функций, которые обес-

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

9.3. Среда разработки 9.3.1. Состав среды Среда разработки предоставляет удобные средства для создания программ. Она со-

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

Настройка среды производится командами меню View. Рассмотрим эти команды и открываемые ими окна.

Команда View, Object Browser выводит окно просмотра объектов, в котором можно просмотреть состав всех встроенных классов, а также типов и классов пользователя, например, на рис.9.5 в этом окне виден состав класса ClassPers.

Команда View, Project Explorer выводит окно Project, содержащее иерархическое де-рево проектов приложения и модулей этих проектов с их элементами. Здесь имеются пап-ки, из которых можно выбрать нужный объект: Modules – содержит модули пользователя, Class Modules – модули классов, References – ссылки на объекты из внешних библиотек и список модулей этих библиотек.

В окне Properties, которое выводится по команде View, Properties Window, показыва-ются свойства выбранного элемента проекта, например, на рис.9.5 в этом окне видны свойства модуля класса СlassPers. Значения свойств в окне Properties можно задавать или изменять.

Page 127: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

127

Рис. 9.5. Среда разработки VBA

Окно кода текущего модуля вызывается командой View, Code. В окне Immediate, вызываемом командой View, Immediate Window, операторы Бейси-

ка выполняются немедленно, сразу после их ввода и нажатия Enter. На рис. 9.5 в этом окне выполнены два оператора: x = 3 и print x, и виден также результат работы второго из них.

Окно Locals, выводимое по команде View, Locals Window удобно при отладке про-грамм: в нем автоматически показываются значения локальных переменных текущей про-цедуры. На рис. 9.5 в этом окне видны значения локальных переменных процедуры InitPers.

Окно Watches выводится командой View, Watch Window. В нем можно наблюдать значения переменных и выражений во время выполнения программы. Выражения для просмотра добавляются командой Debug, Add Watch или такой же командой контекстного меню. В этом окне на рис. 9.5 показано значение выражения 2*2.

Для перехода в окно кода какого-либо модуля нужно выбрать этот модуль в окне Project и нажать F7 или выполнить команду меню View, Code. В окне кода пишется текст программы.

9.4. Отладка Команды отладки находятся в меню Debug. Перечислим эти команды: Step Into (F8) – выполнение одной строки кода, если в строке стоит вызов проце-

дуры или функции происходит вход в них; Step Over (Shift+F8) – выполнение строки кода без захода в процедуру и функ-

цию; Step Out (Ctrl+Shift+F8) – выполнение всех операторов процедуры и выход из нее; Run to Cursor (Ctrl+F8) – выполнение программы до точки расположения курсора. В процессе пошагового выполнения программы после установки курсора на какой-

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

Page 128: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

128

При поиске ошибок в программе полезно отображать в окне просмотра Watches те-кущие значения используемых переменных.

9.5. Управление структурой проекта Добавление новых компонентов в проект производится командами меню Insert: Module – добавляет в проект новый модуль; Class Module – добавляет в проект новый модуль класса; Procedure – в состав текущего модуля добавляется заготовка новой процедуры,

команда доступна, если активно окно кода; File – позволяет вставить в окно кода содержимое внешнего файла. Удаление какого-либо компонента из состава проекта производится командой File,

Remove, или такой же командой контекстного меню.

9.6. Справка Справку по какому-либо элементу VBA можно получить, установив на нем курсор

и нажав клавишу F1. В справке можно найти полное описание VBA, но на английском языке.

Рис. 9.6. Объектная модель Access

Все объекты, которые использует Access, доступны программам на VBA. Названия объектов, входящих в состав Access и образующих в совокупности объектную модель данного приложения, их свойства, методы и события можно изучить с помощью справоч-ной системы. Для просмотра объектной модели Access нужно в среде Access выполнить команду Справка, Справка MicrosoftAccess, Содержание, Программирование, Справочник по

Page 129: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

129

языку Visual Basic Microsoft Access, Объекты MsAccess. На рис.9.6 показана часть объект-ной модели Acccess. Аналогичные объектные модели имеют другие приложения пакета MS Office.

9.7. Классы и объекты

9.7.1. Объявление типов От ранних версий Бейсика VBA отличается возможностью объявлять пользователь-

ские типы данных. Например, для описания сведений о человеке можно объявить следу-ющий тип:

Public Type Person ' Person – новый тип данных Name As String ' Фамилия BirthDay As Date ' Дата рождения End Type Ключевое слово Public обеспечивает видимость объявляемого имени типа во всех

модулях проекта. Теперь можно использовать новый тип для определения переменных:

Sub DemoType() Dim Men As Person ' Men – переменная типа Person ' Задаем значения полям переменной Men: Men.Name = "Иванов" ' Значение для поля Name переменной Men Men.BirthDay = #12/4/1950# ' 4 декабря 1950 г. MsgBox ("Гражданин " & Men.Name & " родился " & Men.BirthDay) End Sub Для запуска конкретной подпрограммы модуля нужно поместить курсор в пределах

ее кода и нажать клавишу F5 или выполнить команду Run, Run Sub/UserForm. Написанная подпрограмма DemoType выдаст окно, показанное на рис.9.7.

Рис. 9.7. Применение пользовательского типа

9.7.2. Понятие класса VBA является объектно-ориентированным языком, это значит, что в нем можно ра-

ботать с классами и объектами. Программирование с использованием классов и объектов называется объектно-ориентированным программированием (ООП).

Класс – это расширенный пользовательский тип данных. Расширение заключается в возможности включения в состав класса кроме данных, как в обычном типе (см. 9.7.1), еще процедур и функций. Данные, входящие в класс, называются свойствами класса, процедуры и функции, входящие в класс, называются методами класса. Объединение данных и процедур (функций) в одном типе называется инкапсуляцией.

Объект – это переменная, имеющая тип некоторого класса. VBA имеет большую библиотеку встроенных классов, позволяющих работать с

формами, отчетами, макросами, элементами управления. Технология объектно-ориентированного программирования позволяет разрабаты-

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

Page 130: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

130

Пусть есть класс А. При объявлении класса В его свойствами могут быть объекты класса А. В этом случае говорят, что класс А встроен в класс В.

При наследовании новый производный класс В получает все методы и свойства ба-зового класса А и дополнительно свои собственные методы и свойства.

В VBA класс оформляется в виде модуля класса. Имя такого модуля является одно-временно именем класса. Для создания модуля класса нужно выполнить команду Insert, Class Module. Все переменные, объявленные в модуле класса, будут свойствами класса, все процедуры и функции, объявленные в модуле класса, станут методами класса.

9.7.3. Пример класса Разработаем класс ClassPers для моделирования набора сведений о личности чело-

века, используя при этом ранее разработанный тип Person. Выполним команду Insert, Class Module, при этом будет создан новый класс с име-

нем Class1. Изменим имя класса, введя его новое имя в строке Name окна Properties (свойств), рис. 9.8. Если окна свойств нет на экране, его можно вывести командой меню View, Properties или клавишей F4.

Рис. 9.8. Ввод имени класса

В окне кода введем следующий текст:

Dim Men As Person ’ Имя и дата рождения Dim Male As Boolean ' Мужской пол – True, женский – False ’ Init: инициализация объекта класса Public Sub Init(Nm As String, BD As Date, Pol As Boolean) Men.Name = Nm Men.BirthDay = BD Male = Pol End Sub Public Sub Prn() ’ Печать данных об объекте

Page 131: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

131

Dim str As String str = Men.Name & " родил" & IIf(Male, "ся ", "ась ") & Men.BirthDay MsgBox (str) End Sub В классе ClassPers свойствами класса являются Men типа Person и Male типа Boolean.

Процедуры Init и Print являются методами класса ClassPers. Поскольку членом класса ClassPers является свойство Men типа Person, можно гово-

рить, что тип Person встроен в класс ClassPers. Создадим обычный модуль ModDemoClass для испытания созданного класса, в ко-

тором напишем следующую процедуру:

Sub DemoClass() Dim Stud As New ClassPers ’ Stud – объект класса ClassPers Stud.Init "Петрова", #1/9/1984#, False ’ Инициализация объекта Stud.Prn ’ Печать объекта End Sub При запуске данного модуля, выводится окно (рис. 9.9):

Рис. 9.9. Использование пользовательского класса

Обратим внимание на то, что в программах на VBA используется американский формат даты «месяц/день/год», а в окнах сообщений применяется формат даты, установ-ленный в настройках Windows, в данном случае «день.месяц.год».

9.7.4. Объекты и ссылки на объекты Обратим внимание на инструкцию создания объекта Stud: Dim Stud As New ClassPers Ключевое слово New означает, что под объект выделяется память, а имя Stud ука-

зывает адрес выделенной памяти. Если ключевое слово New опустить, объект создан не будет, то есть память под

объект выделена не будет, а будет создана только ссылка соответствующего типа, кото-рую позднее можно связать с реальным объектом. Размер ссылки равен размеру адреса.

Для связывания ссылки с объектами используется оператор Set. Напишем процедуру, демонстрирующую использование ссылок.

Sub DemoRef() Dim Stud As New ClassPers ' Создание объекта класса Stud.Init "Петрова", #1/9/1984#, False Dim Ref As ClassPers ' Ref - ссылка на объект Set Ref = Stud ' Связывание ссылки с объектом Ref.Prn ' Использование ссылки Dim Stud_1 As New ClassPers ' Еще один объект класса ClassPers Set Stud_1 = Stud ' Присваивание объектов Stud_1.Prn ' Использование копии объекта End Sub Данная процедура дважды выведет окно (рис. 9.9), сначала через ссылку Ref, затем

через копию объекта Stud_1.

Page 132: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

132

Простое присваивание вида Ref = Stud или Stud_1 = Stud для ссылок на объекты и для объектов классов является ошибкой.

9.7.5. Иерархия классов Используя разработанные классы, можно создавать новые классы. Как уже говори-

лось, для построения новых классов с использованием уже существующих классов ис-пользуют встраивание и наследование. В VBA наследование не поддерживается, а встра-ивание фактически уже было использовано при построении класса ClassPers, членом кото-рого является объект Men типа Person. Приведем еще пример встраивания. Создадим но-вый класс Book (книга), членом которого будет объект Author (автор) класса ClassPers. Для этого создадим новый модуль класса командой Insert, Class Module. Вновь созданный класс назовем Book и введем в нижеследующий код.

' Класс Book ' Свойства класса Dim Author As ClassPers ' Автор книги Dim Title As String ' Название книги ' Методы класса ' Init: инициализация объекта класса Public Sub Init(Ttl As String, Atr As ClassPers) Set Author = Atr Title = Ttl End Sub Public Sub Prn() ' Печать данных об объекте Author.Prn ' Вывод сведений об авторе MsgBox ("Он написал " & Title) ' Вывод данных о книге End Sub В метод Init передаются в качестве аргументов строка Ttl с названием книги и объ-

ект Atr класса ClassPers , содержащий сведения об авторе. Обратим внимение, что внутри метода Prn класса Book вызывается метод с таким

же именем для встороенного объекта Author. В модуле ModDemoClass напишем следующую процедуру, использующую класс

Book.

Public Sub Demo_Hierarchy() ' Объект класса ClassPers Dim Tolstoy As New ClassPers ' Инициализация объекта - автора Tolstoy.Init "Толстой Л.Н.", #9/9/1828#, True ' Объект класса Book Dim WarAndWorld As New Book ' Война и мир ' Инициализация объекта - книги WarAndWorld.Init "Война и мир", Tolstoy WarAndWorld.Prn End Sub Эта процедура выводит окна, показанные на рис. 9.10.

Page 133: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

133

Рис. 9.10. Вывод процедуры Demo_Hierarchy

Свойства и методы класса ClassPers становятся свойствами и методами класса Book.

9.7.6. Скрытие данных По умолчанию все члены класса являются скрытыми. Это значит, что из какой-либо

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

Public Sub Demo_Private () Dim Tolstoy As New ClassPers Tolstoy.Male = True End Sub При ее выполнении появляется ошибка компиляции, показанная на рис. 9.11.

Рис. 9.11. Ошибка при обращении к закрытому члену класса

Чтобы сделать член класса открытым, он объявляется с ключевым словом Public. В наших класса ClassPers и Book открытыми членами класса являются методы Init и Prn. Ес-ли объявить в классе ClassPers свойство Male как открытое:

Public Male As Boolean то ошибки доступа, показанной на рис. 9.11 не будет.

Методы класса имеют свободный доступ к членам своего класса. Интересно, что несмотря на то, что все члены встроенного класса ClassPers являют-

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

Public Sub PrnAll() 'Печать данных об объекте MsgBox (Author.Men.Name & " написал " & Title) ' Вывод данных о книге End Sub При вызове данного метода возникнет ошибка доступа к закрытому члену класса,

подобная показанной на рис. 9.11.

9.8. Полиморфизм Термин полиморфизм происходит от греческого слова polymorphos – многообраз-

ный. Полиморфизм в биологии – это наличие в пределах одного вида резко отличных по

Page 134: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

134

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

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

Public Sub Demo_Polymorphism() Dim RefToClass As Object ' Ссылка на объект некоторого класса ' Два объекта класса ClassPers Dim Tolstoy As New ClassPers Dim Turgenev As New ClassPers ' Инициализация объектов Tolstoy.Init "Толстой Л.Н.", #9/9/1828#, True Turgenev.Init "Тургенев И.С.", #10/3/1818#, True ' Два объекта класса Book Dim WarAndWorld As New Book ' Война и мир Dim FathersAndChildren As New Book ' Отцы и дети WarAndWorld.Init "Война и мир", Tolstoy FathersAndChildren.Init "Отцы и дети", Turgenev ' Использование ссылки на объект общего вида Set RefToClass = Tolstoy RefToClass.Prn Set RefToClass = FathersAndChildren RefToClass.Prn End Sub В момент работы программы, когда ссылка RefToClass связана с объектом Tolstoy,

инструкция

RefToClass.Prn выводит окно, показанное на рис. 9.12, а после связывания этой ссылки с объектом Father-sAndChildren та же инструкция выводит два окна (рис. 9.13)

Рис. 9.12. Результат первого выполнения инструкции RefToClass.Prn

Page 135: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

135

Рис. 9.13. Результат второго выполнения инструкции RefToClass.Prn

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

9.8.1. Оператор With Для доступа к членам класса приходится использовать составные имена, включаю-

щие имя объекта. Часто это приводит к длинным конструкциям, которые неудобно вво-дить. Оператор With создает блок, в котором можно обращаться к членам класса непо-средственно по их именам. Данный оператор записывается в виде:

With ИмяОбъекта ’ Здесь .ЧленКласса это имя члена класса End With Между With и End With выражение .ЧленКласса можно использовать вместо полно-

го имени ИмяОбъекта.ЧленКласса.

9.9. Пример обработки данных на VBA Существует ряд средств для работы с базами данных, которые можно использовать

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

9.9.1. Подключение библиотек объектов Для работы с библиотеками следует установить в среде разработки VBA соответ-

ствующую ссылку. Для этого следует выполнить команду Tools, References… и на по-явившемся диалоге References, рис.9.14, установить флажки у нужных библиотек и нажать кнопку OK.

Page 136: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

136

Рис. 9.14. Установка ссылок на библиотеки

Все доступные в программе библиотечные классы показываются в окне Object Browser. Например, после установки ссылки на библиотеку Microsoft DAO 3.6. Object Library, становится доступным класс Database. На рис.9.15 этот класс выделен. В правой части окна Object Browser показываются свойства и методы выбранного класса.

Рис. 9.15. Просмотр доступных программе библиотечных классов

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

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

Page 137: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

137

Рис. 9.16. Стандартный отчет

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

9.9.3. Алгоритм решения задачи Предварительно создадим вспомогательную таблицу ПоставленныеДетали с двумя

полями. На рис. 9.17 эта таблица показана в режиме конструктора. Для поля Детали вы-бран максимально доступный размер 255 символов.

Рис. 9.17. Структура вспомогательной таблицы для учета поставленных деталей

Строки таблицы ПоставленныеДетали заполним с помощью программы, а затем обычным образом (см. главу 6) по этой таблице создадим отчет. Текст программы приве-ден в следующем разделе.

Page 138: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

138

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

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

Создадим новый модуль с названием Mod_DeliveredParts, в состав которого вклю-чим процедуру FillTable_DeliveredParts(), заносящую записи в таблицу ПоставленныеДе-тали.

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

Ниже приводится текст процедуры. Option Compare Database Public Sub FillTable_DeliveredParts() Dim db As Database ’ db - переменная типа Database (база данных) Set db = CurrentDb ’ Текущая база данных

’ Наборы данных, представляющие Dim rstSuppliers As DAO.Recordset ’ таблицу Поставщики, Dim rstParts As DAO.Recordset ’ таблицу Детали, Dim rstShipments As DAO.Recordset ’ таблицу Поставки и Dim rstDeliveredParts As DAO.Recordset ’ таблицу ПоставленныеДетали

’ Присваивание наборам данных значений конкретных таблиц Set rstDeliveredParts = db.OpenRecordset("ПоставленныеДетали") Set rstParts = db.OpenRecordset("Детали") Set rstSuppliers = db.OpenRecordset("Поставщики") Set rstShipments = db.OpenRecordset("Поставки") Dim strSupplier As String ’ Строка для названия поставщика Dim strParts As String ’ Строка для сохранения названий деталей Dim lCodeSup, lCodeSupShip, lCodePart, lCodePartShip As Long ’ Переменные для кодов ’ Удаление всех записей из таблицы ПоставленныеДетали With rstDeliveredParts ’ Для таблицы ПоставленныеДетали If Not .EOF Then ’ Если не достигнут конец таблицы, .MoveFirst ’ перейти на первую запись While Not .EOF ’ Пока не достигнут конец таблицы, .Delete ’ удалить текущую запись, .MoveFirst ’ и перейти на первую запись Wend End If End With With rstSuppliers ’ Для таблицы Поставщики .MoveFirst ’ Перейти на первую запись While Not .EOF ’ Перебор записей в таблице Поставщики lCodeSup = .Fields("КодПоставщика") ’ Взять код поставщика strSupplier = .Fields("Поставщик") ’ Запомнить название поставщика strParts = "" ’ Пустая строка для списка деталей With rstShipments ’ Для таблицы Поставки

Page 139: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

139

.MoveFirst ’ Перейти на первую запись While Not .EOF ’ Перебор записей в таблице Поставки lCodeSupShip = .Fields("КодПоставщика") ’ Код поставщика в табл. Поставки If lCodeSup = lCodeSupShip Then ’ Если поставщик что-то поставил lCodePartShip = .Fields("КодДетали") ’ Взять код детали With rstParts ’ Для таблицы Детали .MoveFirst ’ Перейти на первую запись Do While Not .EOF ’ Поиск нужной детали в таблице Детали lCodePart = .Fields("КодДетали") ’ Код детали в табл. Детали If lCodePart = lCodePartShip Then ’ Если данная деталь поставлялась, strParts = strParts + .Fields("Название") + ", " ’ добавить ее назв. Exit Do ’ Досрочный выход из цикла End If .MoveNext ’ Переход к следующей детали таблицы Детали Loop ’ Конец цикла для таблицы Детали End With End If .MoveNext ’ Переход к следующей записи таблицы Поставки Wend ’ Конец цикла по таблице Поставки If strParts <> "" Then ’ Если поставщик что-то поставлял With rstDeliveredParts ’ Для таблицы ПоставленныеДетали .AddNew ’ Добавляем новую запись .Fields("Поставщик") = strSupplier ’ Заполняем поле Поставщик ’ Убираем последнюю запятую из списка деталей strParts = Mid(strParts, 1, InStrRev(strParts, ",") - 1) .Fields("Детали") = strParts ’ Заполняем поле Детали .Update ’ Сохранение добавленной записи в таблице End With End If End With .MoveNext ’ Переход к следующей записи таблицы Поставщики Wend ’ Конец цикла по таблице Поставщики End With rstSuppliers.Close ’ Закрытие таблиц rstParts.Close rstShipments.Close rstDeliveredParts.Close End Sub

Для работы с базой данных в программе следует иметь объект типа Database, кото-рому должно быть присвоено значение некоторой базы данных. Метод CurrentDb возвра-щает объект типа Database, соответствующий базе данных, открытой в данный момент в окне Access. В программе переменной db присваивается значение, возвращаемое CurrentDb.

Доступ к таблицам базы данных в программах можно осуществить несколькими способами. В данной программе созданы четыре переменные типа DAO.RecordSet, кото-рые могут представлять наборы данных из таблиц или запросов. Объекты RecordSet опре-делены в нескольких библиотеках, в данном случае использована библиотека DAO.

Наборы данных создаются методом OpenRecordset объекта Database. В качестве ар-гумента этому методу передаются имена таблиц БД.

В программе использованы следующие методы объекта RecordSet: MoveFirst – переход на первую запись; MoveNext – переход к следующей записи;

Page 140: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

140

Delete – удаление текущей записи; Update – сохранение изменений в наборе данных. Использованы также следующие свойства объекта RecordSet: EOF – имеет значение True (истина), если текущая позиция в таблице находится

после последней записи; Fields – коллекция всех полей объекта RecordSet, доступ к отдельному полю

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

функции, работающие со строками: InStrRev(s1, s2) – возвращает номер символа строки s1, начиная с которого в s1 входит s2, причем поиск идет с конца строки s1, например, выражение InStrRev(strParts, ",") дает номер последней запятой в strParts;

Mid(s, start, length) – возвращает подстроку строки s длиной length символов, начи-ная с символа start. Содержимое таблицы ПоставленныеДетали, сформированное программой приве-

дено на рис. 9.18.

Рис. 9.18. Таблица, заполненная программой

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

Рис. 9.19. Отчет по таблице ПоставленныеДетали

Page 141: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

141

10. Элементы теории баз данных Любая база данных хранит информацию о некоторых предметах или явлениях, свя-

занных между собой различными способами. Объекты и связи между ними не зависят от применяемой СУБД, поэтому необходимо независимое средство для описания данных об объектах и о связях между объектами. Необходимость в удобных средствах моделирова-ния становится особенно острой, когда моделируемая область сложна и содержит много объектов, данные о которых должны храниться в базе. Наибольшее распространение из нескольких методов описания предметной области баз данных получил метод «сущность-связь» Чена, предложенный в 1979 г.1 Другое название этого метода – метод ER-диаграмм. Здесь E происходит от Entity – сущность, R – от Relationship – связь. Нотация данного ме-тода используется в автоматизированных системах проектирования информационных си-стем, называемых CASE-системами (Computer-Aided Software Engineering – компьютерная поддержка разработки программ).

10.1. Метод «сущность-связь»

10.1.1. Сущности и их атрибуты Сущность – это нечто, о чем хранится информация. Сущностью может быть мате-

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

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

Атрибут или набор атрибутов, который позволяет отличить данный экземпляр сущности от любого другого экземпляра, называется ключом сущности. При сохранении в базе данных экземпляра сущности нужно, чтобы СУБД обеспечила наличие у нового эк-земпляра уникального ключа. Это является примером ограничения (constraint), то есть правила, которому должны удовлетворять данные.

10.1.2. Домены Множество значений, которые может принимать атрибут сущности, называется до-

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

10.1.3. Связи между сущностями Пусть имеются две сущности A и B. Говорят, что между этими сущностями уста-

новлена связь «один-к-одному» (one-to-one relationship), если любому экземпляру Ai сущ-ности A соответствует единственный экземпляр сущности B или не соответствует ни од-

1 Chen P.P.S. The Entity-Relationship Model – Toward a Unified View of Data//ACM Transactions on Database Systems.–1979, vol.1, no. 1, pp.9-36.

Page 142: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

142

ного, а экземпляру Bj сущности B соответствует один экземпляр сущности A или ни одно-го.

Пусть сущность A это небольшие города, а сущность B – аэропорты. Тогда между A и B можно установить связь «один-к-одному», так как в небольших городах может быть только один аэропорт. Другим примером связи «один-к-одному» является брак между мужчиной и женщиной.

Связь «один-к-одному» встречается достаточно редко, так как часто при внима-тельном анализе оказывается, что там, где вначале представлялись две сущности, имею-щие связь вида «один-к-одному» в действительности имеется одна сущность, объединя-ющая атрибуты, ранее относимые к двум сущностям.

Самым распространенным видом связей является связь «один-ко-многим» (one-to-many relationship). Между сущностями A и B имеется связь «один-ко-многим», если одно-му экземпляру Ai сущности A соответствует нуль, один или более экземпляров сущности B, а экземпляру Bj сущности B соответствует нуль или один экземпляр сущности A. Например, у женщины может не быть детей, может быть один ребенок или несколько де-тей, то есть между сущностью Женщины и сущностью Дети имеется связь «один-ко-многим».

Связь «многие-ко-многим» (many-to-many relationship) между двумя сущностями A и B имеет место, если одному экземпляру Ai сущности A соответствует нуль, один или бо-лее экземпляров сущности B, а экземпляру Bj сущности B соответствует нуль, один или более экземпляров сущности A. Например, на факультете можно выделить сущность Пре-подаватель и сущность Предмет. Между этими сущностями имеется связь «многие-ко-многим», так как один преподаватель может читать несколько предметов, а один предмет может читаться несколькими преподавателями (в разных группах или потоках). Связь «многие-ко-многим» не поддерживается непосредственно реляционной моделью данных и сводится к связям «один-ко-многим» путем ввода промежуточной сущности. Для сущ-ностей Преподаватель и Предмет такой промежуточной сущностью может быть сущ-ность Расписание, где можно хранить информацию о преподавателях, читаемых ими предметах и потоках или группах, которые слушают предмет.

10.1.4. Слабые сущности и обязательные связи Рассмотрим две сущности: Женщины и Дети, между которыми имеется связь вида

«один-ко-многим». Какая-либо женщина может не иметь детей, но ребенок всегда имеет мать, то есть экземпляр сущности Дети обязательно связан с одним экземпляром сущно-сти Женщины. Сущность, которая обязательно должна быть связана с другой сущностью, называется слабой. В данном примере слабой сущностью является сущность Дети.

10.1.5. Документирование сущностей и связей Сущности обозначаются прямоугольниками, а связи – линиями. На концах линий

указывают характеристики связи, например, ER-диаграмму для БД ПоставщикиДетали можно изобразить в виде, показанном на рис.10.1.

Рис. 10.1. Диаграмма «сущность-связь» для БД ПоставщикиДетали

Значки, указываемые на концах линий связи, обозначают следующее:

Page 143: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

143

| – один, обязательная связь; | 0 – нуль или один, необязательная связь; < – один или много, обязательная связь; 0< – нуль, один или более, необязательная связь.

10.2. Реляционная модель данных Реляционная модель данных основана на теории множеств. Она предложена Эдга-

ром Коддом в 1970 г.2 Название модели происходит от слова relation – отношение.

10.2.1. Отношения Пусть есть n множеств D1, D2,…, Dn. Отношением R над этими множествами назы-

вается множество n – кортежей вида <d1, d2,…, dn>, где di Di, i = 1, 2,…, n. Множества Di называются доменами. Кортеж – это множество из n элементов, причем каждый из этих элементов берется из своего домена.

Значение, которое берется из домена, является значением атрибута отношения. Отношения создаются, чтобы хранить данные о каком либо предмете или явлении (о сущ-ности), поэтому понятие атрибута отношения совпадает с понятием атрибута сущно-сти, то есть атрибут – это некоторое свойство объекта, который моделируется сущностью или отношением.

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

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

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

ИмяОтношения(ПервичныйКлюч, Атрибут1, …) Например, отношение Детали: Детали(КодДетали, Название, Вес, Цвет, Эскиз) Отношения имеют наглядное представление в виде двумерных таблиц, например,

для отношения Поставщики эта таблица может иметь вид:

Поставщики КодПоставщика Поставщик Город Рейтинг 1 2 3 4 5 6

Прииск Макрос Виктория Астра Глория Италмаз

Н.Новгород Н.Новгород Кстово Москва Казань Казань

100 100 60 90 25 25

Таблица имеет заголовок, в котором размещаются названия атрибутов. Строками

таблицы являются кортежи. Приведенное отношение Поставщики имеет 6 кортежей. Строки таблицы образуют тело отношения.

2 Codd E.F. A Relational Model of Data for Large Shared Data Banks//Communications of the ACM.– 1970, Vol.13, No.6

Page 144: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

144

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

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

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

10.2.2. Виды отношений Реляционная база данных состоит из набора отношений. Отношение, непосредственно хранящееся в базе данных, называется базовым. Отношения, получаемые путем выполнения операций над базовыми отношениями,

называются представлениями.

10.2.3. Сущности и отношения При проектировании базы данных преследуются следующие цели: В базе данных должна храниться вся необходимая информация о предметной

области; В базе данных не должно быть избыточной информации. Метод «сущность-связь» позволяет достичь целей проектирования, выявляя объек-

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

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

новые отношения. Это 4 традиционные теоретико-множественные операции: объединение, пересечение, вычитание и декартово произведение и 4 специальные реляционные опера-ции: выборка, проекция, соединение и деление.

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

Объединением двух отношений A и B (A UNION B) называется отношение, состоя-щее из множества всех кортежей, принадлежащих A или B или обоим отношениям.

Пересечением двух отношений A и B (A INTERSECT B) называется отношение, со-стоящее из множества всех кортежей, принадлежащих одновременно A и B.

Вычитанием двух отношений A и B (A MINUS B) называется отношение, состоящее из множества всех кортежей, принадлежащих A и не принадлежащих B.

Декартовым произведением двух отношений A и B (A TIMES B) называется отноше-ние, состоящее из множества всех кортежей, полученных сцеплением каждого кортежа

Page 145: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

145

отношения A с каждым кортежем отношения B. Под сцеплением двух кортежей <A1, A2,…Am> и <B1, B2,…, Bn> понимается кортеж, полученный объединением всех ат-рибутов в один кортеж <A1, A2,…Am, B1, B2,…,Bn>.

Выборка позволяет отобрать из отношения только часть кортежей, удовлетворяю-щих некоторому условию. Пусть X и Y – атрибуты отношения A, а оператор сравнения (>, <, = и т.д.).

Выборкой

(A WHERE X Y)

называется отношение, содержащее кортежи отношения A, для которых условие X Y яв-ляется истинным. В СУБД выборка реализуется в виде фильтра или запроса, которые вы-деляют часть записей таблицы.

Проекцией отношения A по атрибутам X, Y,…, Z, где каждый из атрибутов принад-лежит отношению A, называется отношение с заголовком {X, Y,…, Z} и телом, содержа-щим кортежи, получаемые из кортежей A после вычеркивания из них атрибутов, не при-надлежащих {X, Y,…, Z}. Например, проектирование отношения Поставщики на атрибуты {Город, Рейтинг} даст отношение:

Поставщики[Город, Рейтинг]

Город Рейтинг Н.Новгород Кстово Москва Казань

100 60 90 25

При проекции удаляются столбцы таблицы и исключаются повторяющиеся строки. Пусть имеется отношение A(X, Y) и отношение B(Y, Z). Естественным соединением

отношений A и B (A JOIN B) называется отношение C(X, Y, Z) с кортежами <X, Y, Z> таки-ми, что <X, Y> входит в отношение A, а <Y, Z> входит в B. На рис.10.2 приведен конкрет-ный пример соединения двух отношений.

Рис. 10.2. Пример естественного соединения двух отношений

Понятие естественного соединения распространяется на случай, когда X, Y, Z явля-ются не одиночными атрибутами, а множествами атрибутов.

Пусть имеется отношение A(X, Y) и отношение B(Y). Делением отношений A и B (A DIVIDEBY B) называется отношение C(X), кортежи которого <X> входят в отношение A и которым соответствуют кортежи <Y>, входящие в отношение B. Ниже приведен при-мер.

Page 146: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

146

Рис. 10.3. Пример выполнения деления отношений

По аналогии с единичными атрибутами X, Y, Z понятие деления распространяется на случай, когда X, Y, Z являются множествами атрибутов.

Операции над отношениями реализованы в виде команд языка SQL. С помощью этих команд можно делать выборку данных, производить обновление данных, формулиро-вать правила безопасности для контроля доступа к данным, определять правила целост-ности.

10.4. Нормализация отношений

10.4.1. Цели проектирования базы данных База данных должна адекватно отображать предметную область, быть эффектив-

ной, содержать актуальную информацию. Более конкретно цели проектирования можно сформулировать в виде:

База данных должна хранить всю необходимую информацию, для чего следует учесть все атрибуты и распределить их по отношениям;

Исключение дублирования данных; Сведение числа хранимых отношений к минимуму. Заметим, что вторая и третья цели противоречат друг другу, так как для исключе-

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

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

Рис. 10.4. Нормальные формы

Page 147: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

147

10.4.2. Первая нормальная форма (1НФ) Атомарным называется неделимое значение из некоторого домена. Множество

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

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

В примере с библиографическими карточками есть еще один потенциально много-значный атрибут – автор, так как существуют книги, написанные в соавторстве несколь-кими писателями. Таким образом, отношение

Карточка(Автор, Название, МестоИздания, Издательство, Год,КолСтраниц, ИнвНомер) не находится в 1НФ.

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

Автор(КодАвтора, Фамилия, Имя, Отчество, ДатаРождения) Книга(КодКниги, Название, МестоИзд, Издательство, Год, КолСтраниц) Авторство(КодКниги, КодАвтора) Наличие(КодКниги, ИнвНомер)

Данные отношения находятся уже в 1НФ. Первая нормальная форма имеет ряд недостатков. Вернемся к задаче о поставщиках

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

Накладные(НазвПоставщика, Город, Рейтинг, НазвДетали, ЦветДет, ВесДет, ЭскизДет, Количество, ДатаПост).

Данное отношение находится в 1НФ, но имеются следующие недостатки:

Избыточность информации, так придется повторно вносить данные о каждом поставщике при каждой поставке им детали и данные о детали, поставленной еще раз;

Невозможно ввести в базу данные о поставщике, если он еще не осуществил какую-либо поставку и данные о детали, которая ни разу не поставлялась;

При изменении, например, адреса поставщика, придется просматривать все кортежи и вносить в них изменения;

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

10.4.3. Функциональные зависимости Понятие функциональной зависимости позволяет обеспечить более рациональное

проектирование структуры отношений базы данных. Пусть каждому значению атрибута X отношения R соответствует ровно одно, свя-

занное с ним значение атрибута Y, тогда говорят, что Y функционально зависит от X. Функциональная зависимость обозначается X->Y.

Page 148: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

148

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

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

Студенты(НомСтуд, ФИОСтуд), Предметы(КодПредм, НазвПредм), Оценки(КодПредм, НомСтуд, Балл, Группа, Спец).

В отношении Студенты имеется, например, функциональная зависимость: НомСтуд ->ФИОСтуд.

В отношении Оценки первичным ключом является комбинация {КодПредм, НомСтуд} и имеются функциональные зависимости, показанные на рис.10.5.

Рис. 10.5. Функциональные зависимости для отношения Оценки

10.4.4. Вторая нормальная форма Говорят, что отношение находится во второй нормальной форме (2НФ), если его

неключевые атрибуты полностью зависят от первичного ключа. Для отношения Оценки это не так, потому что атрибуты Группа и Спец зависят

только от одной части первичного ключа – атрибута НомСтуд. Разобьем отношение Оценки на два:

Успеваемость(КодПредм, НомСтуд, Балл) и ГрСпец(НомСтуд, Группа, Спец). Диаграмма функциональных зависимостей для этих отношений представлена на

рис.10.6.

Рис. 10.6. Диаграмма ФЗ для отношений Успеваемость и ГрСпец

Данные отношения находятся во 2НФ.

10.4.5. Третья нормальная форма Отношение находится в третьей нормальной форме, если оно находится во 2НФ,

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

Отношение ГрСпец не находится в 3НФ, так как в нем есть функциональная зави-симость между неключевыми атрибутами:

Группа->Спец.

Успеваемость ГрСпец

Page 149: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

149

Разобьем отношение ГрСпец на два:

СтудГр(НомСтуд, Группа) и СтудСпец(НомСтуд, Спец).

Эти два отношения находятся в 3НФ. Обычно бывает достаточно довести процесс проектирования отношений до третьей

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

студентов можно остановить, когда будет выяснено, что должны быть созданы следую-щие отношения:

Студенты(НомСтуд, ФИОСтуд), Предметы(КодПредм, НазвПредм), Успеваемость(КодПредм, НомСтуд, Балл), СтудГр(НомСтуд, Группа), СтудСпец(НомСтуд, Спец).

Page 150: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

150

11. Язык SQL Язык структурированных запросов Structured Query Language (аббревиатура SQL

произносится как «эс-кью-эл», иногда «си-квэл») является стандартным языком обработки данных, используемым большинством СУБД.

11.1. Краткая история SQL Этот язык был предложен исследовательской лабораторией фирмы IBM в начале

1970-х годов для реализации реляционной модели данных Э.Ф.Кодда (E.F.Codd). Существует ряд стандартов языка SQL, разработанных Американским националь-

ным институтом стандартов (ANSI – American National Standards Institute), на базе кото-рых приняты международные стандарты ISO (International Standards Organization).

В 1989г. принят стандарт SQL-89 (или SQL1). Его реализуют большинство коммер-ческих СУБД.

Следующий стандарт SQL-92 (или SQL2) был принят в 1992 г. В нем произведена существенная редакция первоначального стандарта. Язык SQL очень объемный, его пол-ное описание в стандарте занимает более 600 с. Не все возможности, предусмотренные в стандарте, пока реализуются имеющимися СУБД.

В 1999 г. появился новый стандарт SQL-99 (или SQL3), в который включен ряд концепций из объектно-ориентированного программирования.

Язык SQL был разработан задолго до появления графических интерфейсов пользо-вателя, поэтому он ориентирован на использование текста для написания команд. Рас-смотренная выше работа с базами данных в среде Access выполнялась исключительно средствами графического интерфейса. Но, как правило, это стандартные типовые дей-ствия, которые предусмотрели разработчики интерфейса. Использование SQL позволяет выполнять более гибкую обработку данных, например, путем встраивания команд SQL в текст программ на каком-либо языке программирования.

С помощью SQL можно определять структуры данных, а также запрашивать и об-новлять информацию в базе данных. Совокупность команд, служащих для определения данных, называют языком определения данных (Data Description Language, DDL), а сово-купность команд для обновления и запроса данных – языком манипулирования данных (Data Manipulation Language, DML).

11.2. SQL в Access Многие СУБД поддерживают интерактивный режим работы с интерфейсом в виде

командной строки, в которой можно вводить команды языка SQL и выполнять их по нажатию Enter. Такого режима в Access нет, но возможность вводить и выполнять коман-ды SQL имеется, например, в SQL-окне конструктора запросов. Команды SQL могут так-же быть частью программного кода на VBA.

Пусть открыта база данных ПоставщикиДетали. Перейдем в раздел Запросы окна базы данных и нажмем кнопку Создать на панели инструментов.

В диалоговом окне Новый запрос, рис. 4.1, выберем в списке строку Конструктор и нажмем кнопку OK, откроется окно конструктора запросов и окно Добавление таблицы. Не добавляя таблицы или запроса, нажмем в диалоговом окне Добавление таблицы кнопку Закрыть. На экране останется пустой бланк запросов.

Page 151: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

151

Рис. 11.1. Переход к созданию SQL запроса

В меню Запрос выберем команду Запрос SQL и подкоманду Управление, рис.11.1. На экране появится окно для ввода инструкций языка SQL.

Введем инструкцию SQL для управляющего запроса, рис.11.2, которая отберет названия всех поставщиков из таблицы Поставщики. После нажатия кнопки данный запрос будет выполнен, и мы увидим названия всех поставщиков из таблицы Поставщи-ки, рис.11.3.

Рис. 11.2. Ввод управляющего запроса

Рис. 11.3. Результат выполнения управля-

ющего запроса

Переключаться между просмотром результатов запроса и режимом SQL можно с помощью кнопки Вид на панели инструментов или с помощью команд меню Вид, рис.11.4.

Рис. 11.4. Меню Вид для запросов

Каждый управляющий запрос может содержать только одну управляющую ин-струкцию.

Page 152: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

152

Справочная система Access содержит описание используемой версии языка SQL. Для получения доступа к ней надо выполнить команду Справка, Справка: Microsoft Access. Далее в окне справки нужно перейти на вкладку Содержание и выбрать нужный раздел, рис. 11.5.

Рис. 11.5. Справка по языку SQL

Название Microsoft Jet имеет ядро базы данных, то есть та часть системы управле-ния базами данных, которая отвечает за загрузку и сохранение данных в пользовательских и системных базах данных. Ядро базы данных Microsoft Jet можно рассматривать как дис-петчер данных, на основе которого строятся другие системы доступа к данным, такие как Microsoft Access и Visual Basic. Таким образом, Access является надстройкой над ядром базы данных Microsoft Jet.

Как видно из рис. 11.5, в системе справки приводится полный перечень используе-мых ключевых слов SQL, дается сравнение версии Microsoft Jet SQL со стандартом ANSI, в котором отмечается ее соответствие, в основном, стандарту SQL-89.

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

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

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

Microsoft Access поддерживает следующие управляющие инструкции SQL: CREATE TABLE — создает таблицу; ALTER TABLE — добавляет новое поле или ограничение в существующую таблицу; DROP — удаляет таблицу из базы данных или удаляет индекс, определенный для

поля или группы полей; CREATE INDEX — создает индекс для поля или группы полей.

11.3.1. Создание таблиц Новая таблица создается инструкцией CREATE TABLE.

Page 153: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

153

Синтаксис инструкции:

CREATE [TEMPORARY] TABLE таблица (поле_1 тип [(размер)] [NOT NULL] [WITH COMPRESSION | WITH COMP] [индекс_1] [, поле_2 тип [(размер)] [NOT NULL] [индекс_2] [, ...]] [, CONSTRAINT составнойИндекс [, ...]]) Ключевые слова при описании синтаксиса записываются заглавными буквами, не-

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

Описание аргументов инструкции CREATE TABLE: приведено в Табл. 11.1.

Таблица 11.1. Аргументы инструкции CREATE TABLE

Элемент Описание таблица Имя создаваемой таблицы. поле_1, поле_2 Имена одного или нескольких полей, создаваемых в новой таблице.

Таблица должна содержать хотя бы одно поле. тип Тип данных поля в новой таблице. размер Размер поля в знаках (только для текстовых и двоичных полей). индекс_1, индекс_2

Предложение CONSTRAINT, предназначенное для создания простого индекса.

составнойИндекс Предложение CONSTRAINT, предназначенное для создания состав-ного индекса.

Инструкция CREATE TABLE используется для описания новой таблицы, ее полей и

индексов. Если для поля добавлено ограничение NOT NULL, то при добавлении новых за-писей это поле должно содержать непустое значение.

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

Допускается использование ограничения NOT NULL для одиночного поля, а также внутри именованного предложения CONSTRAINT, которое применяется к одиночному по-лю или к именованному предложению CONSTRAINT, предназначенному для создания со-ставного индекса. Однако ограничение NOT NULL можно наложить на поле только один раз. При попытке применить это ограничение несколько раз возникает ошибка выполне-ния.

Создаваемая временная (TEMPORARY) таблица будет доступна только в том сеансе, где эта таблица была создана. По завершении данного сеанса она автоматически удаляет-ся. Временные таблицы могут быть доступны для нескольких пользователей.

Использование атрибута WITH COMPRESSION допускается только для типов данных CHARACTER и MEMO (он же TEXT) и их синонимов.

Атрибут WITH COMPRESSION был добавлен к столбцам CHARACTER вследствие пе-рехода к формату представления знаков Юникод. Каждый знак в формате Юникод всегда кодируется с помощью двух байтов. Для существующих баз данных Microsoft Jet, содер-жащих в основном символьные данные, это может означать увеличение размера файла ба-зы данных примерно в два раза после преобразования в формат Microsoft Jet версии 4.0. Тем не менее, для многих наборов символов, ранее обозначавшихся как однобайтовые наборы символов (SBCS), представление в формате Unicode (SBCS) может быть без труда сжато до одного байта. Если столбец CHARACTER был определен с этим атрибутом, то при сохранении в нем данных осуществляется их автоматическое сжатие, а при извлечении данных – обратная операция.

Page 154: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

154

Столбцы MEMO также могут быть определены для хранения данных в сжатом фор-мате. Однако при этом действует одно ограничение. Сжатию подвергаются только те столбцы типа MEMO, которые в сжатом виде имеют размер не более 4096 байтов. Все остальные столбцы MEMO не сжимаются. Это означает, что для данной таблицы и данного столбца MEMO этой таблицы одни данные могут быть сжаты, а другие – нет.

В следующем управляющем запросе с помощью инструкции CREATE TABLE созда-ется таблица Друзья. Приведенная инструкция определяет имена и типы полей таблицы и создает для поля Код индекс, назначающий это поле ключевым.

CREATE TEMPORARY TABLE Друзья ([Код] integer, [Фамилия] text, [Имя] text, [ДеньРождения] date, [Телефон] text (10), [Примечания] memo, CONSTRAINT [Индекс1] PRIMARY KEY ([Код])); Для выполнения данной инструкции нужно создать отдельный управляющий за-

прос, как это описано выше в п.11.2. Созданная таблица в режиме конструктора показана на рис. 11.6. Свойству Индексированное поле поля Код установлено значение Да (Совпаде-ние не допускаются). Размер текстовых полей инструкцией SQL установлен максимально возможный – 256.

Рис. 11.6. Таблица Друзья в режиме конструктора

11.3.2. Создание индекса При помощи индексов ускоряется сортировка и поиск записей. Индексы таблиц

Microsoft Access используются так же, как предметные указатели в книгах: при поиске данных выполняется их поиск в индексе. Индексы можно создавать по одному или не-скольким полям. Составные индексы позволяют пользователю различать записи, в кото-рых первые поля могут иметь одинаковые значения.

В основном требуется индексировать поля, в которых часто осуществляется поиск. Однако индексы могут замедлить выполнение некоторых запросов на изменение, напри-

Page 155: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

155

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

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

Если предполагается частое выполнение одновременной сортировки или поиска в нескольких полях, можно создать для этих полей составной индекс. Например, если в од-ном и том же запросе часто задаются условия для полей Имя и Фамилия, то для этих двух полей имеет смысл создать составной индекс.

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

Следующая управляющая инструкция с помощью инструкции CREATE INDEX созда-ет составной индекс по полям Фамилия и Имя.

CREATE INDEX NewIndex ON Друзья ([Фамилия], [Имя]); Для просмотра созданных индексов откроем таблицу Друзья в режиме конструкто-

ра, рис. 11.6, и выполним команду Вид, Индексы или нажмем кнопку . Откроется окно с перечнем индексов и полей, по которым производится индексация, рис. 11.7.

Рис. 11.7. Окно индексов

Для создания индекса нужно ввести его имя в столбце Индекс, а в столбце Имя поля выбрать из списка поле таблицы, по которому будет производиться индексация.

Для удаления индекса нужно очистить содержимое строк, содержащих описание индекса.

11.4. Инструкция SELECT По этой инструкции ядро базы данных Microsoft Jet возвращает данные из базы

данных в виде набора записей. Синтаксис инструкции SELECT имеет вид: SELECT [предикат] { * | таблица.* | [таблица.]поле_1 [AS псевдоним_1] [, [таблица.]поле_2 [AS псевдоним_2] [, ...]]} FROM выражение [, ...] [IN внешняяБазаДанных] [WHERE... ][GROUP BY... ] [HAVING... ] [ORDER BY... ] [WITH OWNERACCESS OPTION]

Аргументы инструкции SELECT перечислены в табл. 11.2.

Page 156: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

156

Таблица 11.2. Аргументы инструкции SELECT

Элемент Описание предикат Один из следующих предикатов отбора: ALL, DISTINCT,

DISTINCTROW или TOP. Предикаты используются для огра-ничения числа возвращаемых записей. Если они отсутствуют, по умолчанию используется предикат ALL.

* Указывает, что выбраны все поля заданной таблицы или таб-лиц.

таблица Имя таблицы, из которой должны быть отобраны записи. поле_1, поле_2 Имена полей, из которых должны быть отобраны данные.

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

псевдоним_1, псевдоним_2 Имена, которые станут заголовками столбцов вместо исход-ных названий столбцов в таблице.

выражение Имена одной или нескольких таблиц, которые содержат от-бираемые данные.

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

При выполнении этой операции ядро базы данных находит указанную таблицу или

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

Инструкции SELECT не изменяют данные в базе данных. Обычно слово SELECT является первым словом инструкции SQL. Большая часть ин-

струкций SQL является инструкциями SELECT или SELECT...INTO. Ниже приведен минимальный синтаксис инструкции SELECT: SELECT поля FROM таблица; Для отбора всех полей таблицы можно использовать символ звездочки (*). Следу-

ющая инструкция отбирает все поля из таблицы Сотрудники: SELECT * FROM Сотрудники; Если несколько таблиц, включенных в предложение FROM, содержат одноименные

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

SELECT Сотрудники.Отдел, Начальники.Начальник FROM Сотрудники INNER JOIN Начальники WHERE Сотрудники.Отдел = Начальники.Отдел;

11.4.1. Примеры использования инструкции SELECT Рассмотрим несколько SQL-запросов к базе данных ПоставщикиДетали. Запрос SELECT Поставщик FROM Поставщики;

просто выведет наименования всех поставщиков из таблицы Поставщики. Изменим предыдущий запрос и напишем:

Page 157: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

157

SELECT Поставщик FROM Поставщики WHERE Город = "Москва"; Будут показаны поставщики из Москвы. Создадим запрос:

SELECT Поставщик, Название FROM Поставщики, Детали WHERE Город="Москва"; В результате в запрос будут включены все поставщики из Москвы, и с каждым из

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

Уточним запрос и покажем только детали, которые поставляют поставщики из Москвы:

SELECT Поставщик, Название, Количество FROM Поставщики, Детали, Поставки WHERE Город="Москва" And Поставщики.КодПоставщика=Поставки.КодПоставщика AND Детали.КодДетали=Поставки.КодДетали; В результате получим

Рис. 11.8. Результат запроса на выборку из двух таблиц

Операция внутреннего соединения INNER JOIN объединяет записи из двух таблиц, если связующие поля этих таблиц содержат одинаковые значения. Она имеет синтаксис:

FROM таблица_1 INNER JOIN таблица_2 ON таблица_1.поле_1 оператор таблица_2.поле_2 Аргументы операции INNER JOIN перечислены в табл. 11.3.

Таблица 11.3. Аргументы операции INNER JOIN

Элемент Описание таблица_1, таблица_2 Имена таблиц, записи которых подлежат объединению. поле_1, поле_2 Имена объединяемых полей. Если эти поля не являются число-

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

оператор Любой оператор сравнения: "=", "<", ">", "<=", ">=" или "<>".

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

SELECT Поставщик FROM Поставщики INNER JOIN Поставки On Поставщики.КодПоставщика = Поставки.КодПоставщика; Ограничиться только однократным упоминанием поставщика можно с помощью

предиката DISTINCT: SELECT DISTINCT Поставщик FROM Поставщики INNER JOIN Поставки

Page 158: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

158

On Поставщики.КодПоставщика = Поставки.КодПоставщика; Результат запроса показан на рис.11.9.

Рис. 11.9. Ограничение запроса предикатом DISTINCT

Сделаем внутреннее соединение таблицы Поставщики по полю КодПоставщика с таблицей, полученной в результате внутреннего соединения таблиц Поставки и Детали по полю КодДетали, и выберем поля Поставщик, Название и Количество:

SELECT Поставщик, Название, Количество FROM Поставщики INNER JOIN (Поставки INNER JOIN Детали On Поставки.КодДетали = Детали.КодДетали) ON Поставщики.КодПоставщика = Поставки.КодПоставщика; Результат этого запроса показан на рис. 11.10.

Рис. 11.10. Результат запроса с двумя внутренними соединениями

С помощью предложения WHERE можно задать некоторое ограничивающее усло-вие, например на дату поставки:

SELECT Поставщик, Название, Количество, Дата FROM Поставщики INNER JOIN (Поставки INNER JOIN Детали On Поставки.КодДетали = Детали.КодДетали) ON Поставщики.КодПоставщика = Поставки.КодПоставщика WHERE Дата <= #6/30/2002#; Дата здесь задается в американском формате: сначала месяц, затем день и год. Дан-

ный запрос показывает записи о поставках, которые произошли в первом полугодии 2002г., рис. 11.11.

Page 159: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

159

Рис. 11.11. Запрос с ограничением на дату

11.5. Использование SQL в VBA В §9.9 приведено решение задачи об обработке данных с помощью программы на

VBA, в которой использовались объекты типа DAO.Recordset связывались непосредствен-но с таблицами базы данных и использовались затем для выборки необходимых данных. Рассмотрим создание наборов данных, представляемых в программе объектами типа DAO.Recordset по результатам SQL запросов.

11.5.1. Классы для работы с запросами Запросы к базе данных из программы на VBA можно выполнять с помощью объек-

тов класса QueryDef. Запросы могут быть временными или постоянными. Для временных запросов не задается имя при их создании, а для постоянных запросов имя задается. По-стоянные запросы включаются в коллекцию запросов QueryDefs, содержащую все запросы базы данных, к ним можно обращаться по имени.

Далее приведена программа, включающая одну функцию и одну процедуру. В процедуре CreateQueryDefX()

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

GetrstTemp(qdfTemp As QueryDef), которая открывает запрос qdfTemp и печатает количество записей, отобранных в него.

Далее приводится текст программы. ' Пример программы, использующей класс QueryDef ' Функция GetrstTemp открывает набор записей по запросу qdfTemp и выводит отчет ' о количестве записей в наборе Function GetrstTemp(qdfTemp As QueryDef) Dim rstTemp As Recordset ' Переменная, представляющая набор записей With qdfTemp Debug.Print .Name ' Вывод в отладочное окно Immadiate имени запроса Debug.Print " " & .SQL ' Открытие набора записей из запроса. ' Константа dbOpenSnapshot устанавливает тип создаваемого набора записей: ' он не будет изменятся, если произойдут изменения в базе данных, пока не будет ' закрыт и снова не будет открыт Set rstTemp = .OpenRecordset(dbOpenSnapshot)

Page 160: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

160

With rstTemp ' Перемещение на последнюю запись набора и печать количества записей. .MoveLast Debug.Print " Number of records = " & _ .RecordCount Debug.Print .Close End With End With End Function Sub CreateQueryDefX() Dim dbsSuppliersParts As Database ' Переменная - база данных Dim qdfTemp As QueryDef ' Временный запрос Dim qdfNew As QueryDef ' Постоянный запрос ' Открытие базы данных Set dbsSuppliersParts = OpenDatabase("ПоставщикиДетали.mdb") With dbsSuppliersParts ' Создание временного безымянного запроса методом ' Set querydef = object.CreateQueryDef (name, sqltext) ' здесь object - переменная - представляющая базу данных ' name - строка с именем нового запроса. ‘ Если name - пустая строка, запрос будет временным ' sqltext - строка с текстом SQL запроса Set qdfTemp = .CreateQueryDef("", _ "SELECT * FROM Поставщики") ' Открытие набора записей и печать отчета. GetrstTemp qdfTemp ' Вызов функции GetrstTemp ' Создание постоянного запроса. Set qdfNew = .CreateQueryDef("NewQueryDef", _ "SELECT * FROM Детали") ' Открытие набора записей и печать отчета. GetrstTemp qdfNew ' Удаление нового запроса .QueryDefs.Delete qdfNew.Name .Close End With End Sub

Операторы вида

Debug.Print производят вывод в окно Immadiate. Содержание этого окна с результатами работы про-граммы показано на рис. 11.12. Видно, что временный запрос, которому в программе имя не было дано, полчает имя по умолчанию Temporary QueryDef.

Page 161: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

161

Рис. 11.12. Окно Immediate с результатами запросов в базе данных

11.5.2. Вывод содержимого запроса В следующей процедуре CreateAndShowQueryDefX реализуется SQL-запрос к базе

данных ПоставщикиДетали, включающий поставщиков и поставленные каждым постав-щиком детали (см. п. 11.4.1):

SELECT Поставщик, Название FROM Поставщики INNER JOIN (Поставки INNER JOIN Детали On Поставки.КодДетали = Детали.КодДетали) ON Поставщики.КодПоставщика = Поставки.КодПоставщика ORDER BY Поставщик;. В команду включено предложение ORDER BY Поставщик, обеспечивающее сорти-

ровку записей в запросе по полю Проставщик. Вывод результатов запроса производится в окно Immediate.

Sub CreateAndShowQueryDefX() Dim dbsSuppliersParts As Database ' Переменная - база данных Dim qdfSupPart As QueryDef ' Запрос поставщики и поставленные детали Dim rstSupPart As Recordset ' Переменная, представляющая набор записей ' Открытие базы данных Set dbsSuppliersParts = OpenDatabase("ПоставщикиДетали.mdb") ' Создание запроса и связывание с ним текста SQL-запроса Set qdfSupPart=dbsSuppliersParts.CreateQueryDef("ПоставщикиИ_ПоставленныеДетали", _ "SELECT Поставщик, Название, Количество " & _ " FROM Поставщики INNER JOIN" & _ "(Поставки INNER JOIN Детали On Поставки.КодДетали = Детали.КодДетали)" & _ " ON Поставщики.КодПоставщика = Поставки.КодПоставщика ORDER BY Поставщик") ' Создание набора записей по запросу Set rstSupPart = qdfSupPart.OpenRecordset(dbOpenSnapshot) With rstSupPart .MoveFirst 'Перейти на первую запись While Not .EOF 'Перебор записей в запросе ’ Вывод полей запроса Debug.Print (.Fields("Поставщик") + " " + .Fields("Название")) .MoveNext 'Переход к следующей дзаписи запроса Wend End With dbsSuppliersParts.QueryDefs.Delete (qdfSupPart.Name) ' Удаление запроса dbsSuppliersParts.Close ' Закрытие соединения с базой данных

Page 162: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

162

End Sub

На рис. 11.13 показано окно Immediate с результатами работы процедуры CreateAndShowQueryDefX.

Рис. 11.13. Запрос с сортировкой по полю Поставщик

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

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

Теперь будем заполнять таблицу ПоставленныеДетали используя запрос, в кото-рый включим поля Поставщики.Поставщик и Детали.Название, рассмотренный в проце-дуре CreateAndShowQueryDefX. Далее приводится текст процедуры FillTable_DeliveredPartsWithQuery, которая делает эту работу.

Public Sub FillTable_DeliveredPartsWithQuery() Dim dbsSuppliersParts As Database Set dbsSuppliersParts = CurrentDb 'Текущая база данных ’ Создание запроса на удаление записей из таблицы ПоставленныеДетали Dim qdfDelDeliveredParts As QueryDef Set qdfDelDeliveredParts = _

dbsSuppliersParts.CreateQueryDef("", _ "DELETE * FROM ПоставленныеДетали")

Page 163: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

163

qdfDelDelivParts.Execute ’ Выполнение запроса на удаление Dim qdfSupPart As QueryDef ' Запрос поставщики и поставленные детали 'Наборы данных, представляющие: Dim rstSupPart As Recordset ' Набор записей из запроса Dim rstDeliveredParts As DAO.Recordset ' таблицу ПоставленныеДетали Set qdfSupPart = dbsSuppliersParts.CreateQueryDef("ПоставщикиИ_ПоставленныеДетали", _ "SELECT Поставщик, Название, Количество " & _ " FROM Поставщики INNER JOIN" & _ "(Поставки INNER JOIN Детали On Поставки.КодДетали = Детали.КодДетали)"&_ " ON Поставщики.КодПоставщика = Поставки.КодПоставщика " &_ " ORDER BY Поставщик") 'Присваивание наборам данных Set rstDeliveredParts = dbsSuppliersParts.OpenRecordset("ПоставленныеДетали") Set rstSupPart = qdfSupPart.OpenRecordset(dbOpenSnapshot) Dim strSupplier As String ' Строка для названия поставщика Dim strParts As String ' Строка для сохранения названий деталей With rstSupPart While Not .EOF ' Перебор записей в запросе strSupplier = .Fields("Поставщик") ' Запомнить название поставщика strParts = .Fields("Название") + ", " ' Название детали и запятая .MoveNext ' Перейти к следующей записи запроса 'Перебор записей для определенного поставщика Do While Not .EOF If strSupplier = .Fields("Поставщик") Then strParts = strParts + .Fields("Название") + ", " ' Назван. детали и запятая .MoveNext Else Exit Do 'Досрочный выход из цикла End If Loop With rstDeliveredParts 'Для таблицы ПоставленныеДетали .AddNew 'Добавляем новую запись .Fields("Поставщик") = strSupplier 'Заполняем поле Поставщик 'Убираем последнюю запятую из строки strParts = Mid(strParts, 1, InStrRev(strParts, ",") - 1) .Fields("Детали") = strParts 'Заполняем поле Детали .Update ' Сохранение добавленной записи в таблице End With Wend End With rstDeliveredParts.Close dbsSuppliersParts.QueryDefs.Delete (qdfSupPart.Name) ' Удаление запроса dbsSuppliersParts.Close ' Закрытие соединения с базой данных End Sub

Page 164: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

164

Page 165: В.Л. Тарасовtarasov/MexMat/TarasovVL_LectureAccess...рассматривается конкретная работа с базами данных в среде Access. После

165

Литература

11.6. Основная 1. Дейт К. Введение в системы баз данных.– М.: Издательский дом «Вильямс», 2001.–

1072с. 2. Крёнке Д. Теория и практика построения баз данных.– СПб.: Питер, 2005.–859c.

3. Карпова Т.С. Базы данных: модели, разработка, реализация.– СПб.: Питер, 2002.– 304c.

4. Хомоненко А.Ф., Цыганков В.М., Мальцев М.Г. Базы данных: Учебник для высш. уч. завед./ Под ред. проф. А.Д.Хомоненко.– СПб.: КОРОНА принт, 2002.– 672

5. Харрингтон Д.Л. Проектирование реляционных баз данных. Просто и доступ-но.–М.: Лори, 2000.– 230c.

6. Глушаков С.В., Ломотько Д.В. Базы данных.–Харьков: Фолио; М.: «Издательство АСТ», 2002.– 504 с.

7. Пасько В. Access 2000 (русифицированная версия).– К.: Издательская группа BHV, 1999.–384c.

8. Хелворсон М., Янг М. Эффективная работа с Microsoft Office 2000. – СПб.: Питер, 2000.– 1232 c.

9. Золотова С.И. Практикум по Access.– М.: Финансы и статистика, 2000.–144с. 10. Штайн Г. Access 2000. М.: Лаборатория базовых знаний, 2000.– 480с.

11. Андерсен В. Базы данных Microsoft Access. Проблемы и решения.– М.: Эком, 2001.– 384с.

12. Карпов Б. Microsoft Access 2000. Справочник.– СПБ.: Питер, 2001.– 416с. 13. Швецов В.И., Визгунов А.Н., Мееров И.Б. Базы данных.- Н.Новгород: Изд-во

ННГУ, 2004.-267с. (http://www.unn.ru/rus/persons/shvetsov/)

11.7. Дополнительная 14. Тимошок Т.В. Microsoft Access 2002. Краткое руководство. М.: Диалектика, 2004.–

272 с. 15. Microsoft Access 2002. Шаг за шагом.– М.: Эком 2002.– 352с.

16. Бекаревич. Ю., Пушкина Н. Самоучитель Microsoft Access 2003.– СПб.: БХВ-Петербург, 2004.– 738 с.

17. Хобракен Д. Microsoft Access 2000. Шаг за шагом.– М.: АСТ; Астрель, 2004.– 350 с. 18. Кузин А.В., Демин В.М. Разработка баз данных в системе Microsoft Access.– М.:

Форум; Инфра-М 2005.– 224с. 19. Харитонова И.А., Михеева В.Д. Microsoft Access 2000.– СПб.: БХВ-Петербург,

2001.– 1088с.