/
Текст
zjr 4
А. Ю. Гончаров
ACCESS 2003
Рассмотрены примеры создания
реальных баз данных
%
ш
о
I
S
5
Ссмдофштед* с примерами
А. Ю. Гончаров
ACCESS 2003
(2алюуч.итель с примерами
КУДИЦ-ОБРАЗ
Москва • 2004
ББК 32.973-018.2
Гончаров А. Ю.
ACCESS 2003. Самоучитель с примерами - М.: СУДИЦ-ОБРАЗ, 2004. - 272 с.
Книга посвящена созданию баз данных в широко используемом приложении Microsoft Office
Access 2003. Приведены [еобходимые сведенш об этой системе управления базами данных и осо-
бенностях ее работы. Рассказывается о том, как создавать таблицы, запросы, формы, отчеты, стра-
ницы доступа к данным, программы на Visual Basic. Обсуждаются приемы обработки данных.
В качестве примеров рассмотрена последовательность создания [еско.тьки? баз данных, готовые
файлы которых можно загрузить из Интернета. Книга предназначена для начинающих разработ-
чиков баз данных, препод иателей, студентов, пользователей Access.
ISBN i-9579-0021-4
Алексей Юрьевич Гончаров
ACCESS 2003. Самоучитель с примерами
Учебно-справочное издание
Корректор С. Красильникова
Макет В. Клименко
"ИД КУДИЦ-ОБРАЗ"
119049. Москва, Ленинский проспект, д. 4, стр. 1 А.
Гел.; 333-82-11; E-mail: ok@kudits.ru; hltp:/7books kudits ru
Подписано в печать 06.04.2004.
Формат 70x90/16. Бум. газ. Печать офс.
Усл. пен- л. 19,9. Тираж 3000. Заказ 870
Отпечатано в ОАО кТЦербипска типография».
I 17623, г. Москва, ул. Типографская, д. 10
ISBN 5-9579-0021-4
© А.Ю, Гончаров, 2004
© Макет, обложка "ИД КУДИЦ-ОБРАЗ", 2004
Содержание
Предисловие.....................................................7
Глава 1. Введение в Microsoft Access 2003.......................9
1.1. Область применения Access.............................9
1.2. Профессии, связанные с Access... 11
1.3. Термины, применяемые в Access. 11
1.4. Структура базы данных............................. ... .15
1.5. Разработка баз данных и психология пользователей.....18
1.6. Начало работы с Access...............................20
1.7. Использование мыши...................................23
1.8. Справочная информация о программе....................24
Глава 2. Таблицы...............................................26
2.1. Конструктор таблиц и форматы данных..................26
Текстовый формат........................................30
Поле МЕМО...............................................34
Числовой формат.. 34
Счетчик.................................................36
Денежный формат.........................................38
Формат «Дата/время».....................................39
Логический формат.......................................41
Поле объекта OLE.. ... ... .....42
Поле гиперссылок........................................44
Мастер подстановок......................................45
Создание масок ввода..... ........ .......... .... .49
2.2. Режим таблицы........................................50
2.3. Мастер таблиц........................................55
2.4. Связывание таблиц....................................57
Схема данных............................................58
Формирование связи......................................60
Связь 'ОДИН-КО-МНОГИМ»..................................61
Связь :<один-к-одному»..................................61
Связь хмногие-ко-многим»................................62
4 Содержание
Глава 3. Пример простейшей базы данных.............................63
3.1. Постанови задачи.........................................63
3.2. Создание таблицы.............................................64
3.3. Ввод данных в таблицу..... ... ....................66
3.4. Быстрое создание формы....................................69
3.5. Работа с базой данных.....................................72
Команда Автонабор..........................................72
Сортировка.................................................72
Использование фильтров. ........... ... .... .73
Печать объекта базы данных.................................76
Глава 4. Компьютеризация данных (пример)...........................78
4.1 Организация ввода данных. Первая таблица..................78
4.2. Запрос с вычисляемым полем...............................80
4.3. Создание второй таблицы..................................82
4.4. Связывание таблиц........................................83
4.5. Быстрое создание формы...................................84
4.6. Мастер по анализу таблиц.................................86
4.7. Анализ данных.... ... ... ... ..93
Глава 5. Запросы...................................................95
5.1. Мастер запросов..........................................96
5.2. Конструктор запросов.....................................99
5.3. Построитель выражений. Создание вычисляемого поля.......101
5.4. Перекрестный запрос............................... .105
5.5. Выборка повторяющихся записей... ... ... .110
5.6. Другие способы группировки записей......................115
5.7. Редактирование данных с помощью запросов..................1 17
Запрос на добавление......................................117
Запрос на обновление......................................120
Запрос на удаление........................................122
Запрос на создание таблицы................................122
Глава 6. Формы.................................................124
6.1 Автоформы................................................124
6.2. Мастер форм.............................................127
6.3. Конструктор форм.......................................1301
6.4. Элементы управления.....................................133
Надпись...................................................133
Флажок.. ...135
Содержание
Поле. Пример вычисляемого поля ........................... 137
Списки.....................................................141
Рамки объектов.............................................145
Кнопки.....................................................146
Мастер кнопок..............................................147
Группа переключателей. ................................ .149
Подчиненная форма..........................................152
Вкладки....................................................154
6.5. Диспетчер кнопочных форм.. 154
Глава 7. Книжная база данных (пример)..............................157
7.1. Создание таблиц..........................................157
7.2. Связывание таблиц. Связи «один-ко-многим» и « многие-ко-многим» .. 160
7.3. Создание запросов.....................................,.. 161
7.4. Создание формы с помощью мастера.........................162
7.5. Совершенствование формы................................ 164
Изменение размеров полей...................................164
Добавление нового поля.....................................166
Создание поля со списком. Мастер подстановок...............170
7.6. Импорт данных.......................................... 177
7.7. Мастер импорта...........................................179
Глава 8. Отчеты....................................................182
8.1. Быстрое создание автоотчета..............................182
8.2. Печать отчета............................................183
8.3. Конструктор отчетов......................................185
8.4. Сортировка и группировка в отчете........................187
8.5. Мастер отчетов...........................................190
8.6. Анализ данных с помощью отчетов..........................194
8.7. Построение диаграмм......................................196
Глава 9. Подготовка данных для Интернета...........................202
9.1. Статические файлы в формате HTML.........................202
9,2 Динамические файлы в формате HTML (ASP)..................206
9.3. Создание страницы доступа к данным.......................212
9.4. Публикация данных в Интернете............................216
в
Содержание
Глава 10. Программирование......................................218
10.1. Редактор Visual Basic........... ... 218
10.2. Получение информации об объектах языка...............220
10.3. Модули, макросы и функции............................221
10.4. Пример программы и формы.............................224
10.5. Пример функции (вычисление «суммы прописью»).........227
10.6. Отладка программ.....................................235
10.7. Создание макросов....................................237
10.8. Список макрокоманд...................................239
Макрокоманды для работы сданными.........................239
Макрокоманды для управления объектами базы данных и Access. . .239
Макрокоманды дня управления окнами и элементами управления ...240
Макрокоманды дня импорта и экспорта данных...............241
Макрокоманды дня решения задач программирования.......:..241
10.9. События базы данных..................................242
События, связанные с клавиатурой и мышью.................242
События данных...........................................243
События фокуса...........................................243
События окна формы или отчета..... 244
События фильтра..........................................244
События ошибки и таймера.................................244
События печати...........................................244
Глава 11. Пример базы данных рассылки почты.....................245
11.1. Таблица,для сбора электронных адресов................245
11.2. Таблица и форма для написания писем..................247
Создание таблицы.........................................247
Создание запроса.........................................248
Создание формы...........................................248
Создание элементов управления............................249
Панель перехода по записям...............................251
Использование элемента группы как рамки вокруг кнопок....254
11.3. Создание подчиненной формы с адресами................254
11.4. Создание встроенной инструкции пользователя..........256
Текст инструкции пользователя.............................259
11.5. Создание дополнительных элементов управления..........260
1 1.6. Программа для отправки писем.....................262
11.7. Настройка Microsoft Outlook для отправки писем.......268
11.8. Рассылка почты .. ...270
Предисловие
MS Access - одна из самых популярных систем управления базами данных
(СУБД), а ее новая версия Microsoft Office Access 2003 не может не вызывать ин-
тереса у пользователей. Система Microsoft Office установлена на огромном ко-
личестве компьютеров (в том числе и в офисах), поэтому для пользователей
бывает очень полезно получить базу данных, интегрированную с другими «офис-
ными» продуктами. Но в отличие от Word или Excel, которые позволяют быстро
и просто создавать пользовательские документы. Access требует для создания
базы данных определенного набора знаний. В то же время круг разработчиков
баз данных очень широк: от профессионалов, создающих базы на заказ, до тех,
кому надо сделать Зазу, скажем, на работе, для решения конкретных задач.
Эта книга написана для начинающих разработчиков баз данных - т.ьх. кто
хочет научиться создавать собственные проекты и стать профессионалом. Поэто-
му, помимо описания самого Access, в книгу включены четыре примера разработ-
ки баз - от самой простой, которую можно сделать за один день, до сравнительно
сложной, на создание которой уходит не менее месяца. Файлы баз данных выло-
жены намоем сайте по адресу http://goncharov.freeservers.com/access2003:
organizacii.mdb пример «телефонной» БД из главы 3;
delo.mdb - пример коммерческой БД из главы 4:
test 1 .mdb - примеры форм и процедур из глав 6 и ] 0;
knigi.mdb - пример библиографической БД из главы 7;
pochta.mdb - пример БД рассылки из главы 11
Access - довольно «хитрая» система разработки, поэтому я постарался как
можно более понятно рассказать о тех навыках, которые требуются разработчику
в первую очередь. Важно освоить основные приемы, узнать, «где что лежит»,
и тогда дело двинется вперед, а опыт приходит с работой. Не надо пытаться за-
помнить все сразу: в конце концов, у программы есть встроенный справочник,
многие проблемы обсуждаются на форумах в Интернете. Зато у книги есть свои
преимущества: ее можно читать там, где нет компьютера (и юэто.М1 в книге боль-
шое количество иллюстраций), в ней есть расписанные по шагам приемы работы
8
Предисловие
и, конечно, готовые примеры. Я старался сделать книгу как можно более понят-
ной - без манипуляции сложными терминами и ожидания, что пользователь
будет иметь специальную подготовку. Книга была закончена только после выхода
русифицированной версии Microsoft Office System, потому что многие пользова-
тели не знают английский язык - этс тоже надо было учитывать. Я надеюсь, что
книга принесет вам реальную пользу и поможет решить ваши задачи.
Желаю удачи!
ЛлексеГ» Гончаров
Глава 1
Введение в Microsoft Access 2003
Сейчас даже неспециалисты в области разработки баз данных смело берутся за
создание собственных проектов. С одной стороны, программные продукты
совершенствуются и становятся все более удобными, для достижения цели требует-
ся все меньше программирования и больше работы с готовыми объектами.
С другой стороны, труд разработчиков ценится по-прежнему высоко, и не всегда
можно нанять для создания базы данных профессионала. Естественной эеакцией на
эти факты является расширение армии непрограммирующих профессионалов -
людей, имеющих насущные интересы в области информационных технологий
и достаточно смекалистых, чтобы обойтись без чужой помощи. «Помоги себе
сам» - вот девиз таких разработчиков баз данных. Поэтому в этой главе мы начнем
с самого начала.
1.1. Область применения Access
СУБД - системы управления базами данных довольно обширный класс про-
грамм. Появились они достаточно давно, еще в те далекие времена, когда
на экранах дисплеев можно было видеть только буквы и цифры, но никак не ри-
сунки. Но тогда специалисты по вычислительной технике уже поняли, что ком-
пьютер является превосходным средством хранения информации и, что самое
главное, средством обработки этой информации. Сейчас это очевидно, но рань-
ше почему-то компьютер считали большим автоматизированным калькулятором,
что, безусловно, сужало область его применения.
Как бы там ни было, когда возникла необходимость хранить большие объемы
данных, встал вопрос, как usteima следует это делать. Создавались самые разные
варианты, но потом все пришли к выводу, что наилучшим решением являются так
называемые реляционные базы данных. В них вся информация распределяется
по нескольким таблицам, а между таблицами устанавливается связь (от английско-
го relation - отношение, связь). Оказалось, что практически все задачи, требующие
использования баз данных, можно решить именно с применением реляционной
модели.
10
Глава 1
Access - типичная «настольная», система Этот термин взят по аналогии с типом
компьютеров - персональных, или настольных. Так говорят, чтобы подчеркнуть от-
личие этой системы от других, которые используются, например, на серверах.
Задачи и особенности использования серверной и персональной баз данных на-
столько различны, что можно считать, что есть две разные области применения
вычислительной техники, хотя в обоих случаях мы имеем дело с эксплуатацией баз
данных.
Помню, как лет десять назад я познакомился с Access 2.0 - мало известной то-
гда программой. Она была совсем не похожа на используемые тогда системы
Clipper, dBase, FoxPro. Вид этой системы, прямо скажем, не поражал. Какое-то
странное окно с вкладками в основном окне программы, много непонятных ин-
струментов. Единственное, что тогда привлекало, - программа была сделана для
Windows, а не для MS-DOS. С того времени появилось пять новых версий Access.
Clipper, dBase и многие другие СУБД давно забыты, от FoxPro сама Microsoft дав-
но хотела отказаться, но кое-как поддерживает эту систему из-за большого ко-
личества приверженцев этой программы. Зато Access, став в конечном итоге
Access 2003, превратился в достаточно развитую систему с массой интересных
возможностей. Существует даже такая сфера малого бизнеса: разработка баз дан-
ных Access на заказ.
Несмотря на то что существует много СУБД, Access является едва ли не самой
популярной программой такого рода. Почему? Несомненно, на его популярность
влияет популярность пакета программ, в который он входит, - Microsoft Office Sys-
tem 2003. Если во многих организациях пользуются именно этим пакетом про-
грамм, то резонно предположить, что и СУБД используют из этого пакета, даже
если она по таким-то параметрам уступает другим продуктам. Во-первых, пользо-
вателям легче освоить работу с такой программой, потому что многие инструменты
работают одинаково в разных приложениях (не говоря уже о том, что рисунки на
кнопках одинаковые). Во-еторых. легче осуществляется обмен данными между
приложениями - не надо гереходить от стандарта к станда]зту.
Кроме тою, надо учитывать, что по Access накоплено огромное количество
различных материалов: книг, программ, баз данных, сайтов в Интернете.
Получается, что преимущество Access заключается в первук очередь в мини-
мизации затрат и времени на разработку пользовательского приложения. А это во
многих случаях является решающим фактором выбора СУБД.
Введение в MicrosoftAccess 2003
Н
1.2. Профессии, связанные с Access
Да, в этом нет ничего удивительного. Уже появился ряд профессий, сутью ко-
торых является работа с СУБД Access. Убедиться в этом можно, полистав любую
газету', публикующую объявления о найме на работу.
Очень популярной является профессия «оператор базы данных». В крупных
коммерческих организациях приходится выделять специальных людей, чтобы
они заносили текущую информацию в базу. Очень часто в качестве базы данных
используется именно база данных Access. От оператора требуется, например,
умение работать с Access как с приложением, конфигурировать окна для того,
чтобы данные было вводить максимально удобно, проверять орфографию, нахо-
дить ошибки набора, выполнять поиск по базе данных и фильтрацию. Каждо-
дневный ввод больших объемов данных требует терпения, усидчивости
и внимательности. Оператор базы данных типичнс женская профессия.
Не менее популярна профессия «разработчик баз данных». Ей, кстати, и по-
священа данная книга. Эта профессия требует использования Access уже как
средства разработки и отладки базы данных. Здесь, например, необходимо про-
граммирование на языке Visual Basic, использование дизайнерских навыков для
конструирования форм и отчетов, абстрактного мышления для создания схемы
распределения данных по таблицам.
С Access связана и профессия администратора сети предприятия. Часто базу
данных размещают на сервере, чтобы обеспечить доступ к данным многих пользо-
вателей по сети. В этом случае приходите решать задачи обеспечения щновремен-
ного доступа к базе, определения прав пользователей, обеспечения безопасности
данных (предотвращения краж информации и резервного копирования),
Хотя формально не существует профессия «пользователь», для многих работ-
ников основная профессия тесно связана именно с пользовательской работой.
Иными словами, человек в течение рабочего дня может часто обращаться к базе
данных за информацией.
1.3. Термины, применяемые в Access
Прежде чем приступить к изучению самой программы, полезно познакомить-
ся с терминами, которые в ней используются. Базы данных - довольно специ-
фичная область, и многие понятия в ней нигде больше не используются.
Начнем, пожалуй, с английских терминов и аббревиатур, которые не перево-
дятся на русский язык.
12
Глава 1
DBMS - database management system, то же самое, что и СУБД.
HTML (HyperText Markup Language) - язьп разметки гипертекста. Основа для
создания веб-страниц. Состоит из ста с небольшим тегов, позволяющих от-
форматировать определенным образом текст графику, таблицы, ссылки и т. д.
MDB, MDE - расширения файлов баз данных Access. Первоначально создает-
ся база данных в формате 1DB. После компиляции (скрытия текста программ
и запрещения доступа к некоторым объектам), а также шифрования данных
разработчик получает аналог базы данных в формате
МЕМО - тип данных, позволяющий хранить большое количество текстовых
данных. Одно поле может содержать до 65 535 символов (около 25 страниц).
OLE (Object Linking and Embedding) - протокол для :вязывания и внедрения
объектов. Позволяет использовать в формах и отчетах данные различных
форматов - например, графику или документы, созданные в других программах.
SQL (Structured Query Language) - структурированный язык запросов. Стан-
дартный (для многих СУБД) язык, позволяющий формировать запросы на отбор
(сортировку, объединение ит. д.) определенных данных из таблиц.
ODBC (Open Database Connectivity) - протокол, позволяющий получать дос-
туп к данным других СУБД.
Visual Basic - объектно-ориентированный язык, который используется для
программирования во многих продукта: Microsoft. В Access для написания и от-
ладки программ существует встроенный редактор.
А вот перечень русских терминов.
База данных (Database) - в Access это файл, в котором хранятся все объекты,
необходимые для обеспечения работы пользователя: текстовые и графические
данные, программы, формы, отчеты, руководства и т. д,
Объекты базы данных - основные части БД (таблицы, запросы, формы, отче-
ты, страницы доступа к данным, макросы и модули). Термин «объект» использует-
ся и в языке Visual Basic, где он имеет близкое значение (правда, объектов в VB
намного больше).
Свойства (Properties) - набор параметров, характеризующих объект. Визуаль-
но этот набор представлен в виде окна, которое открывается одноименной коман-
дой. Это понятие используется также и в Visual Basic.
Контекстное меню (Shortcut menu) - меню, связанное с определенным объек-
том и содержащее команды только для этого объекта. Контекстное меню раскры-
вается щелчком правой кнопкой мыши.
Введение в ‘Aerosol Access 2003
13
Мастер (Wizard) - компонент программы, созданный для решения определен-
ной задачи. Особенностью мастера является набор диалоговых окон, которые
пользователь просматривает одно за другим, чтобы выбрать все необходимые
параметры.
Конструктор (Design) - режим разработки объекта базы данных. В противо-
положность ему для работы с объектом используется режим просмотра.
Таблица (Table) - объект, состоящий из полей (столбцов) и описей (строк).
Основной контейнер для хранения пользовательских данных.
Запрос (Query) - способ отбора данных (записей), хранящихся в таблицах,
или способ обработки данных, например сортировки. Для формулирования за-
просов используется язык SQL, а визуально запрос в Access представлен в виде
окна с таблицей.
Форма (Form) - окно или область в окне, где представлены поля с данными,
таблица или элементы управления.
Отчет (Report) - средство для компоновки данных с целью вывода их на
печать.
Страница доступа к данным (Data access page) - документ в формате HTML,
источником информации в котором служит база данных Access.
Макрос (Macro) - набор команд, который позволяет автоматизировать выполне-
ние операций или создавать новые операции. В большинстве программ Microsoft
Office макросы представляют собой программы на языке Visual Basic, но в Access
это не так: для создания макросов существует ограниченный набор специальных
команд, a Visual Basic используется для написания более сложных процедур
и функций. Существует и способ конвертации: макрокоманды можно запускать
средствами Visual Basic. В окне базы данных Access есть специальная вкладка, по-
зволяющая создавать и запускать макросы.
Модуль (Module) - контейнер для хранения программ Visual Basic. В окне базы
данных Access - одноименная вкладка, позволяющая работать с программами.
Рассмотрим основные термины для таблиц.
Связь или отношение (Relation) - установка соответствия между записями раз-
личных таблиц и запросов. Связь устанавливается по значению одного из полей
(как правило, ключевого). В Access существует несколько видов связей. «Один-к-
одному» - одной записи соответствует только одна запись в другой таблице, <Один-
ко-многйм» - одной записи могут соответствовать несколько записей в другой таб-
лице. «Многне-ко-многим» - комбинация двух связей «один-ко-многим».
14
Глава 1
Схема данных -- графическое представление связей между таблицами
и запросами. Для показа и редактирования схемы данных открываете' отдельное
окно (в английской версии программы Relationships).
Фильтр (Filter) - способ отбора ;аписей из таблицы или запроса. В Access
применяютсянескольковидовфильтров.
Сортировка (Sorting) - виртуальная перестановка записей таблицы или за-
проса с целью упорядочить их по значению одного поля (или нескольких полей).
В Access есть несколько путей для выполнения сортировки.
Поле (Field) - колонка таблицы и в то же время набор параметров, опреде-
ляющих тип данных в этой колонке. Поля используются как для хранения дан-
ных, так и для вычисления новых значений. По значениям полей производится
связывание таблиц, сортировка и фильтрация. В формах этот термин имеет со-
всем другое значение.
Индекс (Index) -- свойство поля, позволяющее ускорить поиск данных
и сортировку по значению этого поля. Индексация применяется практически во
всех СУБД, и от того, как она организована, зависит быстродействие СУБД.
Первичный ключ (Primary key) - поле, которое не содержит повторяющихся
значений и позволяет идентифицировать каждую запись в таблице. Классический
пример первичного слюча - поле «номер по порядку». Ключевые поля всегда ин-
дексированы.
Счетчик AutoNumber) - поле, в котором производится автоматическая нумера-
ция записей.
В формах часто используются следующие понятия.
Элемент 'Правлений (Control) - объект из числа хорошо знакомых всем, кто
имел дело с программами: кнопка, флажок, список, переключатель ит. д.
Вкладка (Page) - часть окна, позволяющая увеличить количество доступных
элементов. В каждый момент времени видна только одна вкладка, а доступ
к разным вкладкам осуществляется с помощью ярлычков с подписями.
Кнопка (Button) - самый популярный элемент управления, визуально ими-
тирующий обычную кнопку. Как правило кнопки позволяют запустить неко-
торую подпрограмму после щелчка на них мышью.
Флажок (Check box) - элемент управления в виде «галочки». Может нахо-
диться в двух состояниях: «установлен» или «сброшен». В формах используется
для определения логических (по принципу да-нет параметров.
Переключатель - элемент управления для выбора одного варианта из не-
скольких. Визуально переключатели представляются в виде набора кружков
(Option buttons) или кнопок (Toggle buttons).
Введение в Microsot Access 2003
15
Список (Combo эох) - элемент управления для выбора одного варианта из не-
скольких.
Подпись (Label) - поясняющий текст, расположенный рядом с элементом
управления.
Гиперссылка (Hyperlink) - часть текста или рисунок, которые реагируют на
щелчок мышью и позволяют перейти к другой части документа, другому доку-
менту или веб-странице. В англоязычной документации этот объект называют
по-разному anchor, link или reference.
Колонтитул - зона в верхней или нижней части страницы для размещения
определенной информации (например, номера страницы). Колонтитулы в Access
создаются в формах и отчетах. В английской версии программы верхний и ниж-
ний колонтитулы называются Page Header и Page Footer соответственно.
1.4. Структура базы данных
Структура базы данных Access показана на рис. 1.1. Основной единицей хра-
нения данных здесь является таблица. Ее колонки называются полями (field),
а строки, применительно к базам данных, называются записями (record). Пользо-
ватель может создавать поля и записи, определять их свойства, заполнять данны-
ми и при необходимости удалять. Вообще говоря, можно представить базу
данных, состоящую только из одной таблицы, хотя на практике таблиц бывает
несколько. При конструировании базы данных должно соблюдаться правило:
данные не должны повторяться. Это диктует необходимость размещения данных
в разных таблицах.
Чаще всего базы данных Access разрабатываются для коммерческих целей,
и необходимые примеры есть во всех учебных пособиях, включая сам Access,
который имеет в своем составе учебную базу данных «Борей» (northwind, mdt или
Борей.mdb). Сохраняя эту традицию, рассмотрим небольшой классический при-
мер: данные о заказах в коммерческой базе данных и таблица товаров. Заказ мож-
но охарактеризовать определенным набором атрибутов: кто заказал, когда, какие
товары и как произведена оплата. Каждый заказ является по-своему уникальным:
все данные не могут совпасть. Даже если один и тот же покупатель два раза при-
обрел один и тот же набор поваров, то сделал он это, очевидно, в разные дни.
И даже если ему пришла в голову мысль купить в одной организации в > шн день
два одинаковых набора товаров, то и в этом случае заказы будут отличаться но-
111 Глава 1
Таблицы
v
За проси I’* SQL
L ..
I ’ . Т
С ।радииы
Фирмы Oi’icibi доп у и я
К । «ИНЫМ
1 1 * 4
Модули
\1:1кро<1.1 .
VisualBasic
Рис. 1.1, Схема взанмачейсi инк объектов базы данных
мерам заказа, по которому в торгующей организации всегда ведется учет таких
документов. Поэтому в таблице для каждой характеристики заказа должно быть
предусмотрено отдельное поле, а каждый заказ займет одну строку, то есть
запись (рис. 1.2). В нашем примере такие записи находятся в таблице Заказы.
Но в каждый заказ входит один или несколько оваров. Очевидно, что в этом
случае информация о заказанных товарах должна находиться в отдельной табли-
це (в нашем случае Заказано), чтобы исключить дублирование данных.
Запись из таблицы Заказы связанс с несколькими записями таблицы Заказа-
ло по значению кодового поля, Мы видим, что информация о заказе занимает
одну строку таблицы, а данные о товарах могу занимать несколько строк - такая
связь называется «один-ко-многим» Информация о том, как связаны таблицы,
тоже хранится в файле базы данных и носит название схемы данных. Связывание
таблиц - довольно обширная тема, которая обсуждается в главе 2. Вид связи не
может быть выбран произвольно - его определяет конкретная ситуация.
Информацию из связанных таблиц можно объединить с помощью запросов
форм или отчетов. Пользователь базы данных может и не догадываться о том,
как именно хранятся данные, если он работает с формой. В сущности, органи-
зация структуры данных и направление информационных потоков и состав-
ляют предмет работы разработчика баз данных, и данная книга в основном
посвящена именно этому.
Введение в MicrosoftAccess 2003
;:отр |Д <и»к
рыП'.г Анна
п|1илч Анна
. Павел
иИ|1_нпв^ “
t <ф и. ЕЛ _Ъ||.Г .
глйьш, IJ и «
*лр- ва Дарь-
]Дз* > *<1М'1.| - j Сус и-г(Л11рнма^Дпстввкз * 1
I l-Wi 'Ь-СГМЧЧа Flo-u
1+ 1Е-£й iSAEi Ппчга
1<ч' 4 ft 1Т-£9-1ЗД6 Раггрян!
>-«>-• 21 С£ 1&ЯБ РйПрдаЕ
“О ?1 f? С1агт-й*1<
ЛЯ > 23-Gf. Ч9В Инта
< it1; ,*1Г? ^пгг>лч
lawn л iin ши шил
R..X J м . : . I
l'J2 I Ш tv
te> ajm & их
4fl'J ,0k f U*
в 13*
p ‘X
Lj.Lp □’Ъ
12O.U_p. 2S 31*
JlJjOOu Г5 55%
Jb.'Jji 4 0%
!£?»> JJ l> V
— JJHcurd
J2 У VEyit prtjd
.flUWihrluj-i
2SU uutlHWB
3ania.i IH i
Рис. 1.2. Схема простейшей коммерческой базы данных (фрагмент базы «Борей»)
Вернемся к рис. l.l Для отбора данных из таблиц в Access предусмотрено
такое средство, как запросы. Их тоже можно представлять себе в виде таблиц, но
таблицы эти виртуальные. В них используются или данные из обычных таблиц,
или создаются вычисляемые поля. Запросы позволяют фильтровать записи и вы-
полнять сортировку данных. В основе запроса лежит инструкция на языке SQL,
но визуально Access представляет запрос именно в виде таблицы, что достаточно
удобно. Запросам посвящена глава 5.
Самым употребительным средством отображения данных является форма.
Как правило, формы создаются чтобы облегчить пользователю ввод или поиск
данных. Здесь действует другое правило разработчика баз данных: работа
обычных пользователей должна быть максимально приближена к работе с суще-
ствующими популярными программами. Иными словами. обычные работники не
должны вникать в тонкости функционирования баз данных — это дело разра-
ботчика или программиста.
Формы также удобны и для создания распечаток. Часто внешний вид форм по-
вторяет вид документов, с которыми принято работать в данной организации.
Созданию форм посвящена глава 6.
18
Глава 1
Часто создать форму невозможно без создания вспомогательных программ,
В Access есть два пути для этого: создание макросов или написание процедур на
Visual Basic.
Отчет - более сложное средство отображения информации, нежели форма.
Обычно отчеты создаются как документы, предназначенные для вывода на
печать, и состоят из нескольких страниц. Это, разумеется, определяет некоторые
особенности конструирования отчетов. Об отчетах 1ассказывается в главе 8.
1.5. Разработка баз данных и психология
пользователей
Можно представить примерный сценарий разработки базы данных. Начинает-
ся все обычно с того, что заказчик (или начальство) приходит к мысли о необхо-
димости создания базы данных За фразой «Надо сделать базу данных» обычно
следует выяснение того, что конкретно требуется сделать. Заказчик, как правило,
не является специалистом по базам данных и свои требования формулирует
в обычных терминах. Кому-то надо создать хранилище документов, кому-то базу
данных для работы с клиентами, кому-то требуется автоматизировать рассылку
электронных писем и т. д. На этом этапе от разработчика требуется увязать требо-
вания будущих пользователей с возможностями СУБД. Каждая задача должна
найти свое воплощение в конкретных программных решениях. Это достаточно
неформальный, этап и он в разных случаях проходит по-разному: где-то состав-
ляется техническое задание, где-то все ограничивается устными обсуждениями.
Потом наступает этап разработки. Поскольку данная книга как раз этому
и посвящена, нет смысла говорить об этом вкратце.
Единственно, о чем хочется упомянуть заранее, - об учете психологии пользова-
телей как на этапе разработки, так и на этапе эксплуатации базы данных. Самый
интересный момент во взаимоотношениях разработчика и пользователей, на мой
взгляд, наступает, когда в руки пользователя попадает первый вариант базы данных
(обычно разработка включает несколько этапов с демонстрацией достигнутых ре-
зультатов). Разумеется, нет необходимости прятать базу от заказчиков - когда уже
что-то начинает работать, можно продемонстрировать «бета-версию». Возможно,
пользователи увидят, что некоторые вещи они понимали не так, как они выглядят
на самом деле и скорректируют задачу. В этом нет ничего плохого, ведь база дан-
ных создается для них и должна обеспечивать максимальное удобство е работе.
Введение в Microso ft Access2003
19
Есть, правда, «подводный камень», который подстерегает как разработчиков, так
и заказчиков. Увидев большие возможности СУБД, пользователь может загореться
желанием «сделать всего побольше». -Давайте, мол. и такие еще задачи будем
решать, и такие. И опять-таки все бы ничего, но, как правило расширение круга
задач «оплачивается» необходимостью ввода дополнительного количества данных.
Вот простой пример. Если мы ведем базу данных наших клиентов, то можем помес-
тить в базу две даты: когда принят зака и когда он выполнен. В принципе этого
достаточно для ведения учета. Но представьте себе, какие еще сведения можно
поместить в таблицу: например, когда выставлен счет; когда он оплачен, когда
отгружен товар и т. д. С помощью этих данных можно создавать очень подробные
отчеты и вести аналитическую обработку; но, с другой стороны, необходимое
количество вводимой информации увеличивается в несколько раз! Будут ли пользо-
ватели вводить эти данные? Базы данных чаще всего создаются для коммерческих
организаций, там очень напряженный ритм работы. Может получиться так, что
из-за большого объема вводимых данных проект получится мертворожденным:
какое-то время с базой будут шботагь. а потом забросят ее.
Поэтому от разработчика требуется квалифицированно объяснить все это за-
казчику. «Да, это можно сделать, но вы готовы вводить такой объем данных?
У сотрудников будет н; это время?»
При разработке объектов базы данных тоже следует учитывать психологию
пользователей. Люди привыкают к определенному стилю работы с «любимыми»
программами и автоматически пытаются действовать так же и во всех других при-
ложениях. Кто-то использует главное меню, кто-то предпочитает контекстные ме-
ню. а кто-то любит перетаскивание объектов мышью. Поэтому в базе данных
желательно создать пользовательский интерфейс, максимально приближенный
к уже существующему.
Практика показывает, что неспециалисты в компьютерном деле достаточно труд-
но осваивают новые программы. Так что инструментарий приложения (кнопки,
переключатели, флажки и т. д.) должен быть максимально понятным и одно-
значным. Например, если есть возможность, создавайте кнопки с надписями, а не
с пиктограммами. Где можно, вставляйте подписи и пояснения. Разработайте лако-
ничное и понятное руководство.
Например, одной из особенностей Access является то, что данные сохраняют-
ся в файле автоматически. Большинство пользователей, работающих в Word или
Excel, привыкли, что, пока не будет дана команда сохранения, изменения в доку-
мент внесены не б>дут. и при желании результаты работы можно не сохранять.
20
Глава 1
А в Access не так: то, что вводится, например, в форму, автоматически записыва-
ется и в файл. Пользователей о таких особенностях работы программы, конечно,
надо предупреждать.
1.6. Начало работы с Access
Окно программы показано на рис. 1.3 В начале работы Access предлагает
несколько способов открытия базы данных. И меню Файл, и панель Приступая
к работе содержат имена файлов баз данных, «известных» в данный момент сис-
теме. Эго могут быть файлы с которыми пользователь работал в последнее время,
или учебные базы данных, например орей.тйЬ.
МГСГОИМ Access
Фани Правка Зна Встадке
J С|«ддть,
QTirp-,iTb.
Пропупяя н роботе^
'"j Office Online
Nncwfr члй-
X
kfcjieib
l Acc«e2003^ulIiU. J,
О ПфЫТ«-
j ДСч'МЖ1 £ ‘
J iWr
ra^o
Рис. 1.3. Окно Access 2003 (oi крыге мен» Файл)
Кроме этого, пользователю предлагается создать новую базу данных. Символ
создания нового файла - белый листок - появляется сразу в нескольких местах:
в меню и на панелях. При создании базы данных Access дает им имя dbl Лучше
сразу придумать что-нибудь оригинальное чтобы файл можно было легко найти.
Введение в Мнсгс Access 2003
21
Создать базу данных можно несколькими способами. Можно начать разработ-
ку «с нуля», то есть с пустой базы данных, и заполнять ее данными и объектами,
Можно использовать мастер для формирования готовой структуры, а затем при-
спосабливать ее для своих целей. Можно также использовать готовый шаблон
БД. В дальнейшем мы познакомимся со всеми тремя способами.
В любом случае, перед тем как приступать к работе с файлом БД, разработчик
должен проделать некоторую предварительную работу.
1. Определить перечень задач, которые будут решаться с помощью базы данных.
2. Определить источники денных необходимые для базы данных, и оценить объем
этих данных.
3. Определить перечень полей (столбцов таблиц), которые необходимы для хране-
ния данных. Определить перечень таблиц, которые будут содержать эти поля.
Придумать именадля таблиц и полей.
4. Определить способ заполнения базы данными (сколько людей будут в этом
участвовать, потребуется ли объединять данные разных пользователей и т. д.).
Полезно также разработать примерный вид форм, в которые будут вводиться
эти данные.
5. Определить способ получения результата использования базы (это может
быть, например, распечатка или вывод на экран).
Потом можно приступать и к созданию БД. Обычно разработка включает не-
сколько этапов.
1. Создание таблиц. В частности, определение ключевых полей, выбор типов
полей, выбор форматов данных.
2. Установка связей между таблицами.
3. Создание запросов на основе таблиц.
4. Заполнение базы данных определенным количеством информации, позво-
ляющим протестировать базу.
5. Разработка форм и отчетов.
6. Создание программ для обработки данных. Отладка этих программ.
7. Решение вопросов безопасности данных и подготовка базы для передачи
пользователям.
После создания нового файла базы данных Access представляет его в виде
окна, показанного на рис. 1.4.
22
Глава 1
О bniji: база данных (форматAccess 2002 - 2003)
It— ------------- • —
.Открыть • - д<1>1структ!5р _3 Сеида т
Объекты
р Загросы
1 СсрМЫ
I Отчеты
У Страницы
Макросы
4* Модули
Группы
».] избранное
Создание таблицы в рс мл те Кш-ггруктг^з
Cpsa-flHne таблиц с помощью мастера
Созд-знне ТаЬпиь. путем г зод дан-ых
Рис. 1.4 Окно базы дани (открыт файл knigi mdb)
То, что файл пользователя представлен в виде небольшого документа, - не-
сколько необычно, потому что в других программах такой способ не использует-
ся. Но в Access это стандарт, и к этому надо привыкнуть. В окне показываются не
только объекты базы данных (таблицы, запросы, формы и т. д.), но и инструмен-
ты, необходимые для их создания. В то же время инструменты доступны и через
систему главного меню, и на панелях инструментов, и могут запускаться при по-
мощи контекстных меню,
В некоторых случаях набор инструментов является избыточным. Например,
для создания новой таблицы достаточно щелкнуть кнопку Открыть, кнопку
Конструктор или значок Создание таблицы в режиме конструктора. Все три
действия приводят к открытию окна конструктора таблиц, в котором можно опре-
делить поля будущей таблицы.
Кнопки Таблицы, Запросы, Формы. Отчеты, Страницы, Макросы, Модули
позволяют выбирать вкладки с соответствующими объектами базы данных. Этим
определяется стиль разработки базы данных: сначала создаем таблицы, потом запро-
сы, потом переходим к конструированию форм и т. д.
Объекты внутри окна можно выстроить так же, как и файлы в обычной папке:
кому-то больше нравятся крупные значки, кому-то мелкие, а кому-то таблица.
Введение в MicrosoftAccess 2003
23
1.7. Использование мыши
Для многих операций при разработке баз данных необходима мышь. Напри-
мер. дня изменения ширины столбцов и высоты строк. В этом случае указатель
мыши надо поместить на серую юн; заголовков столбцов и строк. Когда указа-
тель превращается в жирный черный крестик со стрелками, границу между ячей-
ками можно передвигать.
Похожим образом выполняется и выделение строк и столбцов. Только в этом
случае указатель должен принять вид одиночной черной стрелки. Для выбора
группы записей необходимс удерживая нажатой левую кнопку мыши, провести
указателем по заголовкам требуемых записей.
Для выделения группы смежных столбцов необходимо, удерживая нажатой
левую кнопку мыши, провести указателем мыши по заголовкам нужных столб-
цов. Если столбец уже выделен, то повторное нажатие левой кнопки мыши позво-
лит переместить столбец по горизонтали.
Если же требуется выделить прямоугольный блок ячеек, то указатель мыши
надо установить на угловую ячейку будущего прямоугольного фрагмента так,
чтобы он превратился в толстый белый срестнк. и, не отпуская левой кнопки,
перетащить его на противоположную (по диагонали) угловую ячейку. Если вам
нужно изменить форму уже выделенного прямоугольного фрагмента, вы можете,
удерживая нажатой клавишу Shift, щелкнуть в другой ячейке, которая должна
стать угловой в выделяемом фрагменте. Эго удобно делать, если все ячейки вид-
ны на экране. Если же выделенный фрагмент должен быть таким, что его невоз-
можно увидеть целиком, то в этом случае надо выделить одну из его угловых
ячеек, а затем прокрутить лист к противоположной (по диагонали) угловой ячей-
ке и, нажав Shift, щелкнуть в ней.
Выделенную часть таблицы можно скопировать в буфер обмена, а потом
вставить в другой таблице. Но это относится не только к данным. Выделять
ячейки и копировать их буфер можно не только для данных в табличной юрме,
но и в других случаях, когда используется таблица (например, в режиме кон-
структора таблицы).
Мышь необходима и в режиме конструирования форм. Выбрать необходи-
мый элемент управления можно только если точно навести на него указатель
мыши. Рамка, окружающая выделенный элемент, содержит много маркеров,
которые позволяют модифицировать элемент управления. При наведении ука-
зателя на определенный маркер внешний вид указателя меняется: он может
24
Глава 1
представлять собой раскрытую ладонь, вытянутый указательный палец или
стрелки. Все это требует практики, так как в каждом случае выполняется своя
операция.
В общем, хорошо работающая мышь - важный инструмент в арсенале разра-
ботчика баз данных.
1.8. Справочная информация о программе
В любом встроенном справочнике есть три пути получения необходимой
информации: оглавление, предметный указатель (индекс) и поиск по словам.
В Access удобен еще четвертый способ: когда курсор находится на определен-
ном поле окна диалога, можно нажать клавишу F1, тогда запустится статья
справочника связанная с данной темой.
К сожалению, разработчики программ идут по пути усложнения встроенных
справочников, что затрудняет поиск нужной информации. В последней версии
Access справочник оформлен в виде панели, которая появляется в левой стороне
окна программы после выбора команды из меню Справка. Трудность заключает-
ся в том, что команды доступа к справочнику могут быть не видны, Например,
если компьютер имеет постоянное подключение к Интернету, то автоматически
включается доступ к справочному сетевому ресурсу Microsoft. Это может быть
полезно в определенных случаях, но иногда просто мешает. В таких случаях надо
внимательно просмотреть ссылки и команды справочной панели и найти те,
которые относятся именно к встроенному справочнику.
Другой особенностью встроенной справки является то, что справочники по
программированию находятся отдельно. На них есть только одиночные ссылки
из основного справочника. Например, по Visual Basic есть несколько справочни-
ков: непосредственно по языку, по Visual Basic для Microsoft Office и по Visual
Basic для Access. Все они необходимы так как содержат разные сведения. Спра-
вочники по системам программирования часто не переведены на русский язык
в русской версии программы, так что если вы недостаточно хорошо читаете анг-
лийские технические тексты, установите заранее какую-нибудь программу-пере-
водчик.
Со справочниками по программированию удобнее работать в окне редактора
Visual Basic (команда Сервис Макрос Редактор Visual Basic), а не в основ-
ном окне программы.
В Интернете, конечно, есть много источников справочных данных о программе.
Введение в Microsoft Access 2003
25
Общие сведения о пакете Microsot Office System можно получить по адресу:
lm/> officemicrosofI сот/
Более подробная информация об Access находится в базе знаний Microsoft:
http msdrt. microwft cam. office;understanding, access/
Многие вопросы, касающиеся разработки и использования баз (энных обсуж-
дайте: на форумах. Последние интересны еще и тем, что можно задать свой во-
прос и получить ответы от разных людей. На мой взгляд, есть два интересных
форума по Access:
http://www.sql.ru/forum/
http 'hiprag сот,forum;
Вот еще несколько ссылок на сайты, содержащие статьи по интересующей нас
теме: 3
http: msacce.' da. га/
http M'ww.arimsoft.rumsaccess/inde^ htm
hup -wwwsoobcha. rufaq/inde.html?topic = 124
Таблицы
Таблицы являются основой любой базы данных - главным хранилищем ин-
формации. От ого как организовано хранение данных в таблицах, во многом за-
вис hi успех всего проекта. В процессе работы разработчику приходится не раз
возвращаться к конструированию таблиц и менять их структуру. Существует
очень большое количество параметров, так или иначе связанных с таблицами или
данными (например, форматы данных) о которых необходимо знать но время
проектирования и разработки базы данных.
В свою очередь, Access предоставляет много возможностей дня работы с таб-
лицами. Есть несколько режимов их создания, а во время просмотра данных мож-
но пользоваться разнообразным инструментарием программы дня выполнения
полезных операций,
2.1. Конструктор таблиц и форматы данных
Когда в Access создается новая база данных, пользователь начинает работу
с окном, показанным на рис. 1.4. Программа автоматически дает новой базе данных
безликое имя db 1 Я рекомендую сразу выбирать для щйла базы данных информа-
тивно! имя. В новой базе данных целесообразно сразу создать хотя бы одну табли-
цу, и разработчику предлагается несколько вариантов создания. Самый простой
способ - создание таблицы «путем ввода данных» (в окне есть такая команда). Таб-
лица, которая открывается в этом шучае. показана на рис. 2.1 Когда в поле вводят-
ся данные, программа автоматически определяет их тип (текстовые, числовые
и т. д.) и настраивает таблицу. Правда, потом обычно используют режим конструк-
тора чтобы изменить параметры полей. Для нас этот режим интересен еще и тем,
что с его помощью можно понять, как организованы данные в таблице.
Допустим, мы сразу выбрали команду Создание таблицы в режиме кон-
структора. В этом случае мы получим возможность определить все поля (столбцы)
нашей будущей таблицы и задать их свойства. В первую очередь разработчик дол-
жен определить следующие параметры:
Таблицы
27
1 Тв6тнцл1 : таблица L. C'LEj
__Пщ)ц| | ПллаД | ПолеЗ | Псл£4 | Поле5 ] **
g
| и а Н ►+ па 21
Рис. 2.1.3аги|ивкатаб.1ицы
1. Имя поля. По имени будет осуществляться доступ к данным. Имя можно
набирать русскими буквами. Пробелы тоже можно использовать, но, основыва-
ясь на своем опыте, я не рекомендовал бы этого делать.
2. Тип данных. Принципиально важно, что будет находиться: текст числа, кален-
дарные даты или что-то другое.
3. Длина поля. От этого зависит удобство работы с данными.
4. Является ли поле ключевым. По ключевым полям таблицы можно связывать
друг с другом.
Менее важными, но тоже часто используемыми являются такие параметры:
1. Формат поля, Форматы подробно обсуждаются ниже.
2. Подпись поля. Подпись может заменить имя поля в формах и таблицах, с которы-
ми будет работать пользователь. Эго особенно удобно, если имя поля недоста-
точно информативно.
3. Значение по умолчанию. Чаше всего такой параметр необходим для числовых
или логических полей, когда обязательно наличие данных.
4. Условие на значение. Разумеется, условие должно иметь смысл 1рименитель-
но к поставленной перед разработчиком задаче. Формирование этого пара-
метра - часть алгоритма функционирования базы данных. Таким образом,
можно решить некоторые проблемы, не прибегая к программированию.
5. Обязательное поле. Если эта опция выбрана, при заполнении новой записи
пользователь обязательно должен ввести какие-нибудь данные. В противном
случае программа будет выводить «ругательные» сообщения, пока пользова-
тель не введет данные.
Глава 2
6. Индексированное поле. Эта опция позволяетускорить поиск данных в этом поле.
Кроме того, можно определить, будут ли разрешены в этом поле повторяющиеся
значения.
Многие строки бланка параметров имеют скрытые списки. Значки
этих списков появляются, только когда выбрана данная строка,
В этом случае значение надо выбрать из списка. Пример: параметр
Формат поля.
Окно конструктора таблиц показано на рис. 2.2. В нем для примера дана струк-
тура таблицы из базы данных knigi.mdb о которой рассказывается в главе 7.
'j i4fc:re»«4t Л-<«4*
LEperc Лдач
ТйблицаМнигм : таблица
поля
Жанр
'трена
_ Ае-ор
__ ИаманнвКнггн
__Издательстве
__ ГодВьшпда
KNHOTBLLH5
г
Счатчлс
Текстовый
Т ^чТС-И>Н1
Текстовый
Тгйтгояи-
текстовый
Т е тпе*^
Пинии
То г МЕМС
ГЪд.-Т №АВК *
•VWCHWhj tj
лкг+шт гогн
41SZKJ ррадл
П
> ГК- 4CUFLIU44
• г* *гЬ*ЧЛ»**
еСщегкг ifi cliche
* «итецемее по ге Нет
ГЬгТпгет'см» да
Индексирован»! « поле 14ет
-•trw ЮннкОд Д-d
Pew™ 1Г-1Е
Режим Нет
WS- ПСтя riVMBT luCIfltiTh in НЙЫЮ V-ditTcr
га» Дм ri— -Поиие»-анг»>тнйна*нгге
F6 — переклнзманивокин-F — стрел»'»
Рис. 2.2. Окно конструктора базы данных
Как видим, структура таблицы тоже представлена в виде таблицы - бланка.
С бланком можно работать традиционным способом: менять ширину столбцов
при помощи мыши, удалять и добавлять строки с помощью команд главного ме-
ню, Строки этой таблицы можно выделять и копировать в буфер обмена в том
случае, если надо перенести их в структуру другой таблицы.
Таблицы
29
Эго, кстати, удобный способ создания в одной эазе данных нескольких таблиц
со сходной структурой. В этом случае можно открыть существующую таблицу
в режиме конструктора, выделить все строки с именами полей и скопировать их
в буфер обмена. Затем окно конструктора можно закрыть, выбрать команду Созда-
ние таблиць в режиме конструктора и в открывшемся окне в пустой бланк вста-
вить строки из буфера обмена. В этом случае все характеристики полей будут
скопированы.
В окне базы данных в разделе Таблицы рядом располагаются как
ярлыки команд для созвана. таблицы, так и ярлыки самих таблиц.
Графа Описание не является обязательной для заполнения, но она полезна,
так как позволяет создать подсказку для пользователя. Эта подсказка (текст) по-
является в нижней строке окна, когда пользователь устанавливает курсор на соот-
ветствующее поле.
Одно из полей таблицы должно быть определено как ключевое. Чтобы создать
его, установите курсор на строку бланка и нажмите кнопку Ключевое поле на па-
нели инструментов или выберите команду Ключевое поле из контекстного меню,
связанного с данной строкой. Есть и похожее понятие: первичны! ключ. Он может
включать несколько полей. Создавать такой составной ключ имеет смысл в том
случае, когда только комбинация значений нескольких полей может однозначно'
идентифицировать запись в таблице. Для того чтобы создать такой составной ключ,
надо выделить несколько строк в бланке, а затем использовать шетрумен' Ключе-
вое поле. О том, что поле является ключевым, свидетельствует изображение
ключика в области выделения строки, содержащей данные о поле. В таблице не мо-
жет быть более одного ключа, поэтому если символом ключика помечены дне или
более строки, то, значит, эта таблица имеет составной ключ.
Параметров у поля достаточно много, но и справку по этим параметрам
получить довольно-таки легко. Необходимо установить курсор на заданную стро-
ку и нажат! клавишу FI Будет открыт раздел справочника, посвященный именно
этому параметру.
К моменту работы с конструктором у вас уже должен быть хотя бы «эскиз-
ный проект» (а еще лучше - техническое задание) будущей базы данных, отку-
да было бы ясно, какие поля должны присутствовать в таблице. В первую
очередь надо определить форматы полей. Разберемся, какие бывают форматы.
Разумеется, при конструировании базы данных нет необходимости задавать все
30
Diai 2
свойства полей. Я бы даже сказал, что их не надо определять до тех пор, пока
в этом не возникнет настоятельная необходимость Но чтобы полностью
использовать потенциал Access, вы должны при работе с программой держать
«в уме» возможность применения того или иного свойства.
Текстовый формат
Длина текстового поля может достигать 255 символов. От разработчика требу-
ется правильно угадать размер поля. Сколько символов нужно, например, для
хранения адреса электронной почты? А для фамилии, имени и отчества? Сразу
и не скажешь. Если поле будет выбрано слишком коротким, то заполняющий
базу данных оператор может столкнуться с тем, что длины поля не хватит. Если
поле будет слишком длинным, то при большом количестве записей размеры базы
данных будут неоправданно расти. Длину поля можно уменьшить и тогда, когда
база данных уже создана но это связано с риском потери данных.
На рис. 2.3 показана вкладка параметров текстового поля. Здесь и далее на ри-
сунках будут показаны параметры поля, принятые по умолчанию.
Подавно!: 1
50
Общие Подавг
₽ДО09Г1О№1
Формат поля
Маска свода
Подпись
Дначвиив по
е на
Сообщение об "-мбке
;*Цзательнс поле
Пустые строки
индексированное попе
Сжатие Юникод
Реммн IME
Режим I
Смарт-теш
Нет
Да
Нет
Да
Нет контроля
Не’
Рис. 2.3. Вкладка параметров текстового поля
Формат поля (формат отображения) используется для вывода данных
в формах и запросах. Существует набор специальных символов формата, которые
задают вид и размер выводимых строк. Кодовые символы формата текстовых по-
лей представлены ниже.
Д — обязательный текстовый символ или пробел;
& - необязательный текстовый символ;
< — преобразование символов в нижний регистр;
> - преобразование символов в верхний регистр.
Таблицы
31
Формат поля может состоять из двух частей, разделенных знаком «точка с за-
пятой». Первая часть является собственно форматом ввода, а вторая определяет
значение поля, если данные в него не были введены.
Маска ввода позволяет задать вид строки при наборе данных.
О - обязательная цифра (0...9);
9 - цифра или пробел;
ft - цифра, пробел, плюс или минус;
L - обязательная буква (если используется русский ыфавит, то A...Z и V Я);
? - необязательная буква;
А - обязательная буква или цифра;
а - обязательная буква или цифра;
& - обязательное наличие символа или пробела;
С - любой необязательный символ;
Точка, запятая, двоеточие, точка с запятой, дефис, слэш - возможные раздели-
тели данных (они сохраняют свой вид в строке);
! - строка должна заполняться справа налево:
\ -символ, введенный после обратного слэша, интерпретируется как сим-
вольная константа. Это позволяет использовать в маске вышеприведенные сим-
волы. Например, если какие-то данные должны быть разделены символом #, то
в маске надо указать \#.
Кроме обратного слэша можно использовать кавычки для добавления в маску
произвольного фиксированного текста.
Пароль - позволяет создать поле для ввода пароля, при этом набранные симво-
лы не отображаются.
Знаки маски ввода О, A, L, & требуют обязательного ввода данных в поле.
Поскольку некоторые виды данных (даты, время, телефонные номера) содержат
стандартные разделители, то для упрощения ввода предусмотрено, что неко-
торые общепринятые символы-разделители воспринимаются в маске ввода «бук-
вально», то есть записываются в поле наряду с введенными данными. Кроме
этого, для определения символьных констант, состоящих из нескольких симво-
лов, допускается использовать двойные кавычки. В отличие от символов форма-
та, символы маски ввода являются общими для всех типов полей, в которых
разрешено применение маски.
В качестве примера напишем маску для ввода семизначного номера телефона:
.000-00-00
32
Глава2
Масками надо пользоваться с осторожностью. Еще один пример — маска вво-
да для заполнения анкеты. В справочнике Access приводится пример для имени
человека:
Это действительно так, но только в том случае, когда поле содержит только
имя и ничего больше. А как быть в случае поля «Фамилия Имя Отчество»?
Может быть, подойдет такая маска?
Увы, нет. Например, при попытке ввести в это поле данные «Гарин Афанасий
Иммануилович» мы получим в результате: «Гарпнафанасийлм Мануилович».
Получается, что ари необходимости использования маски это поле придется раз-
бить на три. Кроме того, указанная в справочнике Access маска подойдет только
для имени или отчества, а для фамилии - нет. Бывают, к примеру, двойные фами-
лии (Гарин-Задунайский), и получается, что обязательным элементом формата
фамилии является только заглавная первая буква, но такой вариант маски не пре-
дусмотрен. Скорее всего, создать подходящую маску для фамилии не удастся.
Если в иоле, для которо с создана маска, вводятся данные не по
формату, то программа выводит на экран предупреждающее сооб-
щение, в котором приводится текст маски. Это сообщение может
оказаться !епонятным для пользователя.
Подпись. Это второе имя поля, которое можно использовать в таблицах
и формах. Подпись может состоять из нескольких слов и быть более понятной,
нежели обычное имя ноля.
У меня, правда, был один случай. В базе данных были заданы подписи для по-
лей. и часть полей были обязательными для заполнения. Пока данные в них присут-
ствовали, все было нормально, но как-то раз во время заполнения таблицы при
переходе на новую запись одно поле оказалось пустым. Access вывел на экран сооб-
щение, но поле назвал по имени, а не по подписи. Понять, что это за поле, можно
было, только открыв режим конструктора, но именно это Access делать не позво-
лял, постоянно выводя окна с сообщением об ошибке. Пришлось потратить доста-
точно много времени, чтобы разобраться, в чем дело, и ликвидировать ошибку.
Такой вот казус.
Таблицы
33
Значение по умолчанию. В некоторых случаях (чаше всего это числовые поля)
требуется, чтобы в поле изначально присутствовало какое-то значение. Например,
если эта величина используется в вычислениях: для расчетов или создания вычис-
ляемых полей. Тогда этот параметр оказывается очень кстати.
Условие на шачсние и Сообщение об ошибке, С помощью инструмента
Построителя выражений можно сформировать ограничения на значения поля.
Это должно быть выражение логического типа. Например для ввода числа i раду-
сов (величины угла) можно предусмотреть такое ограничение:
>1 And <360
Если пользователь введет число, не удовлетворяющее этим условиям про-
грамма выведет на экран сообщение об ошибке. Для этого сообщения надо задать
строку в параметре Сообщение об ошибке. В нашем примере это может быть та-
кая фраза: «Введите число от 1 до 360».
Обязательное поле. Если выбрана опция «Да, пользователь обязательно
должен ввести данные в это поле.
Пустые строки. Для текстовых полей это строки, не содержащие ни одного
символа. Они обозначаются двойными кавычками: Если эта опция не выбра-
на. Access использует для отсутствующих данных стандартную константу ('lull.
Индексированное поле. Этот параметр может иметь одно из трех значений:
1. Поле не индексировано.
2. Поле индексировано, допускаются повторяющиеся значения.
3. Поле индексировано, не допускаются повторения значений поля.
Чаще всего это свойство используют для запрета повторяющихся значений.
Например, если создается база данных для почтовой рассылки, то необходимо за-
претить повтор значений в поле «Электронный адрес», иначе один адресат может
получить несколько одинаковых писем.
Сжатие Юникод. Тестовые данные записываются в Access 2003 по системе
Unicode, то есть для каждого символа отводится два байта. При использовании
некоторых алфавитов первый байт всегда равен 0. и представляется возможность
«сжать» информацию. В целом это позволяет уменьшить объем базы данных.
Обратите внимание, что по умолчанию этот режим выбран.
Режим 1МЕ и Режим предложений IME. Аббревиатура расшифровывается
так: Input Method Editor - редактор способа ввода. Это надстройка для обеспече-
ния ввода данных на восточноазиатских языках. К русскому языку это не имеет
никакого отношения.
2-870
34
Глава 2
Смарг-iеги. Это дополнительные инструменты, которые встраиваются в поле
и позволяют открыть какое-либо приложение Office (например, календарь встреч
из Outlook).
Поле МЕМО
Это тоже текстовое поле, с той разницей, что поле МЕМО может содержать до
65 535 символов. Набор свойств поля МЕМО такой же, как у обычного текстово-
го. Такие поля могут выполнять разные функции. Во-первых, они обеспечивают
совместимость с базами данных других СУБД, поддерживающих формат МЕМО
(например, dBASE или FoxPro). Это может оказаться важным при выполнении
операций импорта или экспорта баз данных. Во-вторых, поле МЕМО может слу-
жить хранилищем текста. Но увидеть такой текст можно будет только в форме
или отчете, если для поля МЕМО будет создан элемент управления «поле».
Лучше всего создавать его при помощи мастера. Область для вывода текста мо-
жет иметь азмеры, позволяющие увидеть сразу несколько строк, а если весь
текст не уместится в границах элемента управления, то будет создана полоса
вертикальной прокрутки.
Числовой формат
Вкладка числового формата показана на рис. 2.4. Числовые поля обладают
в основном теми же свойствами, что и текстовые, с некоторыми отличиями.
Их мы сейчас и рассмотрим.
Ойчго Подстановка
Резне-поля
Формат пспй
Число десяти -ныл знаков Дето
Маска ввода
Подось
Значени . по >нолч - .to О
JfcflOEne на значение
Сообщение ошибке
Обязательное попе Нет
индексирован!- -поле Нет
Смарт-теги
Рис. 2.4. Вкладка iapUMe tpoi числового поля
Размер поля. Он может принимать значения из следующего списка:
Байт - целые числа в пределах от 0 до 255.
Таблицы
35
Целое - целые числа )т - 32 768 до 32 767.
Длинное целое целые числа от 2 147 483 648 до 2 147 48' 647.
Одинарное с плавающей точкой (4 байта) - чнсл в пределах >т-3.402823E3I до
012981 4 для отрицательныхзначений и положительные числа от 1.4-0129817-45
до 3.402823Е38.
Двойное с плавающей точкой (8 5айт) - отрицательные числа в пределах от
- 1.797693 13486231Е308 до - 4.94065645841247Е-32* и положительные числа
в пределах от 4.94065645841247Е - 324 до 1.797693 13486231ЕЗО8.
Действительное (12 байт) - формат, обеспечивающий наибольшую точность
представления данных. Можно использовать до 28 знаков после запятой Диапа-
зонзначений т 10Е28 1доЮЕ28-1.
Код репликации - GUID, Globalh unique identifier (уникальный глобальный
идентификатор) длиной 16 байт.
Формат поля. Может определяться следующими кодовыми символами:
. - точка используется как десятичный разделитель;
, - запятая применяется как разделитель групп разрядов;
О - вывод цифры или нуля, если разряд незначащий;
# - вывод цифры;
$ - вывод знака доллара;
к - вывод числа в процентном формате;
Е или е - вывод числа в экспоненциальной форме (например, 0.370Е 06).
При создании числового формата могут быть заданы четыре группы кодов:
первая для вывода положительных чисел, вторая - для отрицательных значений,
третья - для представления нулевого значения и четвертая - для пустых полей.
Группы разделяются знаком «точка с запятой».
В формате можно задавать и цвет выводимых символов. Допустим, надо пред-
ставить значения температуры так. чтобы величины больше нуля были красного
цвета, а меньше нуля - синего. В этом случае формат может быть таким:
#Г Красный] -#[Синий];О[Зеленый],’Неизвестно"
Замечу, что, хотя нам в данном случае не важно, как будет представлено нуле-
вое значение, мы все равно должны создать для него группу формата (в любом
виде). Иначе ноль не будет выводиться на экран.
А так, например, может выглядеть формат для денежных значений:
t 4JfO. ОО'р. , - tf fftftJ. 00' p. [Красный]; \ «[Зеленый], Нет данных"
г
Глава 2
36
Основой для числового формата может служить следующая конструкция:
a fijfo оо
В этом формате указано не только расположение обязательных и факультатив-
ных разрядов, но и отмечено, что в числе должно проводиться разделение групп
разрядов пробелами. Так, например, число 123456.789 в этом формате выглядело
бы следующим образом:
Вид десятичного разделителя выбирается в Windows Например,
в Windows ХР надо раскрыть Панель управления, выбрать компо-
NB цент Языкирегпоналъные стандарты. а в н&м - вкладку Региональ-
ные параметры По умолчанию в русской версии Window в качестве
ралде. жителя используется запятая.
Последнюю, четвертую группу формата можно использовать как |)разу-напо-
минание (Введи число!), которая покажет, что в некоторой ячейке отсутствуют
данные, которые на самом деле должны там быть. Кроме того, используя чет-
вертую группу формата, можно из числового поля сделать «как бы текстовое»,
то есть, позволить программе заполнять ячейку неким текстом при отсутствии
числовых данных. Соответствующий пример был показан выше, в формате для
значений температуры.
Счетчик
Как правило, в 'аблиш требуется поле, значения которого 5ыли бы уникальны
для каждой записи. Например, жителя страны может идентифицировать номер
паспорта, а книгу номер ISDN. Полю, которое может выполнять такие функции,
можно придать свойство ключевого На практике далеко не каждая таблица обла-
дает таким полем, потому что ключевое поле должно обладать определенными
свойствами, например, в нем не должно быть двух одинаковых значений. Если
такого поля изначально нет, то функции ключевого поля может выполнять поле
счетчика.
Это разновидность числового поля. При создании новых записей в это поле
автоматически записываются числа. Вкладка параметров счетчика показана на
рис. 2.5.
Таблицы
37
Общие Подстановка
PasMap поля
Цоеьр значения
«К к поля
Подпись
Ындек.снроЕанное поле
Очрт-тегм
4 линнсе целое
Последовательнее
Нет
Рис. 2.5. Вкладка параметров счетчика
Еще одна полезная функция счетчика - автоматическая нумерация записей
таблицы. Access предлагает два варианта изменения счетчика: последовательный
и случайный. Первый вариант удобен тем, что позволяет нумеровать записи по
порядку. Назначение второго варианта не так очевидно; Его можно использовать,
если надо создать систему кодирования записей в таблице, защищенную от неос-
торожных действий оператора. Если нумеровать записи последовательно 1 2, 3
и т. д.), то опечатка при вводе может легко превратить один код в другой и об-
наружить такую ошибку будет трудно. Иначе обстоит дело, если коды выбирают-
ся случайным образом (например, 1193517479, 442230790, 1742918387 и т. д.).
Поскольку случайные значения счетчика представляют собой многоразрядные
числа, то вероятность того, что один код будет введен вместо другого, меньше,
чем в первом случае. Кроме того, имея список всех кодов, легко проверить сколь
угодно большую таблицу на наличие опечаток. Остается добавить, что использо-
вать этот прием можно, если заменить в дальнейшем тип «счетчик» на другой,
потому что изменять данные в поле счетчика оператор не может.
Обратите внимание на параметры счетчика, заданные по умолчанию. Это поле
не является индексированным. То есть возможности сортировки и поиска в этом
поле по умолчанию не оптимизированы. Это понятно: если создать много индек-
сов, то результат будет обратным: работа с базой данных не ускорится, а замед-
лится. Поэтому разработчик должен сам решить, какие поля должны быть
проиндексированы. При разработке таблиц счетчик очень часто создается имен-
но как ключевое поле. Тогда он автоматически становится индексированным,
а повторы значений в поле счетчика не допускаются в любом случае. Я рекомен-
дую начинать создание структуры каждой таблицы с поля счетчика, хотя делать
его ключевым не обязательно.
38
Глава?
Денежный формат
По умолчанию денежный формат для русской версии программы представля-
ет собой числа, записанные с двумя щак-ами после запятой, с разделением групп
разрядов и обозначением «р.» в конце. Обозначения денежных единиц опреде-
ляются настройками Windows.
Вкладка со свойствами поля, имеющего денежный формат, показана на
рис. 2.6. Слово «Денежный» определяет формат по умолчанию, то есть для на-
циональной валюты. Длядругих задач предусмотреныдополнительные форматы,
Есть в новой версии Access и формат для евро. Это удобно, тем более что ввести
с клавиатуры знак «евро» не всегда удается. Еще один полезный шаблон денеж-
ного формата - процентный. Остальные свойства денежных полей не отличаются
от обычных числовых.
Общие Подстановка .
Формат гсГЯ
Число десятичны*. таков Авто
Маска и* да
Подпись
• н а ч по умолчанию ,0
>‘Словле назначение
об 'ашибке
С'бязйтельм поле Нет
Инде^смроваин • поле Нет
1_мбрт-~еги
Рис. 2.6. Вкладка параметров денежною» поля
Пользователь может записать в строке Формат поля шаблон для своего
формата. Допустим, необходимо вводить суммы в долларах. Тогда надо устано-
вить курсор на слово «Денежный» в указанной строке и заменить его, например,
таким шаблоном формата:
Этот формат предполагает, что сумма записана как целое число, с разделением
групп из трех разрядов пробелами (чтобы легче было отличать единицы от тысяч,
а тысячи от миллионов) и знаком доллара в конце числа, как принято в России, но
не в США. Но когда пользователь вводит данные в поле, знак доллара исчезает,
но появляются два числовых разряда. Это позволяет проверить введенное значе-
ние с точностью до цента.
Таблицы
39
Формат «Дата/время»
Дата и время представлены в компьютере одним числом, которое показывает
число компьютерных «тиков» с определенного момента времени. С помощью
встроенного календаря программа может представлять эти данные в разных ви-
дах: или как время, или как дату, или то и другое вместе. Разумеется, это зависит
от того, как пользователь настроит формат поля.
Вкладка свойств этого поля показана на рис. 2.7,
Формат псля
Мас кг ввода
ГЮД1 I-
-. по умолчании^
’ исе| - на. едение
<ообшвнцр об ошибке
попе
попе
Нет мэнтропя
предложений ЛЧЕ Hei
Гмзр»-теги
Рис. 2.7. Вкладка параметров поля формата «Дата/время»
На вид данных в этом поле сильно влияет формат. Программа предлагает не-
сколько стандартных шаблонов (параметр Формат ноля).
Название формата Пример
Полный формат даты 12.09.2004 18:35:58
Средний формат даты 12 сентября 2004 г
Краткий форма даты 12.09.2004
Длинный формат времени 18.35:58
Средний форм; времени 6:35
Краткий формат времени 18:35
В исходном состоянии, когда поле только что создано, параметры отображения
данных на экране не заданы. Возникает закономерный вопрос: какой формат для
поля Access изберет по умолчанию? Самое интересное, что в данном случае СУБД
вообще не использует никакой формат. Точнее, она допускает наличие сразу не-
скольких форматов. Например, если в поле ввести значение времени 18:3S, то про-
грамма автоматически преобразует его в «длинный формат времени»: !8:35:00.
40
Глава 2
Если ввести дату, например 12 сен г 2004, то к данному полю будет применен
«краткий формат даты», и информация будет представлена так: 12,09.2004. Если
лотом в режиме конструктора выбрать для этого поля один из форматов, например
длинный формат даты, то в первом случае данные будут выведены неправильно,
а во втором - правильно. В этом нет ничего удивительного, так как в первом случае
информация о дате отсутствует. Но это не значит, что информация в поле будет
потеряна. Если вернуться в режим конструктора и стереть текст в строке Формат
поля, то данные снова будут отображаться правильно. Отсюда надо сделать вывод,
что поле типа <Дата/вре.мя» надо или вообще оставить без формата, или задать под-
ходящий формат до начала ввода данных в таблиц}-'.
Если пи один из готовых форматов не подходит, можно написать свой. Суще-
ствует ряд кодовых символов для определения формата дат и времени.
; - двоеточие используется как разделитель часов, минут и секунд;
/ - по аналогии, слэш используется как разделитель в датах;
с - комбинированный формат. Для времени используется «длинный формат»,
а для дат - «краткий формат»;
d - дата (от I до 31):
dd - дата с ведущим нулем (от )1 до 31);
ddd - день недели двумя буквами (от Пн до Вс). В английской версии день не-
дели обозначается тремя буквами (от Sun до Sat);
dddd - полное название дня недели;
ddddd - «короткий формат даты»;
dddddd - «длинный формат даты»:
- номер дня в неделе (от 1 до 7);
ww - номер недели в году (от 1 до 53);
- номер месяца (от 1 до 12);
mm номер месяца с ведущими нулями (от 01 до 12):
обозначение месяца тремя буквами (отянвдо дек);
rnnrnm - полное название месяца;
q - номер квартала (от 1 до 4);
у - номер дня в году (от до 366);
уу - обозначение года двумя цифрами (от JI до 99);
уууу обозначение года четырьмя цифрами (от 0100 до 9999);
h - обозначение часа от 0 до 23;
tih - обозначение часа двумя цифрами от 00 до 23;
и - обозначение минут от 0 до 59;
Таблицы
41
nn - обозначение минут двумя цифрами от 00 до 59;
s - обозначение секунд от 0 до 59;
ss - обозначение секунд двумя цифрами от 00 до 59;
ttttt - «длинный формат времени»;
АМ/РН - использование аббревиатур «АМ» и «РМ» для обозначения времени до
полудня и после полудня соответственно;
am/pr, - использование аббревиатур «ат» и «рт для обозначения времени до
полудня и после полудня соответственно;
А/Р - использование символов «А» и «Р» для обозначения времени до полудня
и после полудня соответственно:
а/р - использование символов «а» и «р: для обозначения времени до полудня
и после полудня соответственно;
АНРМ - обозначение времени до полудня и после полудня в соответствии с настрой-
ками Windows.
Например, если использовать формат поля dddd", "dd.nrnimm.yyyy, то данные будут
представлены в таком виде:
пятница, 12. сентября. 2004
В формата: даты и времени нельзя использовать коды формата для
___ текстовых полей, например символ «угловая скобка» для преобразова-
ния регистра букв, но другие параметры поля типа «Дата/время»
такие же. каку текстового поля.
Логический формат
Ячейка в поле логического типа может содержать только одно из двух значе-
ний: Да или Нет. Access предлагает еще два варианта названий логического типа:
Истина/Ложг и включено/выключено. Вид формулировки можно выбрать из спи-
ска в строке Формат поля на вкладке свойств, показанной на рис. 2.8. Использо-
вание логических полей может быть самым различным (например, в анкетах или
для создания элементов управления). Самым ценным качеством логических по-
лей, на мой взгляд, является способ их представления в таблице.
Вне зависимости от того, какой формат поля вы изберете, в таблице логиче-
ское поле будет представлено в виде набора флажков. Когда вы щелкаете флажок
мышью, это приводит к тому, что в квадрате появляется изображение галочки,
что соответствует логическому значению ДА. Сброс флажка означает npin воение
ячейке поля логического значения НЕТ.
Глава 2
Общие Подстановке!
Формат- зля
Подпись
Значение по умолчанию
Условие на значение
Сообщение об ошибке
Обязательнее попе
Индекс» рОЕаннае по пе Нет
Рис. 2.8. Вкладка параметров логического поля
Такое поле можно использовать разными способами. В базе данных, содержа-
щей адреса для почтовой рассылки, можно отмечать, отправлено письмо или нет,
следует по этому адресу отправлять письма или нет и т. д. В коммерческой базе
данных можно отмечать различные стадии прохождения заказа: оформление до-
говора, факт оплаты заказа, факт отгрузки и т. д.
В формах и программах этим полям соответствуют переменные логического типа
(Boolean), которые могут принимать два значения: True (истина) и False (ложь).
Поле объекта OLE
Поле объекта OLE (Object Linking and Embedding) имеет всего два свойства:
подпись и параметр «обязательное поле». Поля данного типа не хранят информа-
цию как таковую, а содержат ссылки на объекты, которые могут быть включены
в БД с использованием OLE-протокола обмена данными. Такими объектами могут
быть, например, графические файлы. Даже самая лучшая СУБД не в состоянии
обеспечить хранение всех существующих на сегодняшний день видов информации,
что. впрочем, и не нужно. Достаточно осуществить связь с приложением, рабо-
тающим с тем или иным типом файлов. Для этого и существует протокол OLE.
Для того чтобы внедрить в ячейку поля OLE объект, надо установить на нее
курсор и, нажав правую кнопку мыши, вызвать контекстное меню, в нем выбрать
команду Добавить объект. Программа раскроет окно диалога, показанное на
рис. 2.9. Для выбора типа объекта служит достаточно длинный список. Объект
в данном случае отождествляется с приложением, в котором он может быть создан
или отредактирован. На рисунке видно, что, в частности, можно использовать зву-
ковой файл формата WAV, документ Word, рабочий лист (таблицу) Excel, графиче-
ские объекты популярного редактора рисунков Paint Shop Pro и другие типы
файлов. В том случае, когда в этом окне установлен переключатель «Создать
новый», открывается соответствующее приложение, работа с которым несколько
Таблицы
43
отличается от обычной. Так, пользователь не имеет возможности открыть сущест-
ву ющий файл для того, чтобы сделать его объектом. Например, если выбран
готовый документ Word, то его придется открыть в другом редакторе отдельно, ско-
пировать в буфер обмена, а затем перейти в окно документа, связанного с Access,
и вставить содержимое буфера. Если же объект создается, что называется, «с нуля»,
то работа в выбранном приложении происходит обычным образом. Но кочапда
выхода из приложения видоизменяется. Например, в меню Файл редактора Word
команда Закрыть преобразуется в команду Закрыть и вернуться... После закры-
тия программы мы вновь оказываемся в Access.
Microsoft Of fit Access
Создать на&ый
। ' Создать из файла
Тип бъекта:
Wave Sound
WcrdPed Document
Microsoft Excel
диаграмма мсгоюк Graph
Документ М icrosoft Wo rd
Затрат экране Part Shop Pro 6
и '.lajuema' •<.-1 эгс Pro 6
Лист l-UCtosuft Excel
UM
OK
Отмена
д значка
Добавление в документ косого объекта типа ‘ACDSee ЕМР
Рис. 2.9. Окно для выбора объекта
Просматривая список доступных приложений, легко определить, русифицирова-
на программа или нет. Критерием служит то, как написано название объекта. Если,
к примеру, в списке мы видим строку «Adobe Photoshop Image», то можно сделать
вывод о том, что графический редактор Adobe Photoshop или не русифицирован,
или не установлен, поскольку название объекта, с которым он работает, - image
(изображение) - написано по-английски. В русифицированных программах назва-
ния объектов, как правило, переводят на русский язык. Встретив в списке строки
«Документ Microsoft Word» или «Лист Microsoft Excel», можно понять, что мы име-
ем дело с локализованными версиями Microsoft Word и Microsoft Excel.
Второй вариант вставки объекта - выбор переключателя Создать из файла.
В этом случае подразумевается, что файл уже существует и нужно установить
с ним связь. Access позволяет найти файл в режиме диалога и после выбора нужно-
го файла определит, какое приложение необходимо открыть для работы с ним.
Необходимо помнить, что одному типу файлов могут соответствовать несколько
приложений. Например, файлы с расширением BMP используются разными гра-
44
Глава 2
фическими редакторами. Файл будет связан с ячейкой таблицы, а двойной щелчок
по этой ячейке позволит запустить приложение и увидеть (или услышать) содержи-
мое файла.
Существует и третий вариант внедрения объекта, являющийся, по сути, разно-
видностью второго. Если надо внедрить в таблицу уже существующий файл, то
можно открыть Проводник Windows, найти и выделить нужный файл, а затем
скопировать его в буфер обмена командой Ctrl+C Затем необходимо вернуться
в Access, выбрать нужную ячейку в поле объекта OLE и, активизировав контекст-
ное меню, выполнить команду Вставить. В этом случае программа также не от-
крывает приложение, а сразу формирует ссылку на объект в таблице.
Во всех случаях работать со вставленным объектом можно, щелкнув два раза
в соответствующей ячейке. После этого будет запущено соответствующее прило-
жение для редактирования объекта. Контекстное меню, связанное с той же ячей-
кой, позволяет использовать для манипуляций с объектом буфер обмена, то есть
использовать три известные всем операции вырезки, копирования и вставки.
Поле гиперссылок
Вкладка свойств для поля гиперссылки показана на рис. 2.10. Использовать
форматы для этого поля теоретически возможно, но на самом деле они не определе-
ны. Скорее зсего. в реальной задаче будет необходимо, чтобы это поле допускало
произвольный формат, поскольку ссылки на файлы могут быть самыми разными.
Общие Пол .танавкз
Форме.- поля
Подпись
^маченк»* по молчанию
Услсег - на »«ачение
Сообщение об иибке
Обязательно* л-. ie
Пустые строки
Индексированное попе
Сжатие Юникод
Режим ГЧ£
Режим предложен^ IM
Смарт таги
Нет
Да
he*
Да
Нет контроля
Нет
Рис. 2,10. Вкладка параметрон поля гиперссылки
Для создания гиперссылки надо выбрать команду из главного меню Вставка =>
Гиперссылка или команду из контекстного меню Гиперссылка => Изменить
гиперссылку. Поиск адреса документа производится в окне, показанном на
Таблицы
45
рис. 2.11 Доступ к денным осуществляется по такому же принципу, как и в случае
с объектами OLE: путем запуска приложения, позволяющего просмотреть указан-
ный файл.
Добавлен не гиперссылки
©I
файлом веб-
страницей
_]
HUt, .14
стрчницей
Папка.
_ ] Му DateSuuixe*
текущая
Моя г.угьк-а
_, г'СТФииеч'Л
ПЗОСНОТрбН- -• k dbl
ные 'J
страницы
_______________ ft
J Подскезка,
Ё1
ПОСЛСднИ-:
файгы
[Рис. !. 11. Окно для выбора гиперссылки
Мастер подстановок
Несмотря на то что мы можем увидеть фразу «Мастер подстановок» в описке
полей, это не тип данных, а название мастера. Очень часто возникают ситуации,
когда в поле можно вводить не нобое значение, а только одно из определенного
набора. Например, название города, способ оплаты товара, формат видеозаписи.
Если оператор базы данных будет каждый раз вводить значение вручную, он, во-
первых, может допустить опечатку, а во-вторык. одно и то же название ввести по-
разному. Кроме того, выбор из числа фиксированных значений помогает сэконо-
мить время при вводе данных.
Поэтому удобно, когда поле оформлено в виде раскрывающегося списка. Задать
параметры такого списка помогает Мастер подстановок. Единственное, что тре-
буется от разработчика, - заранее сформировать перечень возможных значений. Тут
возможны два варианта: создать отдельную таблицу с полем такого же типа и со
всеми необходимыми данными или сразу определить набор возможных значений
поля.
46
Глава 2
Создадим для примера поле со значениями вариантов оплаты заказ: и назовем
это поле Оплата. После того как из списка Тип данных (в режиме конструктора)
выбрано значение «Мастер подстановок», на экране появляется первое окно мас-
тера (рис. 2.12). Выберем опцию «Будет введен фиксированный набор значений»
и нажмем кнопку Далее.
Созданн* подстановки
Мастер созд 1 илбец, поде тан. ден, е ко
йТйбракаетг список нзчвниг для < Каким способом
столбец подстанов* »• будет »мучать эти значения?
С; "cjonS- . подстановки” дет
значения из тавлищ или запроса.
Буде введен | ик проБапньи набор ।ta'-ений.
Отнема ] > ]
Рис. 2.12. Окно первого шага мастера подстановок
На втором шаге мастера (рис. 2.13) можно ввести значения поля. Размер
колонки можно изменить. Кроме того, при необходимости можно сделать список
из нескольких колонок. В окне есть подсказка, как выполнить автоматическую
подгонку ширины столбца (дважды щелкнуть на границе колонки). Самое глав-
ное - щелкать надо, когда указатель мыши примет вид черного крестика с двумя
стрелками.
Последний шаг мастера (рис. 2.14' можно узнать по характерному клетчатому
флажку. В нашем примере это окно позволяет только задать подпись для нового
поля. После этого можно нажать кнопку Готово, чтобы мастер закончил свою
работу.
Фрагмент таблицы с полем подстановок показан на рис. 2.15 Когда в ячейке
таблицы устанавливается курсор, появляется значок раскрывающегося списка.
Как видим, это существенно облегчает ввод данных.
Таблицы
47
Создание подстановки
ы-1 г значения, которые д ер жа тъ с голбец под сганзвгн. fee ди те чтгпа
столбцов спи и значения ля ле:дои ячейки
Пгтеташ»-- правую -paw^f уэголда.’зстолб;, j на -у.мгкуйщнрн.ч, или дважды
• ее для Тимзтическпг подбора ширины,
Числа столбцмг
________Столбец!
Предспгъэ^апо . «ту
По -еггеляи
С отсрочкой платежа
Гуэннг
j С "ьеве | с Назад | £уее > ] | Сртсво
Рис. 2.13. Окно второго шага мастера подстановок
Создание подстановки
Задайте подпита которую содержит ont -. подстановки.
Способ оплаты|
Указаны все .ведения, необходимые мастеру, чтобы с<?здэт|
столбец годстанжки
О Вывести справку, после того как мастер 1>5д*:т стопбеи
подстановку
< Назад Далее >
Рис. 2.14, Окно третьего нага мастера подстановок
Если пользователь захочет ввести свои вариант, то это будет ему позволено.
А если надо сделать так, чтобы данные можно было вводить только путем выбора
из списка? Для разрешения таких проблем надо обратиться к параметрам поля.
Если посмотрим в режиме конструктора на характеристики созданного нами
поля то увидим, что Access создал обычное текстовое поле, поскольку данные
в списке были текстовые.
48
Глава 2
-
Способ о<шаты
Налмчвы1АИ
Наличными
Прел wins* по чету
^Наличг ыми 1
Предоплата по счету
I По Е&-. 'Ч
С спсрп^- ой платеж
Лизинг
Рис* 2*15. Поле со списком
Но теперь задействована вкладка Подстановка которую мы до сих пор остав-
ляли без внимания. Она показана на рис. 2.1 ( С ее помощью легко разобраться как
создается поле подстановки. Например, если мы хотим запретить пользователю
вводить любые данные, то должны установить опцию Ограничиться списков как
Да. Параметры Тип элемента управления и Тип источника строк определяют
р ыновндность поля подстановки: существует достаточно много вариантов. Для
того чтобы правильно выбрать значения этих параметров, и надо было запускать
мастер. Остальные свойства очевидны. Сам список значений находится в строке
Источник строк, и вы можете редактировать его вручную, только соблюдайте пра-
вила синтаксиса: используйте кавычки и разделитель «точка с запятой». Мы опре-
делили в мастере, что список будет содержать одну колонку, и здесь параметр
Число столбцов имеет значение 1. Только один столбец списка может служить ис-
точником данных для одного поля, и здесь, естественно, параметр Присоединен-
ный столбец указывает на первый (и единственный в нашем примере) столбец
списка. Остальные параметры относятся к форматированию списка.
При жсланиг вы можете создавать поля подстановки и без помощи мастера,
вручную заполняя вкладку Подстановка. Любое поле можно усовершенствовать
таким способом.
Полб подстановок (и соответствующий мастер) можно использо-
вать как для таблиц, так и для форм.
Вариант с созданием дополнительной таблицы в качестве источника данных
более сложен, но интересен тем, что в таблице можно хранить любое число
значений, а при необходимости их удобно редактировать обычным способом (как
вручную, так и программно). Последовательность действий для этого варианта
разбирается в примере базы данных, в разделе 4.4.
Таблицы
49
Общие
Подст амоьг.а
Тип ешвнт-й управления
► ил .!ст<_ мникз строк
Источник строп
Грисоединенмь* итг-с-
Чк ц_ CTCJldUTF
'еглзенй столбцов
Шим <
Числе строк списка
Ширине списке
ОгрсНИ’ЧЛТЬ'-Ч списком
Попе со списком
Сгнсик значении
"Hani J4ht; 11", “Пред сг л эта по с -с?т Пзесктел
1
1
Н₽т
3,228см
8
£3гм
Нет
Рис. 2.16. Вкладка nnpayei рои поля со списком
Создание масок ввода
Выше мы познакомились с шаблонами для создания масок ввода. Существует
большое количество вариантов ласок но для облегчения работы по их созданию
применяют специальный мастер. Он используется только для текстовых полей
и полей типа Дата/время». Запускается мастер кнопкой, расположенной в строке
Маска ввода. Его первое окно показано на рис. 2.17.
Создание масок ввадл
Котс рая и; i асок ввода обеспечивает • -ужнь с вид данных?
выбранной Б поле "Прова".
Вид данных:
С: 00; 00
41.Z3 19«
00:00
12;ГС
Для изменения списка масок ввода на^^-те кнопку список".
Маска идеда:
Длинный срмат времени
I ’ сатин формат даты
Краткий т-..пат времени
Средний фермат J-
Проба: 12-Сен-200*
Отяенз ; Депге > | | [ртооо |
Рис. 2.17. Первый шаг мастера масок ввода
Например, для поля типа «Дата/время» можно выбрать один из готовых пабло-
нов, а с помощью кнопки Список можно сформировать даже несколько шаблонов
для одного поля. Обратите внимание, что в образце для «среднего формата даты»
50
Глава2
название месяца написано с маленькой буквы (сен), а в строке Проба - с большой
(Сен). Это определяется форматом маски, который можно отредактировать на
втором шаге мастера:
UQ->Kl -0000
Надо заметить. что разделы встроенного справочника (которые от-
крываются после нажатия клавиши 7Ь. посвященные шабюнал ма-
сок ввода, не очень удобны. Многие из этих разделов относятся к про-
NB граммированш на Visual Basic и содержат описания переменных для
создания масок. Кроме того, эти разделы не всегда переводят на рус-
ский язык в русской версии IfficeB >бщел разобраться в них под силу
только подготовленному специалисту. Мастер гораздо удобнее.
2.2. Режим таблицы
«Режим таблицы» - это не только один из способов вывода таблицы на экран,
точно так же называется инструмент для создания новой таблицы. Он называется
Создание таблицы путем ввод: данных. Выбрав го, мы получим доступ к заго-
товке таблицы, как показано на рис. 2. If Программа еще не знает, что нам нужно,
поэтому она создает абстрактную, но готовую к использованию таблицу. Совершен-
ствуя ее. пользователь определяет необходимые свойства и заполняет ее информа-
цией. Например, поля таблицы вначале имеют имена, данные по умолчанию (Поле1,
Поле2 и т. д.), но вы можете присвоить полям новые имена, которые будут нести
смысловую нагрузку. В данном примере, очевидно, полям можно присвоить имена:
Автор, Серия, Издательство, Год, Аннотация. Тип полей будет определяться про-
граммой автоматически, по мере заполнения ихданными.
~ п . Поле? _____________i. • , Поле4 Полеб____________
►_ А Азимов Избранное Мир 1989 В сборник классик американской
""
запись: Н
| Г ► |[Н>*| нэ 21
Рис. 2.18. Режич формирования структуры таблицы путем шодаданных
Строку таблицы можно заполнить и при помощи копирования через буфер
обмена. Для этого надо выполнить такую последовательность действий:
Таблицы
51
1. Открыт базу данных, содержащую образцовую запись.
2. Выделить мышью нужные поля в одной строке и скопировать данные в буфер
обмена.
3. Открыть базу данных, в которой надо создать новую таблицу.
4. Выбрать команду Создание таблицы путем ввода данных.
5. Выделить в заготовке таблицы такое же количество полей в одной строке.
6. Выполнить вставку из буфера.
После ввода данных и определения имен полей целесообразно закрыть окно
таблицы, чтобы программа сохранила новый объект базы данных. Access выведет
вопрос: «Сохранить изменения макета или структуры объекта?» На этом этапе
таблице можно присвоить требуемое имя.
Программа в этом случае еще выводит окно с сообшением: «Ключевые поля
не заданы». Оно показано на рис. 2.19.
Mktosoft Office Access
Ключевые опя не заданы.
Хотя на им гаки* поп >не нпяется обязательным, рекомендуется их
* \ задат- Таблица лппика иметь ключевое попе для уь । еновлемнй связок с
другими таблицами базы данных.
Создать лдлсчеео* гк^е сейчас ’ '
Aj j rlSJ 1 1 OTM&i-a |
Рис. .19 Программа предлагает создать ключевое поле
Как известно, ключевые поля в таблицах следует создавать. Можно, конечно,
придумать ситуацию, когда ключевое поле не потребуется. Если разработчик решил
включить в состав своей базы данных инструкцию для пользователя и поместил ее
в единственное поле типа Мето в одной записи таблицы (такой пример еще будет
в нашей книге), то тут ключевое поле точно не нужно. Но это довольно редкий при-
мер. Так что, скорее всего, ключевое поле потребуется. Если нажать кнопку Да
в этом окне, то программа автоматически создаст поле счетчика с nocJiedot отель-
ной нумерацией строк и придаст ему статус ключевого. Обычно именно такие поля
и требуются, потому что однозначно идентифицируют каждую запись таблицы и не
требуют ручного ввода данных. Кроме того, с помощью такого поля легко отслежи-
вать, сколько записей было введено в таблицу с момента ее создания, даже если
часть записей уже удалена, Но если вам, скажем, потребуется поле счетчика
со случайныл присвоением кодов, то вы можете исправить это свойство в >ежиме
конструктора.
52
Глава 2
Если вы отвечаете Нет, то потом, опять же в режиме конструктора, вы сможе-
те выбрать поле, которое будет ключевым, или создать новое поле, чтобы оно вы-
полняло функции ключевого.
Другой вариант «режима таблицы» - обычная работа с таблицей для ввода,
редактирования и поиска данных. Забегая вперед, скажу что в табличной форме
могут функционировать также запросы и формы.
Как правило, окно таблицы снабжается панелью навигации по записям
(см. рис. 2.18) Символ «звездочка» в Access обозначает новую запись. Так, после
нажатия кнопки с изображением черной стрелки и звездочки в конце таблицы
создается новая запись, и курсор переходит на нее. В заголовке новой записи
также присутствует символ «звездочка». Другие кнопки позволяют сдвигаться по
записям вперед и назад, а также переходить к первой и последней записям.
Окошечко с номером записи тоже можно юпользовап если шести в него номер
записи, то указатель переместится на соответствующую запись.
Сам указатель записи выглядит как черная стрелка в области выделения запи-
си (слева от первого поля). В каждый момент времени пользователь может редак-
тировать только одну запись. Во время работы с таблицей указатель
«перепрыгивает» с записи на запись, в зависимости от того, на какой ячейке
щелкнет мышью пользователь. Иногда пиктограмма указателя записи 1ринимает
вид карандаша.
Не путайте юмер записи и значение, записанное в поле счетчика. Это
два независимых способа нумерации записей. Номера записей всегда
начинаются с единицы и идут посчедоватеп до конца таблицы. Если
запись удаляется программа автоматически перестраивает нумера-
NB цню записей. В поле счетчика числа не меняются. Значения номеров
записей и чисел в поле счетчика могут совпадать только в одном
случае: если счетчик имеет пос зедовате 1ьную нумерацию и с момента
создания таблицы ш была удалена ни одна запись. Но это, разумеется,
совершенно не обязательно.
На первый взгляд, данная структура похожа на электронную таблицу, например
рабочий лист Excel но это сходство только внешнее. Одна из немногих общих черт
заключается в легкости, с которой в таблице Access и на рабочем листе Excel можно
изменить ширину столбца или высоту строки. Достаточно поместить указатель
мыши на линию разделения строк (или л о. годов в серой области выделения записи
(или поля) и переместить его в нужном направлении, удерживая кнопку мыши нажа-
той. Кстати, эта возможность реализона не только в Access и Excel, но и в других
Таблицы
53
продуктах Microsoft, где выполняется работа с таблицами, а значки указателей
мыши унифицированы. К режиму таблицы всегда можно будет вернуться, активи-
зировав окно базы данных и нажав кнопку Открыть на вкладке Таблицы.
Работая непосредственно со строками таблицы, можно выполнять не слишком
много действий: добавлять и удалять записи, изменять зысоту строк и выполнять
стандартные операции перемещения и копирования данных с использование бу-
фера обмена. Например, с его помощью можно переместить или скопировать
одну или несколько строк в другую таблицу или даже в другое приложение.
Намного более эффективно использование инструментов, которые Access
выводит на экран, а также контекстных меню, связанных с элементами табли-
цы(см. рис. 2.20).
Назначение большинства команд из контекстных меню ясно из названия.
Только некоторые требуют пояснения. Выбрав команду Скрыть столбцы, вы
уберете выбранные столбцы с экрана, а для того, чтобы вернуть их обратно, надо
вызвать команду Отобразить столбцы из другого контекстного меню, которое
связано с заголовком окна. Кроме того, последняя команда открывает список по-
лей. в котором можно указать, какие поля должны быть видимы, а какие нет. Так
что эта команда служит не только для «показа» полей, как подразумевает ее на-
звание, но и для их скрытия.
Многие команды контекстных меню продублированы в главном меню. Напри-
мер, две вышеупомянутые команды можно найти в меню Формат. Команда
Закрепить столбцы не только «приморозит» (в английской версии эта команда
называется Freeze Columns выбранный столбец к кран; так, что при прокрутке
он всегда будет виден, но и переместит его в левую сторону таблицы. Команда
Столбец подстановок запускает уже известный нам мастер подстановок.
Команда Шрифт обеспечивает доступ к обычной для Windows-приложений
процедуре выбора шрифтов, их начертания, размера и цвета. Изменит! пара-
метры шрифта можно сразу для всей таблицы.
Обратите внимание, как распределены команды по контекстным меню. Коман-
ды фильтрации находятся в меню ячейки таблицы и в меню для всей таблицы.
Команды сортировки находятся в разных меню, связанных как с ячейкой, так и со
столбцом. Команды для работы с буфером обмена тоже имеются в нескольких ме-
ню. Команды, расположенные в разных меню, работают по-разному, так как они
применяются к принципиально разным объектам.
Существует два вида сортировки: «по возрастанию» и «по убыванию» Соот-
ветствующие команды производят сортировку всей таблицы по значениям вы-
бранного поля, независимо от того, какой фрагмент столбца выделен.
54
Глава 2
г Новая запись
Удалить запись
д £ьрезать
Крпироэ-эгь
Е<тйвить
’г Высота строки ,
Конструктор .ибпиц
Сводная таблица
Своднаядиаграмма
Jj* Йзгвни фильтр
Прицепить фильтр
Златить фильтр
Л> вырезать
Копировать
Вставить
А Шрифт
2П Режим таблицы..
Отобразить'ТОП&ЦЫ ,
. Исключить выделенное
, Ссртироть : по возрастанию
i | LOpTxIpOSr .- по УЁыВоК'Ю
Копировать
Вставить
Шцрнна столбца.,.
укрыть солбцы
[JJj Закрепить столбцы
Освободить все столбцы
Й нэйтц...
Добавить столбец
Столбец подстановок. ,
У“ Удалить столбец
Паренменова -столбец
/д ить фильтр
• | Сортиров» а по возрастанию
[ ГОРТИПО» <3 ПО ,-£MJdHHKJ
Вырезать
Котировать
Вставить
Добавить объект ..
Г нп^рссылка
«#, Изменить гиперссылку .
Открыть гитерссьику
Открыть в миом окне
Колировать гиперссылку
- j Поместить е лажу "Избранное"
Оусбраж .ть текст:
Удалить гиперссылку
Рис. 2.20, Контекстные меню таблицы
Сортировка по убыванию используется достаточно часто. В первую очередь
это связано с датами. Для того чтобы видеть записи (или документы), созданные
последними, нужна сортировка по дате создания в обратном порядке. Так, напри-
мер. сортируется список писем в почтовых программах. В Access можно также
применять обратную сортировку к полю счетчика с последовательной нумераци-
ей, чтобы увидеть записи, созданные последними. В этом случае они попадут
в верхнюю часть таблицы и номера записей для этих строк будут минимальны-
ми. Естественно, что пользователь увидит их в первую очередь.
Таблицы
55
С точки зрения проектировщика баз данных существует >чт npt
N23 двинутый способ сортировки — с помощью запросов. В этом случае
процесс сортировки скрывается от пользователей.
Проектируя таблицы, обязательно предусматривайте возможность восставовле-
ния первоначального порядка записей. Тут опять может пригодиться поле счетчика
с последовательной нумерацией. Сортировку очень легко выполнить - достаточно
нажать оотвегснзу ощук кнопку, но отменить действие команд сортировки невоз-
можно. Несколько последовательно выполненныхоперацийсортировки азны по-
лей могут безнадежно юрепутагь записи в таблице.
Команда Добавить объект доступна только в том случае, когда поле таблицы
имеет тип «Поле объекта OLE».
Если в таблице имеется поле типа «Гиперссылка», пункт Гиперссылка позво-
лит вставлять в базу данных ссылки на самые различные документы и файлы,
Для других полей эта команда не работает.
2.3. Мастер таблиц
Еще одним способом создания таблицы является использование заготовок,
которые доступны в мастере таблиц. Первый шаг этого мастера показан на
рис. 2.2 Все заготовки разбиты на две большие группы: для делового и для лично-
го применения. Из существующих полей надо отобрать те, которые должны вхо-
дить в новую таблицу. Если предлагаемое поле не в полной мере соответствует
предъявляемым требованиям, то его свойства можно будет изменить тозднее, в ре-
жиме конструктора.
Access предлагает здесь много вариантов, но я думаю, что они интересны
в первую очередь для изучения. Ниоткуда не следует, что с помощью этого мас-
тера можно будет построить именно такую таблицу, какая вам нужна. Но для по-
нимания того, какие бывают поля, этот мастер достаточно интересен.
Вот, например, поле СотовыйТелефон. Мастер делает его текстовым, длиной
30 символов. Действительно, номера сотовых телефонов бывают достаточно
длинные, а формат разный. Поэтому нужно универсальное поле. Если попытать-
ся создать маску для «облегчения» труда оператора то. скорее всего, операторы
будут жаловаться, что какие-то юмера не смогут ввести. Имя поля не имеет про-
белов, но для поля предусмотрена подпись с пробелом: «Сотовый телефон».
56
Гпава 2
Создание таблиц
j Выберите образцы таблиц для «эименен при озд- .н^собствен-юн таблицы.
Выберите зтвгорнюи .1 . ввел твбпита затем нужные образцы полей. Допускается
out•. 'ПЛ'.’’ 'Из пескельк« Если .ранее неясно, будет ли гкгюльэче^ть-.я по е
и .. нет, чучше добавить, это поле е таблицу Ег несло»! будет id лит позднее,
('. Дедоэые
Личные
Образцы полей:
ГЬпя новей таблицы:
Образцы 1йИ?лиц.
ЖЖЗ
ЭДнтгкты
клиенты
Сотрудники
Топору
Заказы
Город
Регион
Область
Г1очтоеый1№ДЁ«с
Страна/ры нон
ДамашнииТелефсн
РвбрчниТ епеф-.'Ф"
1спуый Г--nent-'jH
Сотдс^нТеле^ОН
fl .плппните пин, чм Г -л^
Переименовать пел# .
Рис. 2.21. Мастер таблиц
На втором шаге мастера можно изменить имя таблицы, присвоенное по умолча-
нию, и определить ключевое поле в новой таблице. Можно выбрать режим автома-
тического определения ключа. Если в новую таблицу включено поле-счетчик, оно
автоматически выбирается программой в качестве ключевого. Если в список полей
не было добавлено поле-счетчик, то программа создает еще одно поле в таблице,
для того чтобы использовать его в качестве ключевого. Тип создаваемого поля -
счетчик, а его имя программа изобретает сама. Обычно она создает имя нового поля
как комбинацию слова «код» и имени таблицы, удалив все пробелы,
Можно выбрать вариант «Пользователь определяет ключ самостоятельно! и опре-
делить ключевое поле в отдельном окне диалога. Программа предложит выбрать
одно из имеющихся в таблице полей. Необходимо также установить переключатель
в этом окне, который определяет, какие данные могут находиться в этом поле.
На третьем шаге мастера таблиц разработчику предоставляется возможность
связать ее с другими таблицами базы данных. Список существующих в базе
данных таблиц выводится в окне, и его стоит просмотреть перед тем, как нажать
кнопку Далее. Во вновь создаваемой таблице одно из полей является ключевым.
На itoiy шаге программа анализирует ключевые поля всех таблиц базы данных
и если находит среди них поля с такими же именами, то предлагает связать эти
таблицы с новой. Если пользователь ничего сам не изменит, то эти связи будут
определены автоматически. Это относится, разумеется, к другим таблицам, соз-
данным с помощью мастера, потому что в противном случае вероятность совпа-
Таблицы
57
дения имен невелика. Если же подходящих таблиц не найдено, то 1еред именами
всех таблиц в списке будет стоять «не связана». Связь может определить и сам
разработчик, если выберет таблицу в списке и воспользуется кнопкой Связи.
На последнем шаге мастера таблиц можно определить режим, который будет
активизирован после завершения работы мастера. Опция «Изменить структуру
таблицы» означает переход в режим конструктора для новой таблицы. Выберите
ее, если необходимо доделать то. что не смог выполнить мастер: ввести новые
поля, придать им необходимые свойства, переопределить ключ, создать описания
полей и т. д. Установка переключателя в положение «Ввести данные непосредст-
венно в таблицу» приведет к тому, что таблица будет открыта для просмотра
и редактирования. Обычно в этот режим переходят, нажимая кнопку Открыть
в окне базы данных. Позиция переключателя «Ввести данные в таблицу с помо-
щью формы, создаваемой мастером» говорит сама за себя: мастер создаст фирму
для новой таблицы. Вид формы будет очень простым - все поля выстроятся одно
под другим. При необходимости форму можно будет сохранить, и ее значок поя-
вится на своем обычном месте — на вкладке Формы.
2.4. Связывание таблиц
Чаще всего причиной размещения данных в двух и более таблицах в одной БД
является дублирование данных (наличие в таблице повторяющихся фрагментов).
Для того чтобы сэкономить место на диске и в памяти, были разработаны прин-
ципы нормализации, которые позволили исключить дублирование. Большинство
пользователей, работающих с базой данных на своем компьютере (размещение
базы на сервере - отдельная тема), не сталкивается с необходимостью экономии
места на диске, и нормализация выполняется ради соблюдения другого принци-
па: данные должны быть организованы таким образом, чтобы в случае их редак-
тирования каждое исправление или дополнение делалось только в одном месте
базы данных. Третья важная причина разнесения информации по таблицам - не-
обходимость группировки данных по их содержанию. Каждая таблица может от-
вечать определенной тематике. Четвертая причина - принцип модульности,
который предполагает, что база данных должна быть разбита на несколько уни-
фицированных блоков, которые можно модернизировать и заменять по отдельно-
сти, а таблицы, подготовленные для одной базы данных, можно было бы
использовать и в других.
Глава 2
Схема данных
Для связывания таблиц используется схема ванных, которая запускается одно-
именной кнопкой, расположенной на главной панели шструментов. На схеме каж-
дая таблица представлена панелью со списком полей. Этого достаточно, чтобы
создать нужную связь. Для примера рассмотрим, как организованы связи между
таблицами в базе данных «Борей» (рис 2.22).
* Схема данных
Поставщики
kUutl ккпиаяцни
нлеаниг
Ci ; сщатьсяК
I ДОП’КНОСТи
CpQA
Область.
I
, Страна
J 'елефон
- Факс
Домашняя -pai-^i.a
Типы
КодТ»и *
ТОВАРЫ
1
“ КцдТичй
V Марка
КодПоставщика
1КодТипа
,ЕдиницеИч«реН тя
] Цена
I |НаСкпаде
Ожидается
I МннигтальпыйЗапас
| ПсставкиПрэкрашены
КяТ« ОрМЙ
Опис-нне
Закатано
оо
w КодЗчжаза л ——-
КодТ|им|«
J*M
Количество v‘
/
КодСотрудт
фэдипнЯ
Имя
шзнииост»
•X Miuew-e
Да гаРижденм
ДатаБайм з
Адрес
Город
Индекс
Заказы
— (кидЗаказа
ю кддКпнелта
, /““1КодСотрудника
ДатаР дзне щения
1датаПазнач«-ия
ДатеИсполненнч
Дпстаз<а
СтримостьДсствскн
На»# Получателя
АдресПолучатвля
|Г ородПопучателя
,'ЬластьПолучатег а
Инд ек сПопучате ля
I лранаПопуцатеЛй
Клиенты
oaf— КодКлвгта
" Назеание
Off ашатьсяК
Должность
Адрх
сю Город
П1 Об пасть
Индекс
;тр^ка
Телефон
Факс
Доставка
КолДрстаеки
;Нлв**ме
Телефон
отражение
Li рана
,ц,
Ди53Бочы1Й
•□□"графил v
Рис. 2.22. Схема данных базы «Борей»
Основу этой базы данных составляют две таблицы: Товары и Заказы Дейст-
вительно, коммерческая фирма оперирует заказами: менеджер формирует заказ,
за него юлу чают оплату заказ отгружается покупателю. Поэтому в таблице нахо-
дятся все характеристики заказа, а названия полей говорят сами за себя.
В базе данных ведется также учет клиентов. Поскольку в таблице Клиенты
для каждого клиента отведена одна запись, то эта таблица связана с таблицей
Заказы отношением типа «один-ко-мпогим» (одному клиенту соответствуют не-
сколько заказов).
Таблицы
59
«Многие» в данном случае обозначаются знаком бесконечности. Обратите
внимание, что такая же связь существует и с таблицей Доставка, но тут ее
назначение другое: она необходима для создания поля подстановки Доставка
в таблице Заказы. Пример по созданию такого поля есть в главе 4. Таблица Дос-
тавка - вспомогательная. Она содержит мало записей и может не изменяться
в процессе эксплуатации базы данных.
О том. как связана таблица Заказы с таблицей Заказано, я рассказывал
в главе 1 (см. рис. 1.2). Здесь же мы видим только схематическое обозначение
связи: одному заказу может соответствовать несколько товаров.
Данные о сотрудниках фирмы собраны в отдельной таблице. Поскольку один
менеджер обрабатывает много заказов, с таблицей Заказы установлена связь
«один-ко-многим».
Другим центром формирования данных является таблица Товары. Обычно
в подобной таблице хранится информация о товарах, которые есть на складе.
Поскольку товар может временно отсутствовать, в таблице должно быть преду-
смотрено поле для отображения этого факта. В данном примере мы видим также
поле МинимапьныйЗапас. Его назначение очевидно.
Записи о поставщиках не должны повторяться, поэтому для хранения информа-
ции о поставщиках создана отдельная таблица Поставщики. Она тоже использует
связь «один-ко-многим» (один поставщик может продать несколько товаров). В ре-
альной жизни все, конечно, сложнее: одни и те же товары могут различаться по
цене, приходить от разных поставщиков, иметь разные сроки хранения и т. д. Все
это должно находить свое отражение в дополнительных полях таблиц.
Таблица Типы хранит информацию о категориях товаров. Это тоже вспомога-
тельная таблица, которая нужна для создания поля подстановки. В таблице Товары
тип (фрукты, мясо, напитки и т. д.) закодирован в числовой форме, а в таблице
Типы помещены словесные расшифровки. На первый взгляд может показаться
странным, почему все товары собраны в одной таблице (наверняка ими занимаются
разные менеджеры), но на самом деле именно так и надо: при формировании аказа
покупатель может затребовать любой набор продуктов, и соответствующие пози-
ции удобнее выбирать из одной таблицы. К тому же покупатель наверняка должен
получить определенные документы (накладную, счет-фактуру), и их тоже легче
создавать как Ьормы сделанные на основе одной таблицы.
Зато, если надо отобрать товары одного типа (например, эыбопродукты), это
несложно сделать с помощью запроса или рилътра.
В базах данных, создание которых рассматривается в этой книге, тоже исполь-
зуется связывание таблиц. Практические-примеры есть в главах 4 и 7,
60
Глава 2
Формирование связи
Итак, для того чтобы связать две таблицы, нужно в первую очередь преду-
смотреть поля в таблицах, значения которых пригодны для связи. Чаще всего это
поля счетчиков или числовые поля. Необходимо также точно знать, могут ли
быть в поле повторяющиеся значения. Если есть - значит «многие», если нет
значит «один» (подробно варианты связей разбираются ниже). После этого надо
включить таблицы в схему данных; для этого используется команда Добавить
таблицу. Установка связи производится перетаскиванием имени одного поля на
имя другого. Указатель мыши в момент завершения перетаскивания должен при-
нять вид прямоугольника.
После этого программа открывает окно, доказанное на рис. 2.23. Здесь мы ви-
дим характеристики одной связи базы «Борей». Удобно, когда в обеих таблицах
связанные поля имеют одинаковые имена. Зато другие характеристики полей
могут не совпадать. В данном случае поле КодСотрудника в таблице Сотрудники
является ключевым, и каждое его знамени уникально. А поле с таким же именем
в таблице Заказы - обычное числовое, и в нем может быть много одинаковых
значений. Так создается связь кодин-ко-многим».
Рис. 2.23. Окно с параметрам! связи
Второе окно, содержащее параметры связи, показано на рис. 2.24. Оно открыва-
ется кнопкой Эбъединеиш Я рекомендую всегда проверять, какой из трех вариан-
тов объединения выбран, и в случае необходимости использовать другой вариант.
Здесь, по сути, решается вопрос, как поступить с записями, для которых не нашлось
адекватного значения поля в другой таблице: делать их доступными или нет. Выбор
варианта определяется только по смыслу. В нашем примере задействовано самое
жесткое из всех условий.
Таблицы
61
Практическую пользу от связывания таблиц можно извлечь, создав запрос,
форму или отчет. В этом случае связанные записи будут выбираться из таблиц
единым блоком. Теперь осталось только рассмотреть некоторые особенности раз-
личныхтипов связей.
Параметры объединения Й
1. Объединен ie только тех вписей, в которь/
лог. обеих таблиц осгаддют.
С 2. зъедгаение ВСЕХ’ЭТисб из трудники' и только тех
»•»и °'='► v в которых связанные топя
совпадают.
I О. _ Объединение СЕ записей из "Заказы" и только тех
записей из " /грудники* в которых связанные поля
совпадают.
иК | | гг^на
Рис. 2.24. Дино ши е ьное окно позволяет точно
иыбрат параметры иязи
Связь «один-ко-многим»
Об этой связи было рассказано достаточно много, и добавить почти нечего.
Подчеркну лишь, что это самый распространенный вид связи. Нельзя сказать, что
какая-то таблица в данном случае является главной, а другая подчиненной:
выборка данных может идти в обоих направлениях. В предыдущем примере мож-
но. задав код сотрудника, получить информацию обо всех заказах, с которыми он
имел дело; и наоборот, выбрав заказ, можно определить имя менеджера.
Связь «один-к-одному»
Эта связь подразумевает, что в обеих таблицах в связанных полях имеются
только уникальные записи. На первый взгляд это кажется абсурдным: не i pome
ли было создать одну таблицу вместо двух? Действительно, в некоторых случаях
разницы нет. Но давайте предположим обратное. Допустим, у нас есть таблица,
состоящая из десяти полей, и мы хотим разделить ее на две. Пять полей в одну
таблицу, пять в другую. В этом случае, чтобы сохранить целостность 3ai исей,
таблицы надо связать по принципу «один-к-одному». С точки зрения быстродей-
ствия и экономии места мы вряд ли что-нибудь выиграем. Даже наоборот, при-
дется создавать дополнительные кодовые поля. Зато теперь мы можем при
необходимости заменять эти таблицы другими не швисимо друг от трут i. Так
обеспечивается принцип модульности данных: каждая таблица хранит данные из
62
Глава2
определенной предметной области, и в этом случае таблицы легче редактировать.
Связь «один-к-одному» можно представить и наглядно. Допустим, у вас есть лист
бумаги, на котором изображена большая таблица. Его можно разрезать по верти-
кали так, чтобы часть колонок попала на одну половину листа, а часть - на дру-
гую. Вы можете использовать половинки листа по отдельности. С ними могут
работать одновременно два человека. Но в любой момент две части листа можно
соединить, и таблица вновь станет целой.
Связь «многие-ко-многим»
Необходимость создания такой связи возникает, когда в обеих таблицах кодо-
вые поля содержат повторяющиеся значения. Access не создает связи такого
типа, и ее приходится делать, используя две связи «од ин-ко-многими и вспомога-
тельную таблицу, в которой есть два кодовых поля и собраны только уникальные
значения кодовых полей основных таблиц. Пример создания такой связи подроб-
но рассмотрен в главе 7.
Гпава 3
Пример простейшей базы данных
Рассмотрим в качестве примера базу данных, состоящую из одной таблицы.
Такую базу данных нетрудно создать за полчаса и сравнительно нетрудно запол-
нить данными. Нам не придется определять связи между таблицами, создавать
сложные формы и заниматься программированием. Зато мы сможем разобраться,
какие инструменты предлагает Access для работы с базой данных.
3.1. Постановка задачи
Сформулируем задачу следующим образом: создать несложную базу данных
для хранения списка организаций и последующей связи с этими организациями
по телефону. Такая задача часто возникает в коммерции - сообщить о. новых то-
варах, предложить услуги и т. д.
Создать список организаций можно в разных программах: в Word, в Es.ce!,
в Access. Все эти способы будут обладать своими преимуществами и недостатка-
ми. Нам важно, что можно получить в этом плане от Access.
Для того чтобы не усложнять работу оператора, целесообразно сосредоточить все
данные в одной таблице. Попробуем определить, какие поля потребуются. Предста-
вим себе, как оператор снимает трубку телефона и набирает номер: «Алло это
фирма Тип-Топ? Мы хотим предложить вам канцелярские товары». Ответы могут
быть самые разные: «Нам это не интересно», «Позвоните Ивану Ивановичу по теле-
фону 11-22-33», «Позвоните через месяц», «Отправьте прайс-лист по факсу» и т. д,
Оператор должен быстро записать результат и звонить в следующую организацию.
А если телефон занят? Тогда надо переходить к следующему, а к этому вернуться
чуть позже.
При сборе телефонов надо предусмотреть другие особенности: по понятным
причинам один и тот же телефон не должен попадать в таблицу дважды.
Создадим новый файл базы данных и назовем его organizacii.mdb. Создадим
в нем таблицу Организации.
64
Гла( 3
3.2. Создание таблицы
Таблицу удобнее создавать в режиме конструктора. В ней можно преду
смотреть такие поля:
Имя поля Формат поля
st Счетчик с последовательной нумерацией, ключ
Телефон Текстовое, 30 символов совпадения не / опускаются
ОК Логическое
Название Текстовое. 50 симво совпадения не допускаются, верхний регистр
ФИО Текстовое, 50 символов
Результат Текстовое, 30 символов
Адрес Текстовое, 50 символов
Примечание МЕМО
Поле st представляет собой счетчик с последовательной нумерацией. Мы сде-
лаем это поле ключевым, хотя на эту роль в нашем примере подошли бы и другие
поля: Телефон или Название.
. Для хранения номеров телефонов используется текстовое поле. Мы уже убе-
дились в предыдущей главе, что тридцати символов достаточно для хранения
даже номеров сотовых телефонов. Это поле должно быть определено как индек-
сированное, потому что требуется запретить повторы значений. Незачем ставить
оператора в неловкое положение, вынуждая его звонить в одну и же организа-
цию по нескольку раз.
Рядом следует поместить поле с «галочками». После звонка можно будет от-
метить эту запись. «Галочки» позволят вернуться к тем номерам, где было занято.
Имя ОКвполне подойдет для такого поля. Имя не должно быть длинным, потому
что само узкое, а место на экране тд< экономить.
После набора номера следует вопрос: «Это фирма такая -то?.. .>: Поэтому сле-
дующим полем будет название организации. Видимо, пятидесяти символов будет
достаточно. Я предлагаю сделать так: проиндексировать это поле, запретив сов-
падения. Бывает, что несколько организаций имеют одинаковые названия, но
в базе данных их все равно надо как-то различать (хотя бы по номерам). Кроме
того, для облегчения работы можно сделать так, что все символы будут автома-
тически переводиться в верхний регистр. Цл: этого надо в строке Формат ноля
записать соответствующий символ маски. Вкладка параметров поля Название по-
казана на рис. 3.1.
Пример простейшей базы данных
65
- Организации: таблица
_ _1елефон
'ок
_ ФИО
_ Ре?) .ЬТЭТ
_ Адрь{
Чрипечанне
г^етчик
Тёмгдмн
Ik') mtL4.HH
Т«Ь.СГОВс>Г
ТтьГГСБЫП
ТекстсЕЬй
Текстов^
Пс- J МЕМО
Ьткв Пс-Астансо»
РйЭГЩ ПОЛЯ
ФорПч, ПОЛЯ
Маска веюд-з
, Тс-ДЯ^СЕ
Зна’-к-н и по нолчагий
‘ 'споьпе нэ ^аччг+ie
об
Обк^тапьное пале
Пу Tk СТрОКП
Индексировав:- поле
Сжатие Юникод
Р^жим 1МЕ
; • Режим _«>:Vi лй -»с*-»-и IP1 Е
Смарт-теги
Да (Совгеда-мя не л опус агОТГа)
Нет
Нет митрот
Нет
Икя
[ОСГс-ЯТь И5 Г 4
знэксе с-; чстсм
пробепив Для
cnp^-rf н 1’ю именам
полей те
клав! F1.
Рис. 3.1. Структура таблицы Организации
Следующим, по логике, должно идти поле с фамилией, именем и отче ством
человека, которого следует позвать к телефону. Длина этого поля цоджне быть
достаточно большой (50 символов). Каких-либо дополнительных свойств давать
полю не обязательно.
После этого следует предусмотреть поле, в которое оператор запишет резуль-
тат переговоров. Оно тоже должно быть достаточно длинным.
Поле Адрес создается на тот случай, если потребуется сохранить адрес органи-
зации. Я рекомендую во всех случаях, когда дело касается каких-либо координат
(почтовых адресов, адресов сайтов, адресов электронной почты, номеров факсов
и т. д.), создавать для них отдельные поля. Это как раз тот случай, когда отдание
базы данных полностью оправдано.
На всякий случай предусмотрим и поле большого объема (типа МЕМО).
Не будем оригинальными и назовем его Примечание.
На этом создание таблицы заканчивается, можно юреключатьс! в режим про-
смотра данных (команда Режим таблицы) и заполнять таблицу данными.
3-870
66
Hiai з
3.3. Ввод данных в таблицу
Ввод данных - достаточно простой процесс, но существуют некоторые осо-
бенности, которые можно отразить в руководстве пользователя, если такое руко-
водство будет создаваться.
Например, если при вводе в поле Телефон данные будут товторены то про-
грамма выведет предупреждающее сообщение (рис. 3.2).
Microsoft ffi< Access _ и!
не были успешно Ошйхсй значении в индексе,
\ ключевых поля или • Изнежите данное в попе ялп поля , содврчмии*
* Д повторяющей удалите о ще или гер .зе.уелитв его, чтобы
разрешить, повторяющиеся значения, и повторите попытку.
j. " I [ Справка
Рис. 3.2. Предупреждени о недопустимости ввода повторяющихся значений
Оператор, который вводит данные, должен знать, что в этом случае надо закрыть
это окно и сразу исправить значение поля. В противном случае Access не отступится
и будет «бомбардировать» пользователя предупреждающими сообщениями.
То, что для поля Название был предусмотрен специальный формат, отражается
на работе таблицы. Дело в том, что формат влияет только на визуальное пред-
ставление данных, не затрагивая самих данных. Так, в нашем случае не будет вы-
полняться физическое переформатирование данных. Перевод всех букв в верхний
регистр будет выполняться только дня вывода на экран. Когда оператор /станав-
ливает курсор в одной из ячеек поля Название, буквы предстают в том формате,
как были введены.
К таблице можно применить команду Формат Шрифт. Для всей таблицы
можно изменить шрифт, его размер и цвет. На функционировании базы данных
это никак не сказывается.
Для вставки новой записи служит соответствующая кнопка, команда в глав-
ном меню или комбинация клавиш Ctrl и «плюс». Новая запись всегда вставляет-
ся в конец таблицы. Но если пользователь видит последнюю строку таблицы, то
ему нет необходимости создавать новую запись, так как это делается автоматиче-
ски. Надо просто начать ввод новых данных.
Информация в таблице сохраняется программой автоматически, хотя в Access
существует специальная кнопка и команда Сохранить запись. Если оператор
хочет ненадолго отойти от рабочего места, достаточно щелкнуть кнопку Сохра-
нить и свернуть (или закрыть) открытую таблицу.
Пример простейшей базыданных 67
Для удаления записи существует специальная команда. Можно также удалить
несколько смежных записей, если выделить их одновременно. Для этого надо
провести мышью по областям выделения записей или щелкнуть первую запись
из числа удаляемых, а потом, при нажатой клавише Shift, последнюю. В отличие
от многих программ, Access не поддерживает выделение несмежных записей при
помощи клавиши Ctrl. Для сравнения: Ехсе позволяет выделять несмежные
строки таблицы, если щелкать на их заголовках, удерживая клавишу Ctrl.
Перед удалением записей Access выводит предупреждающее сообщение, по-
казанное на рис. 3.3. Обратите внимание, что отменить удаление записей невоз-
можно.
W.kfcscjf Office Access
Предприк»1ает1 i попытка удалить .ледунмцее число ыписей: 1.
t \ Дпя удаления записей наймите кнопку "Да". Стмена изменений будет
— J невозможна.
Удалить записи5
L „’.aL-Zj I _ |
Рис. 3.3. Окно для разрешения удалени записей
Когда объем вводимых данных не очень большой, для работы с таблицей дос-
таточно мыши. Но когда текста много, сэкономить время позволяют «горячие
клавиши». Иногда проще держать в памяти нужную комбинацию и исполыовать
ее, чем выполнять лишние движения мышью. Кроме того, это позволяет работать
двумя руками: левая нажимает клавиши, правая на мыши.
Для перемещения внутри таблицы пригодны такие «горячие клавиши»:
Tab Shift+Tab) - переход и выделение следующего (предыдущего) поля;
Home 'Ctrl+Home — перемещение в начало поля;
End (Ctrl+End) - перемещение в конец поля;
F5 - переход в поле номера записи.
Для редактирования данных в ячейках таблицы пригодны такие сочетания
клавиш:
Shift+F2 - открытие окна для ввода данных в поле (если поле целиком не вид-
но на экране);
Ctrl+йстрелк; влево» и ClrH«crpe;iKE вправо» - переход на одно слово влево
и вправо соответственно;
Shift+Home - выделение текста от позиции курсора до начала поля;
з
68
Гла1 3
Shift^End - выделение текста от позиции курсора до конца поля;
Ctrl+C - копирование выделенного фрагмента в буфер обмена;
Ctrl—X - удаление выделенного фрагмента в буфер обмена;
Ctrl-V - вставка содержимого буфера обмена в позицию курсора;
Backspace - удаление выделенного фрагмента или символа слева от позиции
курсора;
Delete - удаление выделенного фрагмента или символа справа от позиции
курсора.
Отмена выполненных операций производится следующим образом:
Ctrl+Z - отмена последней операции;
Esc - отмена изменения текущего поля.
Если выделена часть данных, можно использовать следующие комбинации
клавиш:
51пй+«клавшш со стрелкой» - смещение границы выделения;
Ctrl+Shift+«стрелка влево» - выделение или снятие выделения с одного слова
слева;
Ctrl-l Shift+«cTpejiKa вправо» - выделение или снятие выделения с одного сло-
ва справа.
Клавиша F2 используется для выделения поля и снятия выделения. Если поле
выделено, то одна из клавиш со стрелками позволяет переместиться на сосед-
нее поле и выделить его.
Комбинации клавиш Ctrl+A (Ф) или Ctrl+Shift+n робел позволяют выделить
всю таблицу.
Клавиша F8 позволяет переключиться в так называемый режим выделения.
В этом случае выбор выделенных ячеек осуществляется с помощью шавиш со
стрелками. Так удобно выбирать прямоугольные блоки ячеек. Отмена режима
выделения осуществляется при помощи клавиши Esc.
Для смещения записей «на один экран» вниз или вверх используются клавиши
Page Down или Page Up соответственно. Эти функциональные клавиши рабо-
тают так во всех программах. Но в Access их можно использовать вместе
с клавишей Ctrl, если таблица достаточно широкая и не помещается на экране.
Комбинации клавиш 2trl+Pagi Down и Ctrl+Page Up позволяют сдвигать таб-
лицу «на один экран» вправо и влево соответственно.
Пример простейшей базы данных
69
Для управления размерами окна используется комбинация клавиш CtrHF8.
В этом случае границы окна можно передвигать с помощью клавиш со стрел-
ками. Для выхода из этого режима служит клавиша Esc.
Есть несколько полезных команд для ввода новых данных. Единственное не-
удобство заключается в том, что должен быть включен английский регистр;
Ctrl-i «точка с запятой» - вставка текущей даты;
Ctrl+Shift+«TO4Ka с запятой» - вставка текущего времени;
Ctrl Alt+пробел - вставка в поле значения по умолчанию;
С!г1+«апостроф» - вставка в ячейку значения этого поля в предыдущей записи.
Могут пригодиться и такие команды:
Ctrl ’ «плюс» - добавление новой записи;
Сп1+«минус» - удаление текущей записи;
Sliift+Enter- сохранение изменений текущей записи;
Е1робел - переключение состояния флажка или переключателя:
Ctrl+Enter - вставка новой строки;
F9 - пересчет вычисляемых полей в активном окне.
Если в процессе работы в макет таблицы были внесены изменения (например,
изменена ширина столбца), то при закрытии таблицы программа выводит на
экран сообщение с предложением сохранить изменения макета (рис. 3.4).
Microsoft Office Access
I
T Сохранить изменения макет, пли структуры бъекта ‘‘табгмгы 'Организации'"7
Да | [ Нет | | Отмена_______J _|
Рис. 3.4. Окно для сохранения макета таблицы
3.4. Быстрое создание формы
Е1ример готовой таблицы показан на рис. 3.5. Поскольку в ней имеются до-
вольно длинные текстовые поля и поле МЕМО, желательно создать форму. Мы
сделаем это самым простым способом - при помощи мастера - и выберем пара-
метры по умолчанию-
70
Глава 3
_j Op г ан им ни и : таблица
si Телефон ОК Название Результат
1 11-22-33 Я ТИП-ГОП ЕСТЬ
1 2 44-555-666 0 БУТИК "SECOND AND" Отослал факс
3 111-222-333 D СЕВЕРНАЯ БИРЖА ДУМАЮТ
4 и РУССКОЕ ДЕЛО НЕ ХОТЯТ
[Ti 5 I D ФКСПРЕС ДИАГНОЗ см примечание
L 6 D РОСБУМТРАНСЛЕС НЕ ХОТЯТ
7 D ФЕМИДА-СЕРВИС НЕ ХОТЯТ
8 D KATYA8 KOL060K ЕСТЬ
9 D СКУЧНИСТЫ СКУЧАЮТ
I 10 ] КРУТЫЕ ИНТЕРНЕТЧИКИ прайс no e-mail
13 □ КАРАСИК это сами продают
I 14 □ ЕЕЕ ЕСТЬ
t 15 D СМИТ И ИВАНОВ ДУМАЮТ г
г 20 D ШАРИКОВ И КОМПАНИЯ II
г 21 D КМЫБ
22 D ХАХАНЬКО звонить 1Вмая
23 п АРЕНДА
З&тись-- | И | < 1 Г 5 ► Н >*] га зг < । >
.’ — — -- . ! .я.-—-т~-ч. ♦ ; —
Рис. 3.5. Таблица базы данных (указатель мыши в виде крестика позволяет выделить ячейку)
На вкладке Формы выберем команду Создание формы при помощи мас-
тера. На первом шаге (рис. 3.6} надо выбрать все поля с помощью кнопки с двой-
ной стрелкой. Даже если какое-нибудь поле окажется ненужным, его нетрудно
будет удалить.
Соэданме форм
телицы к запросы
Таблица: Организации
Ддстугнь - поля:
ЁЯНМНММ
елефон
Выберите гог я для форньр.
Доп,-с^»тсй выбср иесхолс ких таблиц цгц «тросов
м
ь^манньн- гъ ля;
Название
ФИО
Результат
Адрес
ПримЕчанне
Рис. 3.6. Первый шаг мастера форм
Пример простейшей базыданных
Второй шаг мастера - самый ответственный - позволяет выбрать вид формы
(рис. 3.7). В нашем случае целесообразно использовать вариант «выровненный».
В этом случае поля будут размещены на поле формы в оответствии с их реаль-
ными размерами. Это удобно как для 1росмотра так и для ввода аннык но мы
увидим только одну запись.
форм
Отмена | | <~Нзад^ ’Г ( Готова
Рис. 3.7. Второй шаг мастера форм
Теперь можно нажать кнопку Готово. Последующие шаги мастера мы не бу-
дем использовать, потому что ничего принципиально важного они не содержат.
Программа создаст форму с именем организации, потому что так называется ис-
ходная таблица. Форма изображена на рис. 3.8. Как видим, работать с полем
МЕМО в такой форме удобнее. Если же размеры полей не соответствуют требуе-
мым, форму легко доработать в режиме конструктора.
Организации
Ti М'ОН
111-22-33
ФИО Результат
ЕСТЬ
Примечание
СК
В тип-топ
/адрес
) Запись? I \ 1 Г к [ га 32
Рис. 3.8. Готовая форма
72 Глава 3
3.5. Работа с базой данных
Работать можно как с исходной таблицей, так и с формой. Конечно, с формой
работать удобнее. На панели инструментов имеется кнопка-список Вид, которая
позволяет при необходимости выполнить переключение в режим таблицы - по-
лучается такая же таблица, как и была в начале. В любом случае существует ряд
инструментов, которые можно использовать пользователю.
Команда Автонабор
Если в базу данных внесены телефонные номера, а сама база предназначена
для обзвона организаций, то весьма полезной может оказаться команда для авто-
матического набора номера. Для того чтобы воспользоваться этой возможностью,
компьютер должен быть оборудован модемом, подключенным к телефонной ли-
нии. Если модем имеет голосовые функции (voice modem), то к нему можно под-
ключить арнитуру (наушники с микрофоном), чтобы оператор мог работать
комфортно. Это совсем несложно, и рабочее место можно организовать не хуже,
чем на телефонных или лейджинговы' станциях.
Для того чтобы программа набрала номер, достаточно выделить номер
в ченке таблицы и нажать кнопку Автонабор. Access выведет окно, изобра-
женное на рис. 3.9. В этом окне надо нажать кнопку ОК. Обратите внимание на
кнопку Настройка. Она потребуется системному администратору, чтобы на-
строить параметры набора номера. После этого можно начинать работу, ради
которой создавалась база данных: «Алло, это фирма такая-то?.,.»
Автонабор
+я*?р t ' *'
L '-*• | । Hactoo#.* ।
Рис. 3.9. Окно для набора телефонного номера
Сортировка
Для выполнения сортировки существуют две команды: Сортировка по
возрастанию и Сортировка по убыванию. Когда надо найти название фирмы,
а в таблице сотни или тысячи записей, то проще отсортировать названия и искать
среди тех, что начинаются на одну букву. Сортировка облегчает поиск данных
Пример простейшее базыданных
73
в таблицах. а также бывает полезной при печати. Перед тем как их использовать,
необходимо установить курсор на соответствующее поле таблицы или формы.
Сортировке можно подвергать текстовые, числовые поля и поля «Дата/время».
В отличие от других программ (Excel), в таблице меняются местами только стро-
ки целиком. Это не позволяет испортить данные в таблице, о i сортировав только
ее часть. При закрытии базы данных программа автоматически запоминает но-
вый порядок следования записей. Для восстановления исходного порядка строк
(записей) необходимо выполнить сортировку по зозрастаник поля счетчика с по-
следовательной нумерацией.
Использование фильтров
Фильтр - это способ поиска и отбора необходимых записей. Существует не-
сколькоразновидностей фильтров.
1. Фильтр «по выделенному».
2. Обычный фильтр (или поле «Фильтр для»).
3. Расширенный фильтр.
Как уже упоминалось, контекстные меню, связанные с заголовком окна и с ячей-
ками таблицы, имеют несколько команд для выполнения фильтрации данных в таб-
лице (рис. 2.20).
Первая из них - Фильтр по выделенному - обеспечивает запуск самого про-
стого фильтра, который только можно вообразить. Критерием фильтрации слу-
жит одна или несколько выделенных ячеек в таблице или запросе. Или просто та
ячейка, в которой находится курсор. Или только одно слово в ячейке. Представим
себе, к примеру, что оператору надо найти фирму. Он помнит, что в ее названии
присутствует слово «Media», но как точно фирма называется - <• Media Fn.ertain-
ment», «Media International», «Integrated Media» или как-то еще, - оператор не
помнит. В этом случае самое разумное - создать новую запись и набрать в соот-
ветствующем поле слово «Media», выделить его и применить команду Фильтр
по выделенному. Если в таблице будут записи, содержащие искомое слово, то
только они останутся доступными, и нужную запись нетрудно будет найти. Для
отключения фильтра используется команда (кнопка) Удалить фильтр.
74
Глав.: 3
Фильтрацию можно осуществлять и по блоку выделенных ячеек. При этом он не
обя'Жв ьно должен находиться в пределах одного поля, но может включать не-
сколько смежных полей - в этом случае фильтрация будет проводиться к соответ-
ствии со значениями этих полей. Необходимо только, чтобы типы данных в полях
совпадали.
Команда Исключить выделенное также обеспечивает фильтрацию записей,
но в данном случае критерий фильтрации обратный - скрываются записи, значе-
ния полей которых совпадают со значениями выделенных полей (ячеек).
Команда Удалить фильтр не удаляет сам использованный критерий отбора из па-
мяти, как можно подумать, а только отменяет действие фильтра, то есть все записи
становятся доступными. Параметры фильтрации сохраняются, и снова включить ре-
жим фильтрации можно командой 1рименпть фильтр. На панели инструментов по
умолчанию и в соответствующих режимах выводится кнопка которая меняет свое
имя в зависимости ситуации: «Применение фильтра» или «Удалить фильтр».
Команда Изменить фильтр позволяет отредактировать условие отбора запи-
сей в окне обычного фильтра. По этой команде открывается окно, в котором кри-
терий фильтрации по каждому полю представлен в виде списка. Его можно
открыть и изменить набор значений полей или создать дополнительные списки
для тех полей, которые первоначально не использовались для задания критерия
фильтрации. Пример такого окна показан на рис, 3.10. Выражение, введенное для
поля Телефон, позволяет отобрать все строки аблицы. где в номере телефона при-
сутствует хотя бы одна единица. Это выражение сформировано автоматически
при помощи фильтра «по выделенному л (была выделена цифра 1). Критерий
фильтрации можно определить и для любого другого поля, использовав список.
Например, список для поля Название содержит значения всех названий организа-
ций, записанных в исходную таблицу. Вкладки Или позволяют создавать допол-
нительные критерии. Объединение по ИЛИ в данном случае означает, что после
фильтрации будут показаны совместно все записи, которые были отобраны по
критериям на каждой из вкладок.
Рис. 3.10. Окно редактирования фильтра
Пример простейшей базыданных
75
В некоторых случаях невозможно реализовать преимущества фильтра по выде-
ленному или обычного фильтра. Допустим, нам надо выполнить фильтрацию по
номерам записей (значению счетчика). Фильтр по выделенному нам не поможет:
если значение кода можно выделить мышью, то искать его уже не надо. Преимуще-
ство обычного фильтра заключается в возможности использовать список значений
поля. Но для поля счетчика список получится таким же длинным, как и таблица:
повторяющихся значений поля нет. В подобной ситуации разумнее всего испо 1ьзо-
вать поле «Фильтр для» в контекстном меню, потому что это не требует сложных
манипуляций с командами и окнами программы. Достаточно установить курсор на
нужное поле и нажать правую кнопку мыши. В поле Фильтр для надо ввести нуж-
ное значение и нажать клавишу Enter. После этого фильтр сразу же приводится
в действие. Отменить фильтрацию можно, как и в предыдущих случаях, командой
Удалить фильтр.
Б отличие от фильтра «по выделенному», «фильтр для» не может
работать по фрагменту поля и требует ввода полного значения.
Например, полного названия организации.
Расширенный фильтр запускается командой Записи =: Фильтр =5 Расширен-
ный фильтр. Его окно показано на рис. 3.11 В данном случае для фильтрации
была автоматически выбрана единственная таблица базы данных. Это окно очень
похоже на окно запроса в режиме конструктора (см. главу 4). Действительно,
у запроса и расширенного фильтра очень много общего. Условие отбора в этом
фильтре задается точно так же, как и в запросе: при помощи бланка — специаль-
ной таблицы. Как и в окне редактирования фильтра, здесь можно задать критерии
для нескольких полей. Например, можно отменить режим сортировки по шаче-
ниям счетчика и отсортировать таблицу по полю Название. Режим сортировь и так-
же может быть задан в бланке: путем выбора из списка. Преимущество
расширенного фильтра - наглядность.
Расширенные фильтры похожи на запросы, но между ними есть определенная
разница. Фильтр - это свойство объекта базы данных, которое может храниться
в памяти компьютера. Запрос - это объект базы данных, который создается с ис-
пользованием таблиц и других запросов. Он может служить, в свою очередь осно-
вой для создания форм или отчетов. Наконец, запрос формулируется при помощи
языка программирования (SQL), а это предполагает высокий уровень тандартиза-
76
Глава 3
Организлц,инФильтр1 : фильтр
4
Телефон
]СК
Рис. 1.11. Окно расширенного фильтра
циг и классические подходы к использованию приложения. Расширенный фильтр
представляет собой более «легковесную» конструкцию. Например, в бланке
фильтра отсутствует строка «Вывод на экран», которая есть в бланке запроса, и мы
не можем скрывать поля таким способом.
Контекстное меню расширенного фильтра содержит команды, позво-
ляющие преобразовывать расширенные фильтры в запросы и наоборот.
Использование фильтра в сочетании с печатью хороший способ для пред-
ставления результатов своей работы. Например, в нашем примере оператор после
обзвона всех фирм может задать соответствующее условие фильтрации по полю
Результат, чтобы отобрать только те организации, которые заинтересовались ком-
мерческим предложением, и вывести результаты на печать.
Печать объекта базы данных
Длг создания распечатки в Access используются три основных инструмента,
как и в других программах Office Параметры страницы, Предварительный
просмотр и Печать. Назначение первой и последней команд хорошо известно
пользователям, с помощью этих команд выбираются параметры распечатки.
Вторая команда заслуживает некоторого обсуждения. Основная задача предвари-
тельного просмотра - выяснить, как будут располагаться данные на листе бумаги.
Поэтому возникает необходимость посмотреть на распечатку в разных масшта-
бах. Мелкий масштаб покажет, насколько плотно заполняются листы, где распо-
ложены заголовки (нехорошо, если они будут в нижней части страницы) и т. д.
Пример простейшей базыданных ,77
Крупный масштаб позволяет проверить, не выходят ли данные за край листа.
Программа не выводит никаких предупреждающих сообщений, просто обрезает
данные. В этом плане достаточно интересным представляется опция масштаба
Окно. Размер страницы автоматически изменяется в зависимости от размера
окна так, чтобы пользователь видел страницу целиком. Меняя размеры окна
(перетаскивая край), можно быстро просмотреть страницу в разных масштабах.
Другой особенностью печати является распечатка формы. Последняя, как из-
вестно, может выводиться на экран в двух режимах: в режиме формы и в таб-
личном представлении. Распечатку тоже можно сделать в двух форматах На
рис. 3.12 показаны оба варианта. Вид распечатки зависит оттого, в каком режиме
находится форма перед использованием команд печати.
_Д Организации
it__ 1 Телефон 1 ' | Назиин*
1 и 22-33 И ТИП-ТОП
2 —Ц-566-036 Б БУТИК "SECOND НАНО"
СЕВЕРНАЯ £» жд
РУССКОЕДЕПО
экс ПРЕСС ДИАГНОЗ
РОСБУМТРАНсЯЕС
ФЕМИДАСЕРВИС
KATYA S kDLGBQK
СКУМНИЕТЫ
Страница:
.Оргаин1гцнн
Рис. 3.12. Вариант! предварительного просмотра формы перед печатью
Компьютеризация данных (пример)
Очень часто бывает - работает коммерческая фирма или индивидуальный
предприниматель, и со временем накапливается большое количество финансовых
документов. Когда груда бумаг достигает внушительных размеров, возникает
идея «ввести все это в компьютер». Действительно, такая работа может оказаться
полезной: в бумагах находятся данные о поставщиках и покупателях, о продан-
ных товарах. Провести анализ проделанной работы невозможно, не внеся все
данные в компьютер. Даже при успешном ведении бизнеса остаются открытыми
самые простые вопросы, например: какие были обороты в позапрошлом году?
как изменяются объемы продаж во времени и по различным товарам? кто самый
активный поставщик? и т. д. Кстати, учебная базаданных «Борей», неоднократно
упоминавшаяся на страницах этой книги, посвящена именно такой проблеме.
В этой главе мы рассмотрим создание такой базы данных «с нуля» (назовем* ее
файл telo.mdb).
4.1. Организация ввода данных. Первая таблица
Итак, мы берем, в руки документ, который является типичным образцом - но-
сителем интересующей нас информации. Первым делом надо организовать зане-
сение всех данных в файл базы данных. Скорее всего, такую работу будет
выполнять оператор, так что надо будет подготовить для него «поле деятельно-
сти»: таблицы и формы.
Допустим, основной объем необходимой информации сосредоточен в наклад-
ных (рис. 4.1) по которым в нашу организацию поставлялись товары. При внима-
тельном рассмотрении документа легко понять, что. основная информация
сосредоточена в таблице, из которой и состоит документ. Таблица Access должна
повторять структуру этого бланка: в ней должны быть предусмотрены соответст-
вующие столбцы. В процессе набора данных формат придется изменять: напри-
мер, в накладных отделяют «рубли» от «копеек» дефисами, а в базе данных
Комп т р данных (пример/
79
требуется использовал в качестве разделителя запятую. Но есть и дополнитель-
ные данные, которые не впишутся в структуру таблицы: номер накладной, ин-
формация о поставщике и потребителе, дата. Значит, потребуются другие
таблицы.
Рис. 4.1. Типичная накладная
Для хранения данных о проданных товарах можно создать таблицу (назовем ее
ТаблицаТовары) и сразу, не дожидаясь завершения проекта базы данных,
поручить оператору ввод данных, чтобы не терять время. Причем делать ггс мож-
но, используя отдельный файл. В разрабатываемой базе данных надо создать табли-
цу с таким же именем и структурой и заполнить ее несколькими записями для
тестирования. Потом настоящую таблицу можно будет скопировать в разработан-
ную базу данных. Возможно, что в процессе работы над проектом потребуется
изменить структуру таблицы. Эти изменения надо тщательно задокументировать,
а потом так же преобразовать полученную от оператора таблицу. Как правило, по-
добные преобразования происходят достаточно легко и не требуют набирать дан-
ные заново. Действительно, текстовые данные всегда останутся данными,
числовые числовыми. Даты легко конвертируютс: в тестовый формат и обратно.
Обычно могут измениться имена полей, ихдлины, подписи тип. Могут появиться
поля подстановки, новые поля, вычисляемые поля. Но все это не означает, что уже
80
Глава4
введенные данные не подойдут. Их можно будет конвертировать в нужный формат.
Единственное, что нужно обдумать и предусмотреть заранее, - наличие полей-
счетчиков, индексных полей, полей с запретом дублирования данных.
В нашем примере в таблице Таблица Говарь можно предусмотреть следующие
поля:
Имя поля Формат поля
КодНаименования Счетчик, последовательная нумерация, первичный ключ
ЦомерНакладной Числовое [длинное целое)
НомерПоПорядку Числовое целое), номер товара в накладной
Наименование Текстовое, 30 ;имволов
ЕдИзм Текстовое, 6 символов. поле подстановки с названиям/, единиц измерения
Количество Числовое (длинное целое)
Цена Тип поля «Денежный», формат толя «Денежный»
Поле ЕдИзм надо оформить следующим образом:
1. На бланке таблицы выберите тип данных Мастер подстановки,
2. На первом шаге мастера выберите вариант «Будет введен фиксированный на-
бор значений».
3. На втором шаге мастера определите, что будет использован один столбец спи-
ска. и введите столбце возможные и необходимые значения: шт., иц., л, кг. т,
у пак., компл. ит. д.
4. На третьем шаге мастера задайте подпись «ЕдИзм».
Получилось поле подстановки (список) с фиксированным набором значений.
Если в дальнейшем понадобиться изменить состав списка, надо открыть вкладку
Подстановка этого поля и отредактировать строку Источник строк: там воз-
можные значения просто перечислены мере- запятую.
Таблица получилась очень простая, все ее столбцы очевидны. Но не хватает
поля для вычисления суммы. Для этого надо построить запрос.
4.2. Запрос с вычисляемым полем
Процесс создания запроса можно разбить на шаги.
1- На вкладке Запросы щелкнем два раза значок Создание запроса в режиме
конструктора.
Компьютеризация энных (пример)
1. В окне Добавление таблицы выберем таблицу ГаблицаТовары
3. На бланке запроса появится наша таблица. В первой колонке бланка надо от-
крыть список «Поле» и выбрать опцию Таблица. Товары, *. Звездочка обозначает
все поля таблицы. Нам надо выбрать все поля, так как заранее неизвестно, ка-
кие потребуются: например, по значению поля счетчика легко найти опреде-
ленную запись е таблице, но неизвестно, захотят ли работники работать с без-
ликими числами.
4. Во втором столбце бланка в строке «Поле» введем выражение:
Сумма: [Цена] * [Количество] ;
5. Сохраним запрос, дав ему имя ЗапросТовары
В выражении слово «Сумма» определяет заголовок вычисляемого столона.
Двоеточие и квадратные скобки - необходимые элементы синтаксиса, Это выра-
жение можно было бы создать и с помощью построителя выражений (команда
Построить в контекстном меню). Бланк готового запроса показан на рис. 4.2.
1 Талреп Товары : допрос на выборку
Код/ te+tetraai
НомерПыПорядку
Наименование
Рис. 4.2. Бланк прос; с ычисляечы' полем
В режиме просмотра запрос выглядит, как и таблица, только добавляется новое
поле. Данные можно вводить и в таблицу, но можно создать и форму для ввода.
82
Глава 4
4.3. Создание второй таблицы
Для оставшейся в накладной информации надо создать отдельную таблицу.
Назовем ее ТаблицаНакладпые В ней будут такие поля:
Имя поля Формат поля
НомерНакладной Числовое (длинное >.елое), первичный ключ
Дата Дата, средний формат даты
Филиал Текстовое, 3( символов, поле подстановки
Поставщик Текстовое, 30 имволов
Поскольку филиалы своей организации известны, мы можем создать поле под-
становки, чтобы оператор выбирал название филиала из списка. На втором шаге
мастера подстановки (рис. 4.3) надо тоже ввести все необходимые названия. Поле
создается также, как и для первой таблицы.
Создание подстанаинн
Выб&рнте катсчрыебудетсом _*-я» ^огбвц подстановки.Введите
столбцов списка и значения ы гсшнда ячейки,
ГУтетащкте праву.-1 границу столб «а на i/ужнуто изрину или ДЕ<вды
щелкните ее для автенлтиче стподбора илфины.
Рис. 4.3. На втором таге мастера подстановок надо ввести
набор опустимь значений поля
Теоретически так же надо поступить и с названиями поставщиков. В продвину-
том проекте названия поставщиков должны быть размещены в отдельной таблице
так, чтобы названия организаций-поставщиков не повторялись (в поле с названием
можно с помощью индексации запретить повторение значений). Такая таблица мог-
ла бы служить источником данных для поля подстановки в ТаблицаНакладные,
Но, во-первых, список поставщиков нам пока неизвестен, а во-вторых, это услож-
Компьютеризация данных (пример} 83
нило бы пример. Проще собрать все данные в таблицу а потом проделать необходи-
мую работу по формированию такого списка. Если же вводить каждый раз название
поставщика заново, может получиться так, что одно название будет записано по-
разному, и это создаст потом проблемы при сортировке, фильтрации и анализе дан-
ных. На данном этапе работы приходится полагаться на внимательность и добросо-
вестность операторов. На рис. 4.4 показаны созданные запрос и таблица.
ЗапросТовары : лапрос на выборку
КодНзиыеноеания НомерНак-паднсм ЬоыврПь Поряди] Наименование ;1 Едр'зм | Количество f Цена
! Илюшка шт
1 Хлеб
2 Батон "Нарезной" шт
3 Кока-Кала
I.
ЦД:_____I
6С 00р.'
16С00Р
ЭТ.ООр.
400 ООр
20
40 -I ДОр
40 5.00р
2C.J Ьир
О |ЩПр
.1 ТаблицаНакладные : таблица
1
2
3
Дата ]____________* Филиал
10-окт-2003 Ларек 1
10-с кт-2003 Филиал I (на Пятницкой)
1 т-Ш 3 I
[ ______Поставщик
v | ЗАО "Киией"
ООО "Микс
ЗАО “Тертон'
+ _ [
- I * I W г a 3
Рис. 4.4. Запрос и таблица для хранения информации из накладных
4.4. Связывание таблиц
Информация из одного документа будет распределяться по двум таблицам,
поэтому их надо связать, чтобы получить возможность построить форму для С вода.
Нажмем кнопку Схема данных на главной панели инструментов. В открыв-
шемся окне Добавление таблицы щелкнем фон окна правой кнопкой мыши и при
помощи команды Добавить таблицу выберем объекты ТаблицаНакладные
и ЗяиросТовары Для связывания можно использовать как таблицы, так и запросы.
Панели указанных объектов появятся на схеме данных. Теперь надо перетащить поле
НомерНакладнОк из ТаблицаНакладные на одноименное поле в ЗапросТовары.
Указатель мыши в конце перетаскивания должен принять вид прямоугольника.
После этого автоматически откроется окно Изменение связей, в котором
можно выбрать параметры связи. Мы можем нажать кнопку Объединение и,
прочитав формулировки объединения, выбрать второй вариант (всего их три).
Наш выглядит так: «Объединение ВСЕХ записей из "ТаблицаНакладные" и толь-
84
Глава 4
ко тех записей из "ЗапросТовары", в которых связанные поля совпадают». Здесь,
по сути, решается вопрос, как поступить с записями, которые не попадают под
условие юъединения (например, если в одной таблице некоторое значение поля
присутствует, а в другой - нет). Тут надо делать выбор, исходя из конкретной
задачи. Будем считать, что ТаблицаНакладные является в данном случае «глав-
ной» таблицей. Но, строго говоря, в нашем примере этот выбор не очень кри-
тичен: на данном этапе нам бы подошел любой вариант. В результате схема
данных приобретает вид, показанный на рис. 4.5.
Схема данных
К о дНаиченсикь
НонЕрНакладном
ТорЯдку
!Нзиг1вноваиие
ЕдИзп
'Когычестео
'Цене
СуМ43
I киерНжладиэн
ДеГе
9МЛМ0П
Поставщик
Рис. 4.5. На схеме данных показана связь между аблннсй и запросом
На схеме данных чоэш при помощи мыши установить размеры объ-
ектов так, чтобы все названия полей были полностью видны.
4.5. Быстрое создание формы
Формам в этой книге посвящена отдельная глава. Здесь мы создадим форму
при помощи самых простых средств. Единственное, что надо учитывать в данном
случае: поля в форме должны располагаться так же, как и ячейки в исходном до-
кументе, чтобы оператору было удобно набирать данные. В накладной данные
находятся в таблице, так что и форма у нас получится табличная.
На вкладке Формы выберем вариант Создание формы при помощи мастера.
Выберем все поля из ТаблицаНакладные.
На следующем шаге мастера выберем вариант «В один столбец». Затем вы-
берем стиль оформления «Стандартный», а на последнем шаге дадим имя форме:
ФормаНякладпыс.
Компьютеризация данных (пример)
85
Теперь откроем форму в режиме конструктора. Горизонтальную линейку при-
мечания надо сдвинуть вниз и увеличн п размер формы (перетаскивая мышью ее
край). На панели инструментов Панель элементов должна быть нажата кнопка
Мастера. Нажмем кнопку Подчиненная форма/отчет и нарисуем в нижнек час-
ти формы прямоугольник. Запустится мастер подчиненных форм. Первый его
шаг пропускаем, а на втором все поля из ЗапросТовары, кроме поля
КодНаименования. В форме будут только те поля, которые имеются и в накладной.
На следующем шаге выбираем тип связи: «"ЗапросТовары' для каждой записи
"ТаблпцаНакладные"». Этот вариант программа должна найти сама, мы лишь
подтверждаем его. На последнеь шаге мастера можно оставить имя подчиненной
формы, которое выберет мастер.
Теперь можно открыть форму в режиме просмотра. Скорее всего, для подчи-
ненной формы не хватит места. Тогда надо снова включить режим конструктора
и изменить размеры обеих форм. По умолчанию подчиненная форма выводится
в табличном виде. Если это не так, надо изменить ее свойство Режим по
умолчанию (на макете подчиненной формы надо щелкнуть правой кнопкой
мыши квадратик на пересечении линеек и из контекстного меню выбрать коман-
ду Свойства).
ФормаН ।ладные
Dfc
НомерНакладной
Дета 14-ОКТ-20С
Филиал Ларек 1
.1
годч иршач Форма ЗапросТовары
НамерНавд; НомерПоПйряд|^у | ЁдИзм | Количества I Ц&на_ [ Сумма'
7 4 Ру пет шт I * 12 Hip 120 ЛОр
Запищ»: | Н | I Г * Л Н из 3
!Рис. 4.Е Форма для ввода данных из иккладнон
86
Глава4
Раскрыв форму Д'» просмотра (рис. 4.6), можно убедиться, что при вводе но-
мера накладной в верхнее поле в подчиненной форме такие же номера появляются
автоматически: оператору не надо вводить это число заново. Границы столбцов
подчиненной формыможно сдвигать мышью. Возможно, не совсемудачно наличие
двух наборов кнопок для переходов по записям: когда элементов управления слиш-
ком много, пользователь начинает путаться. Кнопки выбора записи для подчинен-
ной формы можно убрать (они не нужны) с помощью свойства Кнопки перехода.
Если все строки подчиненной формы не будут умещаться на экране, автоматически
подключится полоса вертикальной прокрутки.
В таком виде файл базы данных уже можно отдавать оператору для заполнения.
Если надо, чтобы при открытии файла форма запускалась автоматически, надо вы-
брать команду Сервис => Параметры запуска и задать имя формы в строке Имя
формы/страницы.
4.6. Мастер по анализу таблиц
Поскольку в нашей базе данных предусматривается размещение информации
о поставщиках, мы можем попросить предоставить такую информацию. Допустим,
мы получили информацию, которая находится в таблице, показанной на рис. 4.7.
В приведенной таблице могут быть собраны данные из разных подразделений.
Недостатки такой информации сразу бросаются в глаза. Например, в некоторых
записях информация повторяется. Если в таблице находятся десятки и сотни запи-
сей, исправить ошибки довольно сложно.
В Access существует средство для исправления таблиц. Это так называемый
мастер по анализу таблиц. Если вы не знаете, насколько рационально спроектиро-
вана таблица. вы можете прогнать ее через эту программу, и электронный разум вы-
несет свой вердикт. При использовании данного мастера следует иметь в виду, что
пользователь не всегда владеет всей информацией о своих данных. Например, если
таблица большая, то человек просто не в состоянии запомнить всех ее особенно-
стей. Поэтому в диалоге с мастером иногда возникают сложные моменты. Исследу-
ем его работу на нашей небольшой таблице. Не имеет особого значения, какой
смысл вкладывается в текст из таблицы. Иванов, Петров, Сидоров могут иметь от-
ношение к любой сфере бизнеса.
Мы ожидаем, что мастер выдаст рекомендации по улучшению структуры дан-
ных. Для его запуска выбираем Сервис Анализ Таблица.
Компьютеризация данных (пример)
87
ТабчицаПпстАВщикм : таблмшя
Счетчик Т Директор
Телефон
1 Хлебозавод № 2 Остапенко В М 111-222 3333
2 ООО "Микс" Туманов и 222-333-4444
3 ЗАО "Т ьртон Сергеев В П 444-66Б-В880
4 ЗАО "ХлеС” Семенова Т 3 555-999- 212
5 Лрод ктйвая Саза Иванов и 333-777-5555
6 ЗАО "Баранки" Баранов М.М 777-В0В-2222
7 Хлебозавод № 1 НжолаевС К. 333-888-6666
8 ХлеБозаео. № 2 Остапенко В М 111-222-3333
9 ООО "Микс" Туманов 0 С 222 333-4444
I I База В Комаров М С
11 Хле6завод2 Остапенко В.М. 111-222-3333
12 Продуктовая базз Иванов И Й 333-777-55Е5
13 База 6 Комаров М С.
(Счетчик)
_Запись, (Н ц Ji j Г 13 I > Pl из 13
Рис. 4.7. Таблица с информацией о поставщиках
Первые два шага мастера, показанные на рис. 4.8 и 4.9, носят справочный
характер. Из рисунков видно, что программа дает пользователю рекомендации,
с которых был начат этот раздел и которые содержатся в любой книге по СУБД.
Естественно желание все’ разработчиков избежать дублирования данных и све-
сти к минимуму вероятность опечаток при их редактировании. Второй шаг мас-
тера показывает, к чему стремится программа. Предполагается, что разбиение
одной таблицы на несколько позволит усовершенствовать базу данных. На мас-
тера возлагается также задача определить связи между таблицами. Он оставляет
в неприкосновенности исходную таблицу и создает новые для размещения тех же
данных. Разработчик базы данных должен сам впоследствии решить, как ему по-
ступить с таблицами: какие из них стереть, а какие оставить.
Настоящая работа мастера начинается с третьего шага, показанного на
рис. 4.10. Под страницами с пояснениями понимаются два предыдущих шага.
Если флажок сбросить, то при последующих запусках мастера первые два шага
будут пропущены. Данное окно предназначено для выбора таблицы, и мы зы-
берем ТаблицэПоставщпки.
На четвертом шаге (рис. 4.11 j надо ответить на вопрос о том, каким образом
будут распределяться поля по таблицам, если мастер обнаружит, что исходную
таблицу надо разбить. Автоматическое разбиение выполняется, если выбрать оп-
цию «Да, разделение полей выполняется мастером». Но мастер может выдать со-
88
Глава 4
Анализ таблиц
Анаяи зтаблиц:
гостаызвн ^задачи
j и пост ев I
Адрес |
Pasta Ei/tmi s i Vi-a
j-focth di oqnr PAST
Carnarvon Tigc PAVL
Cutback. Laoer ГАЧ
Pavlova PAVL
VegiB-spread PAVL
Kuд1 IuCtbb ] Поставщик
PAST
Pasta Bcz' is iv ( i ьт11от-]г
Pavlova, Ltd, 74 Rose T,
Pavlova, Ltd. 74 f : 5t,
Pavlova, Ltd. »Rcis-St.
P v, Ltd. 74 Rose S1
Опечатка в имени
поставщике-1
Сееденг a
постарщиках
повторяются
Одни и те хе сведения часто
u lji юте в аблицегио /раз.
Повторнаязаписьданнь .может
Привес 1к- гр деленньг ошибкам
Ео первььл. пост -_р данных привод т к
излишне- увеличению их юъена.
pj Покатать пример,
• Lit?, hobtci данных может
вызвать шибки обработка
[**] Показать пример.
Рис. 4.8. Первый шаг мастера анализа таблиц
Анализ таблиц
Анализ таблиц:
решение задачи
Исходная $лнца ’Товары и i юстшшфси' 1
biEifiй табш* а
'IcpapbJ*
Товар | Нод станойла По с
Gnocchi Ji гопг PAST
RmfckAl , , nS5T
Carnarvon Tiga PAVL
Outback Laoer PAVL
Pavlova 11 e •_____________________
fя -стгcat КрдПрст an [kViao^K Адрес
Pasta Buttmi s.r i Gsiscrrun F
PAVL Pavlova Ltd. 74 Rose St
Новая аблица "Поставщики”
Мастер Д'- исходную • чб ииу на
несколько новых, в которых каждое
значение будет храниться только в
одном месте,
.
Tеперь бновление д-знн» в разных
записях вытюлчжтея за один раз.
О Показать пример
Ллпулгячт. работа с ,* «••ин
одновременно из нескольких таблиц.
пример.
[ мтиенв ] [ С Цамд ||
Рис. '.9 Второй шаг мастера ана.ина таблиц
Компьютеризация данных (пример)
89
Анализ таблиц
В каких таблиц.- . есть эля, значении котсрыд
петтсрсют€й итого
Данный мастер t кзделнт немодную таблицу на
несколько свялл-ных Тсбгиц. При этом салч исходная
таблиц । изменена >• будет.
Таблицы:
Таб^цаН а к лэдмые
ТХ'^ЦяЛиСТйьшиь и
ТабпнцаТоварь
1 с
Отнзна | < Далее > |
Рис. 4.10.Третий шаг мастера анализа абции
общение, что разбивать таблицу нет смысла. Но мы видим, что такая
необходимость имеется. Тогда надо выбрать второй вариант: «Нет, разделение
проводится вручную».
Если выбрано разделение таблиц вручную, то на пятом лаге (рис. 4.12) мы
должны создать новую таблицу. В нашем примере повторяющиеся данные нахо-
дятся в поле Поставщик. Это поле надо перетащить на свободное место в окне что-
бы мастер создал еще одну таблицу. Ей надо дать имя в появившемся модальном
окне. Мастер разбил исходную таблицу на две. Теперь каждый объект в ней
встречается только один раз - дублирование данных исключено. В нашем случае
мастер сделал то, что сделал бы и разработчик базы данных. В окне мастера име-
ется также кнопка Советы (с изображением лампочки). Нажав ее, можно по-
лучить некоторые объяснения работы мастера и рекомендации по текущим
действиям.
Мастер связал две таблицы с помощью операции подстановки. Связь между
двумя таблицами носит название «многие-к-одному». Много записей из
Таблица] связаны с одной записью из Таблица!. Графически «много» обознача-
ется символом бесконечности, а «один» - соответствующей цифрой.
ж
Глава 4
Мастер позволяет автоматически разделить поля по,
Тсб.пнцаи. Еослользордться этим средством?
Прмавтогйтнчкксм разделении сохраняется
возможное проверки и вменения состава таблиц.
О .^4, разделен w полей выполняется мастером.
• JHgr, разделение проводится вручную.
- - I
Рис. 4.11. Четвертый шаг маете] анализа таблиц
Анализ таблиц
Какие поля содержат повторы данных ’' следует i ц»нес • в • «эвь таблицы.
Каждая таблица _ злжна содержа данные 5 о диск предмете.
Поли можно перетаскиваю мышью междуч или для оздашя нибьк
таблиц. Допускается переименование эблиц и определение ключевых полей.
ТаСлица!
ItfOteYMMH
(Директор
Очница?
3 IOCTB& ЦЦ №
,2£| Анализ таблиц
Инч таблицы:
вод
jrhe’*5 I [I Дал*е >
Рис. 4.12. Пятый шаг мастера анализа таблиц
Компыотеризацияданны (пример) 91
Шестой шаг мастера (рис. 13) позволяет исправить значения поля, если одни
и те же записи введены немного по-разному. В этом случае новое значение вы-
бирается только из списка, доступного в окне. В нашем примере нужно заменить
«Хлебзаво,! 2» на «Хлебозавод № 2».
Анализ таблиц
Исправление: опечаток: ДЛЯ таблицы ’Таблица2‘.
Обнаружены аапм с очень глхожипи л+зчекиями. Неги записи стносятс . к« дггму предмету.
Знамен -: попей должны точно совпадать, чтобы Н5бв*ать шн .обработки Р-ЭННЫХ.
Намечены следующие исправления. ц: » * енения выберите значение из списка. Спи будут
b выполнены при создании новых' : лиц Чтобы-, тзритъзапис Б еетекущем виде выберитее
= списке "Оставить как есть” или ге^ьте исправлен - пустым.
< Назад
Дален и» |
Рис. 4.13. Шестой шаг мастера анализа таблиц
На рис. 4.14 показан седьмой, последний шаг мастера анализа таблиц. Здесь
можно разрешить создание запроса, заменяющего исходную таблицу, которая будет
переименована, а запрос получит ее имя. В нашем пример таблица получит назва-
ние ТаблицаПоставщики_СТАРАЯ. Если таблица использована в базе данных
(например, для создания формы), то теперь ее заменит запрос, и работа базы дан-
ных не нарушится.
В результате работы мастера мы получили таблицу, изображенную на рис. .15.
В ней название каждой организации-поставщика встречается только один раз.
Такую таблицу можно использовать как справочник названий и связывать
с другими таблицами. В режиме конструктора можно ввести запрет на повторения
значений поля Поставщик - после этого в таблице не появятся одинаковые названия.
92
Глава 4
Анализ таблиц
Укезены все сведения, необходгиьи. ДЛЯ .. тДания связанной*
"30ш 11 с п£*сщьнэ мастера.
После созд*»-»* новых таблиц, мастер • ожет также создать запрос,
которым расширяет всэгю^ности исходной таблицы-
При создании запроса:
. й-ермы и петы, основанные на - годней таблице, будут
работать бе 5 изменений;
- мастер сохрани, запрею под именем исходн). таблицы и
пер саму
Соз дат в мпеос
Да. елует ?Дать запрос
h£T jtnp.х. »дйвят® не ютно.
3 EiL!Bec сгрвеку па работе стсы таблицей запросом?
Рис, 4.14. Седьмой шаг мастера ана таблиц
Таблица?: таблица
___Пэставщи
► Баэг '
* ЗАО "баранки"’
• 'ЗАО "Тертон”
ЗАО 31
♦ ООО "Миге
Пред у кто Eu я база
ебсаЗЕ № 1
+ Хпебпз децц № 2
► И НЦЙ») из б
вались М f
Рис. 4.15. Таблиц- с уникальными
значениями поля Поставщик
Компьютеризацияданных пример) 93
4.7. Анализ данных
После того как данные внесены в таблицы, можно приступать к их анализу.
Одним из самых удобных инструментов является мастер сводных таблиц. С вод-
ная таблица может состоять из трех частей: данных, ci руппнрованньп в столб-
цах, данных, сгруппированных в строках, и собственно тела таблицы. Кроме
этого, в таблице автоматически вычисляются итоговые значения, Результаты ра-
боты мастера целиком зависят от того, что именно выберет пользователь, поэто-
му рассмотрим конкретный пример, разбив его на шаги.
1. Откроем вкладку Формы и щелкнем два раза значок Создание формы
с помощью мастера.
2. На первом шаге мастера выберем таблицу ГаблицаНакладные и ее поля Дата
и Поставщик.
3. На втором шаге мастера выберем опцию «сводная таблица».
4. Два следующих шага мастера не имеют принципиального значения, и на
любом из них можно нажать кнопку Готово.
5. После этого будет открыто окно для формирования сводной таблицы. Эго са-
мый ответственный момент: мастер не может выполнить эту работу автома-
тически. Поскольку мы выбрали поле с датами, у нас есть возможность сгруп-
пировать данные за какой-либо период времени. Допустим, мы хотим по-
лучить сводку по месяцам. Раскроем в маленьком окне список Дата по
месяцам и перетащим слово Месяцы в верхнюю зону (рис. 4.16).
• Табл ицаНакладные
' Перетащите сюда поля фильтра
Месяцы *
Эокт ш ноя Общие итоги
Пвретащш сюда л с л я итоге в ил деталей
Перетащи- Б таблицу
у ТжэлииаНакпадные
*
а Дото
+ Да-а по--эдеп*!
- [5] Дата по месяцам
S г L fib
[~~1 Кварталы
|1Е1
ШДни
[3 Часы
| g| Минуть
Q Секунды
< Ш Поставщик
Добавить в троки
|Рис. 4.16. Заннони сводной таблицы
94
Глава 4
6. Перетащим слово Поставщик в зону «поля итогов или деталей».
7. Закроем окно Список полей сводной таблицы.
8. Закроем окно формы.
с ЗАО 'Хлеб*'
Г ™
р
Та бл ицаНа к ладн ы-е
Г ретащнте । одз поля фильтра
Месяцы -
0 окт В ноя
с Поставщик ’ Поставщик
t ► ООО "Микс" ЗАО "Тортом'
- ЗАО "1ортон“ ЗАО Хпеб"
'1пебазавол №1
Рис. 4.17. Готовая форма типа «сводная таблица»
Готовая таблица показана на рис. В моем примере были данные за ок-
тябрь и ноябрь 2003 года, поэтому в сводной таблице появились только эти два
месяца. Теперь мы можем увидеть, какие поставщики работали с фирмой в опре-
деленные месяцы. Обратите внимание, что таблица изобилует элементами управ-
ления (которые выглядят как плюсы, минусы и стрелки). С помощью ник можно
выбирать различные периоды времени (например, включать разные года). В тех
полях, которые мы выбрали для анализа, нет числовой информации, поэтому гра-
фа «Общие итоги» появилась, но не была заполнена данными.
Гпава 5
Запросы
Так уж получилось, что запросы - средство отбора и сортировки данных -
в Access являются промежуточным звеном между таблицами и формами.
Запросы - это своеобразные виртуальные таблицы, которые, обладая всеми
свойствами таблиц, на самом деле хранилишем данных не являются. Зато с по-
мощью запросов легко создавать вычисляемые поля. Классический пример из
сферы коммерческих задач: есть колонка с количеством товаров и есть колонка
с ценой единицы товара, надо создать третью колонку со стоимостью по каждо-
му виду товара.
При разработке баз данных формы и отчеты можно создавать как на основе
таблиц, так и на основе запросов. Я всегда рекомендую использовать в таких
случаях запросы - создавать запрос с такими же полями, как и в таблице. Даже
если полезность запроса сразу не очевидна, потом появляется возможность, ме-
няя его свойства, добиваться требуемых результатов.
В данной главе мы используем базу данных «Борей» - пора познакомиться
с базой данных, которую сами разработчики Access предназначили для учебы.
Ее можно запустить командой Справка Примеры баз данных Учебная
база данных «Борей» или найти в папке примеров:
Program Files\MicrosoftOffice\OFFICE11\SAMPLES\BopeS.mdb
В английской версии Microsoft Office этот файл носит название Northwind.mdb.
Сделайте копию файла, чтобы в процессе экспериментов не испортить исход-
ную базу данных.
I
Глава 5
5.1. Мастер запросов
Перед началом работы я рекомендую ознакомиться со схемой данных базы
«Борей». Ее структура в чем-то похожа на структуру базы данных, которая об-
суждалаш в предыдущей главе. В этом нет ничего удивительного: коммерческие
задачи мало отличаются по обе стороны океана.
Как фавило, таблицы служат в качестве исходного материала для создания за-
проса. Откроем вкладку Запросы в окне базы данных и щелкнем два раза значок
Создание запроса с помощью мастера. Будет открыт мастер простых запросов.
Первый шаг мастера, позволяющего построить простой запрос, показан на
рис. . 1. На этом этапе надо выбрать таблицы, к которым будет адресован запрос,
и нужные поля из этих таблиц. Мы укажем следующие поля; Фамилия и Имя из
таблицы Сотрудники, ДатаИсполнения из таблицы Заказы, Марка из таблицы
Товары, КодТовара. Цена и Количество из таблицы Заказано.
Создание простых з« просо в
Таблицы и запросы
Таблица; Заказано
Доступные поля:
КодЗакаэа
Скидка
- -I
EifcibepHi - поля ц 1й запроса.
Допус ется выбор нескольких таблиц или irpocoB
I Далее > | | Готово J
Выбранные поля:
Фамилия
Имя
Д jrakk по лнения
Марка
КодТовара
| Отмена
Рис. 5.1 Первый шаг мастера тросов
На втором шаге мастера, показанном на рис. 5.2, имеется возможность опреде-
лить вид отчета: подробный или итоговый. Выберем вариант «подробный» - он
как раз соответствует понятию «простой», потому что итоговые запросы совсем
не простые, и прейдем к следующему шагу.
Запросы
9?
Создание простых запросов
выберите подробным или । готовый отчет:
гадробнын г каждого я ,с*донзелием;
ИТОГОВЫЙ
Сгненя___j । с Даяд 1 Дали J I Зяиэт
Рис. 5.2. Второй шаг мастера запросов
Последний шаг мастера запросов показан на рис. 5.3. Можно изменить имя но-
вого запроса, но в данном случае мы оставим то, которое предлагает мастер. Он
использовал одно из названий таблиц которвге участвуют в формировании запро-
са. Имя ни на что не влияет, и можно выбрать любое. Обратите внимание на по-
ложение переключателя: как только мастер завершит свою работу, запрос будет
открвгг.
Теперь самое время посмотреть на то, что у нас получилось. Нажмем кнопку
Готово. Access откроет вновь созданную таблицу-запрос. Ее содержимое показано
на рис. 5.4. По терминологии Access - это «подробнвш отчет». Мы видим, что про-
грамма создала новую таблицу, в которую вошли ввхбраннвш нами поля Использо-
вав существующую между исходивши таблицами связь, СУБД смогла определить
значения полей для всех записей. На результат выполненной операции стоит обра-
тить внимание. Используя очень простые средства, мы за несколько минут объеди-
нили данные нескольких таблиц! Получилась новая, виртуальная таблица,
обладающая свойствами запроса. Этот метод стоит принять на вооружение.
4-870
98
Глава 5
Со^длние простых запросов
Задайте имя запрос*
Сотруд никнЗалрос
Указаны все свв ды-ия( необходимы«для создагня
запроса с псм^щьюнастера.
Дв№Н£ЙШН>э ДенсТЕИЯ:
О ткрьп । запрос для просмотра данных.
Изменить пакет запроса
31 В₽1вес • । справку по работе с запросом?
Отмена ] |
Рис. 5.3. Третий шаг мастера запросов
Сотрудник. Запрос : запрос на выборку
Фамилия | Имя ] Дата п H
Инна
Паеел
Мария
Мария
Петр
__ Ясенева
Новиков
_ Белова
Белова
Кралее
Запись: [T<jT] |
13-04-1S98 Original Frankfurter Original Franpfi
Original Frankfurter Original F rankfl
Gorgonzola Tel
Gorgonzola Tb!
Gorgonzola Tel
Товар | Цена Количество
23-07-1996 Gorgonzola Telino
04-10-1996 Gorgenzc. Telino
24-10-1996 Gorgonzola Telino
? (T~ЛЕИ»»; из 2165
126 Шр
125 да
гада.
256 да
256 да
15
20
6
40
Б
Рис. 5.4. Pejv.ibTai работы мастера запросов
Но кое-чего в этой таблице не хватает. Конечно, хорошо 6bi подсчитать суммы
по каждому из товаров. Для этого нам потребуется доработать запрос в режиме
конструктора.
В базе данных «Борей» есть готовый запрос, похожий на тот Он
называется «Продажа по сотрудникам и странам».
Запросы
99
5.2. Конструктор запросов
Откроем получившийся запрос в режиме конструктора. Выделим запрос и на-
жмем кнопку Конструктор на вкладке Запросы. Окно, которое появится вслед за
этим, изображено на рис. 5.5. Эго основное средство работы с запросами. Оно.
позволяет не только сформулировать новый запрос, но и понять, по какому прин-
ципу построен любой из уже существующих. В верхней половине окна показаны
связи между таблицами. Как видим, программа использовала только часть счемы
данных нашего примера - ту, которая имеет непосредственное отношение к за-
просу. Пользователь может редактировать эту схему, добавляя в нее новые объек-
ты: таблицы или запросы.
J Сотрудники Запрос : запрос на выборку
КоаТдеара
Марка
КсдПостаещ.
КодТнпв
Цена
Количество *
КадСдтрудн -
Фвнипмя
^Доткность *
л КсдКлиентв
** Код Сотру дш
ДйтаРйзмеш.'
Рис. 5.5. Режим конструктора для запроса
Нижняя часть окна - бланк запроса - содержит описание запроса в табличной
форме. Каждая колонка в нем отвечает одному полю. Строки Поле и Имя
таблицы содержат списки, которые позволяют определить нужное поле. Их эле-
менты соответствуют размещенной вверху схеме, поэтому пользователь всегда
может легко узнать, какие поля ему доступны. Таблица расширяется вправо авто-
матически, когда пользователь добавляет в запрос новые поля. Контекстное ме-
ню, связанное с бланком запроса, позволяет скрывать или, наоборот, показывать
строки «Имена таблиц» и «Групповые операции».
4
Гла1 5
100
Заполнив строку Условие отбора, мы сможем, наконец, провести выборку из
базы.данных Допустим, мы хотим просмотреть все записи, касающиеся господи-
на Новикова. В колонке Фамилия надо ввести условие тгбора- "Новиков", как пока-
зано на рис. 5.5. Этой информации достаточно, чтобы программа отобрала все
строки, где в поле Фамилия записано это слово. Символьные константы полагает-
ся заключать в кавычки. Но даже если вы ввели фамилию без кавычек, программа
все равно поняла бы вас и подставила бы кавычки сама. По аналогии в колонке
бланка запроса Дата исполнения можно было бы записать условие >#01.01.1996»,
и программа отобрала бы все записи для 1998 года и позже («Борей» довольно
старая база данных, разработанная для предыдущих версий Access). Для того
чтобы увидеть результат запроса, достаточно переключить режим его просмотра
при помощи списка Вид, расположенного на главной панели инструментов. Из
списка надо выбрать команду Режим таблицы.
В реальных задачах встречаются намного более «продвинутые» запросы. Их
сложность заключается в формулировке условия отбора записей. Оно может
представлять собой достаточно запутанное логическое выражение. Для того что-
бы составить его, используется построитель выражений. Он запускается через
контекстное меню, связанное со строкой «Условие отбора», по команде
Построить. Работе с построителем выражений посвящен следующий раздел.
На рис. 5.4 видно, что программа автоматически создает новые имена полей,
используя названия полей или подписи из таблиц. Если необходимо, чтобы таб-
лица-запрос имела другие заголовки колонок, надо выполнить следующую по-
следовательность действий:
1. Щелкните правой кнопкой мыши на бланке запроса в требуемой колонке (в режи -
ме конструктора).
2. Из контекстного меню выберите команду Свойства.
3. На открывшейся вкладке Общие в строке «Подпись» введите желаемый заго-
ловок.
Теперь, когда вы переключитесь в режим просмотра запроса, вы увидите
в качестве заголовка столбца то, что вам нужно.
Назначение строки «Сортировка» на бланке запроса очевидно - можно от-
сортировать полученные в результате выполнения запроса данные по возраста-
нию или убыванию.
Запросы
101
Еще один способ «конструирования» запроса - изменение его формулировки
на языке SQL. Когда юльзователт конструирует апрос, программа переводит по-
следний на язык SQL. Текст запроса можно увидеть, если выбрать команду
Режим SQL в списке Вид или ту же команду из контекстного меню. Этот текст
можно отредактировать и, следовательно, изменить запрос. В нашем примере
запрос, изображенный на рис. 5.4, имеет следующую формулировку на SQL:
SELECT Сотрудники.Фамилия, Сотрудники.Имя, Заказы .ДатаИсполнения, Товары.Марка,
Заказано. КодТовара, Заказано.Цена, Заказано. Количество
FROM Товары INNER jOIN (Сотрудники INNER JOIN (Заказы INNER JOIN Заказано ON
Заказы.КодЗаказа = Заказано.КодЗаказа) ON Сотрудники.КодСотрудника =
Заказы. КодСотрудника) ON Товары.КодТовара = Заказано.КодТовара
GROUP BYСотрудники.Фамилия, Сотрудники.Имя, Заказы.ДатаИсполнения, Товары.Марка
Заказано.КодТовара, Заказано.Цена, Заказано. Количество
ORDER BY Сотрудники.Фамилия;
Весь запрос уложился в одну команду. Правда, она получилась достаточно
длинная из-за ряда опций. Для тех, кто незнаком с SQL, скажу, что в этом нет
ничего удивительного, Очент большое число запросов может быть выражено при
помощи команды «SELECT». Я бы даже сказал, что это главная команда языка.
Честно говоря, мне больше нравится работать со схемой данных, где таблицы
представлены в виде прямоугольников, а связи — в виде линий, чем изобретать
сложные «заклинания» на SQL.
В реальной базе данных схема данных может быть достаточно
сложной, а таблицы — большими поэтому влияние связей на резулъ-
NB тат запроса не сегдс легко проследить. Для проверки ыполнени, за-
проса во ;ремяразработки базы данных можно создавать временные
запросы с использованием одной таблицы.
5.3. Построитель выражений. Создание
вычисляемого поля
В примере из предыдущего раздела нам было надо отобрать записи из табли-
цы, в которых в поле Фамилия было введено «Новиков». При желании сформиро-
вать условие отбора можно было бы, запустив построитель выражений. Он
открывается командой Построить из контекстного меню, связанного со строкой
«Условие отбора» на бланке запроса (а также во многих других случаях).
102
Глава5
При составлении выражения как условия отбора надо помнить несколько про-
стых правил. Во-первых, выражение всегда имеетлогический тип. Тоестьвлюбом
случае его значение должно быть Да или Нет. В бланке запроса обычно опускается
часть выражения, содержащая имя поля, потому что оно задано в той же колонке.
Знак равенства также не пишется по умолчанию. Таким образом, условие отбора
[Фамилия]="Новиков' записывается как литерал (символьная константа) "Новиков".
Во-вторых, существуют определенные требования к синг аксис' выражения. Напри-
мер, имена заключаются в квадратные скобки, символьные строки - в кавычки,
даты - в знаки в. Имя объекта базы данных отделяется от имени поля восклицатель-
нымзнаком. В-третьих, естьнесколько«нематематических»операторов, назначение
которыххорошо известно программистам, но не всегда - конечным пользователям.
Когда вы строите выражение для запроса, то должны представлять себе, что
создаете новую таблицу, используя уже имеющуюся информацию в базе данных.
Причем конструируете таблицу на самом деле не вы, а программа, которая ис-
пользует введенное вами логическое выражение как критерий отбора данных.
Поэтому выражение должно быть точно определенным и содержать всю ин-
формацию о том, какие записи надо включить в таблицу-запрос.
Построитель выражений используется и в тех случаях, когда надо определить
источник данных или создать вычисляемое поле.
Теперь мы можем, наконец, модифицировать апрос. как хотели: добавить но-
вое поле, в котором будет вычисляться сумма по каждому товару. На свободной
колонке бланка запроса надо установить курсор в строку «Поле» и вызвать по-
строитель выражений. Его окно показано на рис. 5.6.
Окно построителя имеет четыре области со своими полосами прокрутки.
В верхней области располагается создаваемое выражение. Три нижние исполь-
зуются для выбора элементов. Они заполняются по иерархическому принципу.
Левая область содержит список всех источников данных для запроса. Как видно
из рис. 5.6, ими могут быть объекты базы данных Access: таблицы, запросы,
формы и т. д. Для облегчения поиска нужной информации список представлен
в таком же виде, как и дерево каталогов в Windows. Кроме этого, в левый список
включены папки, содержащие функции, константы и операторы, которые могут
быть использованы в выражении. Средний список служит для показа элементов,
входящих в выбранный объект из левого списка. Например, если в левой области
указано имя конкретной таблицы (например, Заказано), то средний список будет
содержать имена ее полей. Если выбрана «папка» с функциями, то средний спи-
сок будет содержать перечень групп функций. И наконец, правый список служит
Запросы
103
Построитель выражений
, [За к а за но)! [Цен ]* [Эак гано^рСоличес’-о]
3-] |j| *J «J -j >£ < <>J Andi O[ Ncit juce j )J
j, J Таблицу
(□Достська
I -£3 Заказано
- С"*। ЗбкчМ I
- CD Клиента
I -СЗПоттдацки
I r CD Cc-Tpw^wi
j-СЗТипы
I L P~l Тгтмры
Л КСдЗвч-ыа
КодТовара
Цена
Когмчеспва
Скидке
Рис. 5.6, Устроитель выражений: момент оздания вычисляемого
поля для запроса
для выбора самых примитивных объектов. Для того чтобы перенести имя объекта
в выражение, нужно щелкнуть два раза мышью имя объекта в одном из нижних
списков. Кнопка Назад позволяет отменить ввод данных в выражение. Текст
выражения можно редактировать и обычным образом.
Кнопки с изображенными на них знаками математических операции позво-
ляют быстро вводить соответствующие символы в выражение.
В нашем примере следует поступить так: найти таблицу Заказано, щелкнуть
поле Цена (в средней области), щелкнуть на кнопке со знаком умножения, щелк-
нуть поле Количество, щелкнуть на кнопке ОК.
После того как окно построителя выражений закрыто, полезно посмотреть,
что записано в строке «Поле». В нашем случае это будет:
Выражение!: [Заказано)![Цена)*[Заказано]![Количество]
Слово «Выражение 1» можно заменить на слово «Сумма», потому что это бу-
дет заголовок новой колонки. После этого запрос можно переключить к режим
просмотра. На рис. 5.7 показана таблица-запрос для нашего примера.
Выражения, созданные с помощью построителя могут быть весьма сложны-
ми. Кроме традиционных знаков математических действий существует еще не-
сколько операторов.
Between And заменяет знаки юльшс или равно» и меньш или равно». Напри-
мер, условие Between 1981 And 199' эквивалентно условию =1981 And <=199 -.
Оператор In позволяет использовать списки значений. Например, выражение
104
Diaea 5
Сотрудник Запрос : запрос на иберку
J «♦«УЧ —Яд™ ** nC|*W“J‘-y I_____________________Ши- | kbJp j'n?1"* [Кдичвсис J___ Сумм.й *
Крылова зылсеа Крылова Анна Анна Анна 01-05-1998 Fir Podiey Scones S:r Rodney's £ адр 240 ЯЗр 130 OOp 40 35 50 12 3400. OOp ЗООО.йОр
01-05-1998 Tourtiere
C5-05-19.98 Konbu
► Новине Павел Gereri Shui/yu Genen Shaun wop 40 тгог.гвр
Нгшнксв Павел Nord Ost h/laljEshenni Nord Ost Maiji 174,50p 30 5235 ГГ1р
Новиков Павел NuNuCa NuNuCa Nuss- j 10 Дор 10 2 100 OOp
Новике Павел Original Fi&nUWei gr Oiiginal Frank) 125.00p 20 2 500(ffip
L Навинов Павел Oltbach Lager Outback Lagei 46DCp 20 900 OOp
Запись; Й Д < ] ] __ D-лЛ- 1623 1 ► 1 H . 2169 «ОПППг. -in- ’annn nru >
Рис. 5.7. Габин ца-зап pot с вычисляемым полем
In "neTpoB'yCuflopoB'')
позволяет отобрать записи с указанными фамилиями.
Выражение Not Null (Is Not Null) используется для отбора непустых записей
в указанном поле.
Выражение Is Null используется для отбора пустых записей в указанном поле.
\ - обратная косая черта обозначает деление целых частей делимого и делителя.
Результат округляется до целого.
- обозначает операцию возведения в степень.
Mod операция получения остатка отделения целых частей аргументов.
Знак & используется для «сложения» данных символьного типа. Для соедине-
ния строк можно использовать и более привычный знак «плюс». Например, сле-
дующие три выражения эквивалентны;
"Петров"
"Петр" & "ов"
"Петр" + "ов"
Оператор Like используется для создания масок при определении строк с не-
известными символами и требуетдополнительных специальных символов и пра-
вил синтаксиса.
? - знак вопроса обозначает любой одиночный символ. Например, если неиз-
вестно, как написать: Carl или Karl, то условие можно задать как Like "?arl".
* - звездочка обозначает любую последовательность символов.
# - обозначает любую неизвестную цифру.
[ ] - квадратные скобки подразумевают, что перед выполнением запроса
должно быть активизировано окно диалога с приглашением ввести параметр,
являющийся критерием отбора. Выражение в скобках выводится в этом окне
в качестве ообщения-пс '(сказки.
Запросы
105
Логические операторы также используются для построения условий отбора.
Они могут применяться к двум или более выражениям и используются со скобка-
ми. Чаще всего используются связки And (логическое И) и Ог (логическое ИЛИ).
Кроме них, часто используется оператор логического отрицания Not. Условие Not
"Иванов" позволяет выбрать все строки, которые НЕ содержат указанный литерал
в соответствующем поле. Есть и более «экзотические» связки: Eqv, Хог Imp. Перед
их использованием полезно заглянуть в справочник по математике. Например,
результат выполнения логической операции Imp (импликация) зависит от порядка
следования операторов,
Операторы «меньше» и (больше) могут использоваться не только с числовы-
ми данными, но и с датами или текстом. Применительно к текстовым строкам
они позволяют отбирать записи, предшествующие указанной строке или сле-
дующие за ней. В этих случаях учитывается алфавитный порядок значений поля.
Например, выражение [Город]>"Москв; подразумевает, что в поле Город надо ото-
брать все названия, которые стоят в алфавитном списке ниже Москвы.
5.4. Перекрестный запрос
Перекрестный запрос - это операция построения таблицы для вычисления
итоговых значений на основе существующей таблицы или запроса. Перекрест-
ный запрос создается в предположении, что исходная таблица содержит необхо-
димые данные для формирования заголовков строк и столбцов новой таблицы.
Для иллюстрации работы мастера перекрестных запросов рассмотрим таблицу
Заказы из базы данных «Борей». Эта таблица содержит записи обо всех заказах, сде-
ланных клиентами за определенный промежуток времени. Используя эту таблицу,
при помощи перекрестного запроса можно проследить распределение клиентов ком-
пании по городам. Вся необходимая информация в таблице уже имеется.
Для запуска мастера перекрестного запроса надо нажать кнопку Создать на
вкладке Запросы, выбрать из списка Перекрестный запрос и нажать кнопку ОК.
На первом шаге мастера, показанном на рис. 5.8, надо выбрать таблицу, f ели не-
обходимые для запроса поля находятся в разных таблицах, то вначале необходимо
создать запрос, который создаст виртуальную таблицу со всеми нужными полями.
В нашем случае все проще: мы же выберем имя таблицы Заказы и перейдем к сле-
дующему шагу, нажав кнопку Далее.
106
Глава 5
Cqiданне перекрестныйтабл1
Эыбапито таблицу или \jnpot, поля
коюрых необходима ьь®&сти с
перекдаггнон мгцзо»
гябп-ща: Доставка
1аблица: з^азанг!
Таблица Клиенты
Таблица. Поставщики
Таблица Сотрудники
1аблице. Типы
Таблица: "осарь
Показать
- Таблицы Q Запросы О Таблицы и Запросы
Для включение папай из
нескальк+и таблиц сначала
создайте обычньй запрос,
«□держащий рее необходимые поля
I
Рис. 5.8. Первый шаг мастера перекрестных опросов
На втором шаге мастера (рис. 5.9) необходимо выбрать поле (поля), значения
которого (которых) будут использованы для создания строк таблицы. В нашем
случае можно выбрать поле, в котором хранятся имена клиентов КодКлиента) (при
желании можно было бы выбрать имена менеджеров (КодСотрудника) Если поле со-
держит повторяющиеся значения, то в перекрестном запросе будет выполнена
группировка данных. Мы укажем поле КодКлиента, Напомню штателк что недос-
таточно выделить нужное поле - его необходимо перенести в список Выбранные
поля из списка Доступные поля, нажав кнопку со стрелкой. Программа сразу же
показывает, как будут располагаться в таблице значения поля. Поле является под-
становочным: таблица хранит только коды клиентов, а из таблицы Клиенты вы-
бираются реальные имена клиентов.
На третьем шаге мастера надо определить поле, значения которого будут ис-
пользованы для формирования колонок и их заголовков (рис. 5.10). Это поле не
может быть подстановочным, иначе в заголовках столбцов появятся коды, а не
удобные для чтения названия. Выберем поле Город Получателя. Для этого доста-
точно выделить нужный элемент списка. Каждому уникальному значению ука-
занного поля будет соответствовать свой столбец в новой таблице. Так что вряд
ли есть смысл строить таблицу, в которой окажется очень много столбцов.
Запросы
107
Создание перекрестим таблиц
Выберите поля, которых
будут использованы в качеств
загслоек.» строк.
Допускается выбор не более товх
полей.
Еыбв <тр по»», по порядку
сортировки данных, Напрпер,
♦ЮжнО сначала с ^полнить
сорт* 7©вку знамении по ттран.зн, а
зет- « по городам.
Доступные new
КодСотрудмвд
ДатдРе.'М ещи-мй
ДатаНазначенид
ДатаИсполнения
Доставка
С* рин сгт1Д остается
НазганиеПолу -отела
АдреЛслучдтелА
Горо дПолучате ля
ОбластьПолучателя v
&:<сраннь- поля:
|кодктент
| Отиенл | < Няаьд || Далее
Рис, 5.9. Второй шаг мастера перекрестных запросов
Создание перекрестныхтаблиц
Еыберн - - поля для . г.тюльяогаччя
их значении в качестве загопсек^
столбцов.
Например, чтобы исг>: 3't имя,
каждого сотрудника в качестве
зато Ловка столбца, выберите поле
ИмяСотрудника.
ДатаРаэиешенич
ДатдНазначения
атаИспргнения
Доставке
СтоитюстьДостдвки
НадааниеПолучатепя
ДдресП -,чателя
Г С1рпдпс1пучатет
_>2-теслгГ о ане,-*|
ИмдексГг пучАт^пя
Рис. 5.10. Третий шаг мастера перекрестных запросов
10В
Глава 5
На четвертом шаге мастера (рис. 5.11) требуется выбрать функцию, которая
позволит сформировать столбец итоговых значений. В нашем примере можно
подсчитать общее количество значений (Василий из Костромы сделал 12 заказов,
а Егор из Костромы сделал 7 заказов, значит, общее число - 19) Выберем функ-
цию Число (перевод названия хорошо всем известной функции Count).
। Со э длине перекрестных таблиц
Какие вычисления необходимо
провести для каждс iячейки на
пересечении• р и
I
Например можно еьмислигьсунчу
JOE для каждого сотрудника
(стопбсиj по I ,раивм и регионам
(строка).
Вычислить итоговое №ачские для 1
каждой строки’?
[САД-
Пшм:
Кодцотрудника
Дат£разнещенгя
Д.^тйНзэиач&ния
ДагаИ1.гсгне1-НЯ
Доставка
Сто»-нс с тЬ Доставки
Нгзт? слушателя
Адрес Получателя
Обп.астьЯолучателя
Ин ля
Дмсгер и
МагАччтм
Отклонение
Гкелддги^
Рис, i. 11. Четвертый шаг мастера перекрестных запросов
На последнем шаге мастера (рис. 5.12) не надо соглашаться с предложенным
мастером вариантом названия запроса «Перекрестный запрос», а можно исполь-
зовать другое имя, например «Сводка по городам». Как обычно, на этом шаге
есть переключатель, который позволит открыть запрос или перейти в режим кон-
структора после завершения работы мастера. Теперь можно нажимать кнопку
Готово.
Полученный перекрестный запрос показан на рис. 5.13. Программа создала
в новой таблице поле итогов с весьма длинным именем «Итоговое значение Код-
Заказа», в котором просуммировала данные в ячейках таблицы по строкам. В на-
шем примере это поле содержит количество заказов для каждого клиента.
Поскольку заголовок поля слишком длинный, его можно изменить в конструк-
Запросы
109
Создание перекрестных таблиц,
Г " 11 ’ \---------------------------------IV-1W1---------------
Задай имя з-эпрсса.
Заказы перекрестный
Указаны все сведения; необходимы для «дснвпа-рссас покошьт
иастерь.
Дальнейшие действия после соэд&ния эацрсдо
‘ Охюютрет. результаты запроса.
О Ценить структуру запроса.
[ Вывес , ।. справку по работе с перекрестной таблицей
Рис. 5.12. Последний шаг мастера перекрестных запросов
торе запроса. В соответствующей колонке бланка в строке «Поле» надо заменить
эту фразу (которая на самом деле :лужит именем выражения для этого вычисляе-
мого поля) на что-нибудь более короткое (например, «Итого» или, чтобы было
понятнее, «Всего заказов»).
d Заиа#ы_переиресгнын : перекрестный запрос
Клиент
•__Lehmanns Maikisland
у ► Let's Slop N Shop
_ L/LASuperriiercado
_ LINO Dehcaieses
Lonesome Pine Restaurant
Magazzini Alimentari Riunili
, _____________ „ ____________ 9 Й
jИт^говоезнач ёниь | Covyesj АпьЁуут:рке] АнкориджI Ахбн]^Баркнсмыето j_Бдрселона| л
15
MagazziniAJim “ ' ’
Maison Dewey
Mere Paillarde
___ MorgenslarnGesondkcst
;\pTirip'South
Mere Pailhrde
___Cceanc Atiantico Lida.
__। Old Wond Delicatessen
I Oitilres Kaseladen
Звгмсь: ®.иг
44 I’D® * из 89
1Л
13
е
ю
8
13
5
3
5
10
10
14
10
Рис. 5.13. Перекрестный запрос в табличном представлении
110
Г/tai 5
В определенной ситуации мастер перекрестных запросов мог рабе гать не-
сколько иначе. Четвертый шаг мастера логически связан с предыдущим и может
быть не таким, как в рассмотренном примере. Этот шаг меняется в зависимости
от того, какое поле выбрал пользователь. Например, если бы мы выбрали поле
ДатаИспс нения вместо поля ГородПолучателя то мастер не стал бы автоматически
присваивать заголовкам колонок значения дат, а предложил разбить временной
интервал на равные промежутки. От человека требуется только выбрать протя-
женность интервала: год, квартал или месяц. Конечно, можно указать и имя поля,
и тогда в заголовках колонок будут указаны конкретные даты. Выберем опцию
«Месяц» и посмотрим, что получилось. Результат показан на рис. 5.14. Програм-
ма использовала информацию, чтобы сгруппировать данные по времени, и пока-
зала в каждой ячейке таблицы число записей, соответствующих запросу. Мы
узнали, кто, сколько и в какие месяцы оформлял заказы.
перекр*стный_/|ата : перекрестный jar рос
/ Клиент |Итоговое значение} яне \ фев Г ыэд [ агц>[. май ]
l_L^hmanns Markistand
• >Ljt' Slop N Shop
Йи1А5ирегтвгса1)о
LINO-Delicaleses
Lonesome Рте Rjsstauranl
_ MagazzirrAlimenlari Riuniti
___Maison Dewey
Mere
|Г^ Morgenstern Gesundkosr
_ Norlh/South
JCceanoAllanlicci Ude
Old orld Delicatessen
ROItihes Kaseladen
Potiric*; Pprnidac; г1яс!гзч
Зап»! [H~] j] j |_»
из 89
15
4
14
13
8
10
8
13
5
3
5
10
10
ик-J июп j евг 1
2 1 ?
1
1
1
1 2
сем -
2
2
3
3
2
2
2
2
2
2
3
2
2
2
Рис. 5.14. Перекрестный запрос с группировкой по времени
5.5. Выборка повторяющихся записей
Рассмотрим в качестве примера таблицу Товары из базы данных «Борей». На-
звание })ирмы-поставщика в этой таблице встречается по нескольку раз. Иногда
возникает необходимость сгруппировать записи с одинаковым значением поля для
того, чтобы было легче вести их дальнейшую обработку. Самым простым решени-
ем является сортировка таблицы по соответствующему полю. В Access преду-
смотрена также возможность создания специального запроса. Его использование
Запросы
напоминает операцию сортировки но предоставляет пользователю дополнитель-
ные возможности. Запрос для поиска повторяющихся записей выполняется при по-
мощи мастера. Для его запуска надо нажать кнопку Создать на вкладке Запросы,
выбрать команду Повторяющиеся записи и щелкнуть кнопку ОК.
Первый шаг мастера показан на рис. 5.15. Он позволяет определить источник
данных для запроса. В нашем примере это таблица Товары.
Поиск повторяйщихсл записей
Выберите таблицу или мпрсп в гптсрьк требуется наити записи с
повторяющимися значениями.
Например, чтобы найти гора* в i »]Topoi ь имеется более одного
клиенту выберите таблицу 'Клиенты .
Таблица; Доставке
Таблица? Заказами
Тйблгие: Заказы
Таблица: Клиенты
Таблица? Поставщики
Т лГ С отрубники
Таблица. Тины
Тае ица
Показать
। Таблицы О Опросы Таблицы к запросы
Рис. i.15. Первый шаг мастера повторяющихся записей
На втором шаге, показанном на рис. 5.16, необходимо выбрать поле, в котором
будет проводиться поиск повторяющихся записей. Мы указываем поле
Код Поставщика. Эго подстановочное поле, и в таблице мы увидим названия орга-
низаций.
При необходимости можно выбрать и несколько полей. Тогда программа будет
группировать записи, в которых встречаются одинаковые значения по шум по-
лям. Фактически это эквивалентно сортировке по нескольким полям.
На третьем шаге мастера, показанном на рис. 17, необходимо выбрать поля,
которые должны быть показаны в таблице запроса. Мы указываем поля КодТовара,
Марка. НаСкладе. МинимальныйЗапас.
На последнем, четвертом шаге мастера, показанном на рис. 5.18, можно задать
имя нового запроса. Фрагмент виртуальной таблицы, являющейся результатом
запроса, показан н: рис. 5.19.
112
Глава 5
Поиск повторя ю щижя записей
Задайте! ) содяр т ряидди значен
I ки ч* хе*
2 «я ни «
3 Btii «и ьа
2 н«и № ши
♦ «S № МИЯ
Например, если требуете . найти город, в котором : 1еетса более одного
клиента следует £ыбр поля "Город" 1 "Регион".
Доступные поля
КодТовара
Кпд Т|<№
Единиц аИ знеренми
Цена
НаСкладе
Ожидается
М/и-ин • пы-ьиЗг г ас
Поля с товтора-и:
I Отмена < Назад II Далее > I Готово
Рис. 5.16. Второй шаг мастера повторяющихся тагшеей
Поиск повторяющихся записей
1 *** №1) МЦХ
Выбернтедол днитапьна - паля для отображения вместе с
повторяющимися значениями.
з К№
2 ЛИЛ мн I
Например, если . гопняе-т^тоисн повторен • в полеТород”,
дополнительно г:оч*но Еывес г < поля "ИмчКлиент а' и "Адрес”.
Доступные гК’Ля
Дополнительные поля:
КсдТипе
Единицей snaps ня
Цена
Ожидается ______
ГЬггадгиПрс*рацчны
№»4*и*льна.й3к:па!:
КодТолзра
Мхгсз
1 и -чл.
Назад 11 flanee > / j Готово
Рис. 1,17. Третий шаг мастера повторяющихся (иписей
Запросы
Поиск повторяющихся записей
Введите имя запроса:
Поиск повторений для Товары
Дальнейшие действия!
. Орсспотретъ результаты запрета.
О Иуинттъ структуру запроса.
по работе, ап
| Отмена < ЦеЗед
Рис. 5.18. Четвертый шаг мастера повторяющихся записей
—I' Поиск повторений для Товары запрос на выборку - c .
г | КодТовара Марка | На складе Mичи мэ льным -3 аг а
Ez ’ 3? ООО Экзотика ооо отчка ООО Экзотика New Oileans Cajun Delights New Orleans Cajun Delights New Orleans Cajun Delights New Cajun Delights Grandma Kelly’s Homestead Grandma Kelly’s Homestead пись: j1 j ! ► H 73 Б6 Aniseed Synjp 65 Chang 64 Chai 63 Gumbo 2D Louisian. • Hot Spiced Okra 19 Louisian । Fiery Hot Pepper Sauce 67 Chef Anton’s Cajun Seasoning 70 Uncle Bob s Organic Dried Pears 71 Northwoods Cranberry Sauce 23 17 3S D J 4 20 76 0 53 IS 6 С
Рис. 5.19. Результат работы мастера повторяющихся записей
П4
Глава 5
Существует втором вариант использования мастера повторяющихся
записей Если на третьем шаге мастера не указывать ни одного поля
в списке Дополнительные поля, то программа автоматически созОаст
в запросе поле Повторы, е котором укажет, сколько раз встречается
запись с тем или иным значением. В полученном запросе уже не будет
повторяющихся записей - каждое значение поля повторов будет приве-
дено е запросе один раз. Размер таблицы-запроса будет заведомо мень-
ше, чем размер исходной таблицы. Таким образом, мы можем создать
таблицу-сводку. Потребность в таких таблицах очень часто возникает
в пользовательских задачах. Запрос в виде сводки, созданный на основе
таблицы Товары, показан на рис. 5.20. Единственный недостаток та-
кт таблицы - программа не стаза использовать возможность подста-
новки для поля КодПостзвщик и вывела числовы значения.
Рис. 5.20. Запрос токазылает, сколько раз
вез решалось определенное значение поля
Такая сводка обладает одной особенностью: в ней не указываются записи, ко-
торые не имеют дублей по значению заданного поля. Это значит, что в столбце
Повторы вам не встретится единица. Если при редактировании исходной таблицы
в ней станет меньше повторяющихся значений поля, то и таблица-запрос автома-
тически уменьшится. Если в исходной таблице совсем не останется повторов,
то таблица-запрос станет пустой. Полезно помнить об этом эффекте, когда надо
отредактировать поле, для которого требуется задать индексацию «без совпаде-
ний», а совпадения имеются. Подобный запрос наглядно покажет, какие значения
встречаются в поле более одного раза. Редактируйте поле исходной таблицы, пока
запрос не станет пустым, азатем можете смело индексировать таблицу.
Запросы
115
5.6. Другие способы группировки записей
Для группировки записей можно применять и мастер простых запросов.
Используем таблицу Заказы из базы данных «Борей». Запустим мастер простых
запросов и выберем поля таблицы: Код Сотрудника, СтоимостьДоставки и Да-
таИсполнення. На втором шаге мастера (рис. 5.2) выберем опцию Итоговый.
В этом случае, кроме установки переключателя, надо нажать кнопку Итоги и ус-
тановить флажки в окне Итоги, как показано на рис. 5.21 (каждый флажок
отвечает за отдельную операцию). На следующем шаге мастера была выбрана
(для примера) группировка поля дат по месяцам.
I Итоги
| Какие” огсвые эначенг необходимо*^числить?
Попе sum Avg Мп Max
Стоимостное таеки Sd LU О С
' I
I
£ Подсчет чиспа
записяйв Заказы
Рис. 5.21. Окно Итоги
В результате запрос должен выглядеть так, как показано на рис. 5.22. Мы ви-
дим, что программа создала два дополнительных поля, а также произвела груп-
пировку данных по именам менеджеров и датам. В результате получилась
таблица, удобная для анализа: легко сравнить затраты на доставку товаров по ме-
сяцам, годам и сотрудникам. Кроме того, в последнем столбце произведен под-
счет количества записей, попавших в одну группу.
Еще один способ группировки данных - использование конструктора запроса.
Строка «Групповая операция» содержит список функций и во многом определяет
вид данных запроса. Под групповой операцией понимается обработка и обобще-
ние значений данного поля при помощи определенной функции. В результате
в таблице запроса меняется расположение или количество записей.
Глава 5
J Заказы Запрос запрос на выборку lsl&3
Сотрудник i ДэтаИсполнечия по месяцам Sum-Стонмост ставим | Count-Заказы te'li * 1
► Белова Мария Бедова Мария Белова, Мария Белова Мария Aeryt 1996 Август 1997 Апреле 1997 ' ,• р 240 ЗОр 986,ЗЗр 36.I р. 3 3 2
Белова, Мария Белова, Мария Апрель 19 Декабрь 1996 1154,83 р. 4Б1 .GClp 11 9
Белова. Мария Белова Мария Декабрь 1997 Ик,Л1 1996 с73.3бр 140.51р. 5 1
Белова Мария Белова, Мария Июлк 1997 Июнь 1997 та.1бр 129,В9р. 6 3 Я V
Запись* | H j \ 1 fr J Н | • * И1 2С
Рис. 5.22. Запрос с группировкой данных
Групповая операция позволяет легко создать вычисляемое поле. Допустим, мы
хотим подсчитать в запросе, сколько раз встречается каждое значение некоторого
поля. Для этого надо создать в бланке еще одну колонку для этого поля и опреде-
лить для нее групповую операцию Count (подсчет).
В качестве источника информации выберем таблицу Заказы из базы данных
«Борей». Выясним, кто из клиентов сделал больше всего заказов. Создадим про-
стой запрос (можно с помощью мастера), в котором будет единственное поле
КодКлиента. Поскольку поле подстановочное, в нем будут автоматически исполь-
зованы текстовые названия.
Теперь модифицируем этот запрос.
1. Откроем его в режиме конструктора.
2. Установим курсор на вторую, свободную колонку в строке «Поле».
3. Раскроем список в строке «Поле» и выберем поле КодКлиента (появятся две ко-
лонки с одинаковыми именами).
4. Во вновь созданной колонке раскроем контекстное меню и выберем команду
Групповые операции.
5. В строке «Групповая операция» выберем из списка опцию Count.
6. Во вновь созданной колонке в строке «Сортировка» зададим режим сортиров-
ки по убыванию.
Готовый запрос показан на рис. 5.23.
Запросы
117
1 Закат Клиенты; sanpoc na vp Ллдту — J
[ СоипМ'-одКлиемта Г^'1
31' II
30
__________ Клиент
► lot Manets
___। Ernst Handel
।___Qv Ck-Siop
Hungry Owl All-Night Grocers
Folk och fa НБ
Rattlesnake Csnyoi Grocery
_ HILARluN-Ahastos
i _ Bon app
( _ Berglunds snabbkcp
_ Wartian Herkku
Запись: H < \ Г | ►"]
19
19
18
ip
17
17
89
Рис. 5.23. Подсчет количества одинаковых значений поля
5.7. Редактирование данных с помощью запросов
Существуют запросы, которые позволяют автоматизировать изменение данных
в таблицах. В больших базах данных не всегда удобно вручную изменять информа-
цию. В некоторых случаях необходимы специальные процедуры дня внесения из-
менений по заданному алгоритму. Рассмотрим варианты таких запросов.
Запрос на добавление
Запрос на добавление позволяет скопировать данные из одной таблицы дру-
гую, не прибегая к помощи буфера обмена. Записи могут перемещаться между
разными файлами баз данных и между базами данных разного типа. Допустим,
мы Хотим добавить записи в таблицу Товары базы данных «Борей» и у нас есть
таблица с такой же структурой, названная Товары2.
Для выполнения &апрос< на добавление надо выполнить следующие действия:
1. На вкладке Запрос нажать кнопку Создать и выбрать режим Конструктор.
Активизируется вспомогательное окно Добавление таблицы.
2. Выберите из списка таблицу Товары! и нажмите кнопку Добавить. Таблица
появится в окне запроса. Закройте вспомогательное окно. Мы определили таб-
лицу, которая будет источником данных при выполнении запроса.
ff6
Глава 5
dMicrosoft Access
л
Готою
Файл Правке [Ид вставка Запрос Сервис Окно ^правка
>4 'Л
Запрос! : запрос на выборку
|^j] Ёь<6ор|
Перекрестный
£с здание твблииы.
Обнов пен-*
ЮмТшара
Марка
1КодПоставщ
'КодТмпа
Добавление
Удаление
1 Юле
Иня таблицы
Сортировка
Вывод на экран
Условие отбора
или:
Рис. 5.24. Создание запроса «на добавление»
3. В режиме конструктора на панели инструментов находится список Тип
запроса. Выберите из него элемент «Добавление» (рис. 5.24). Откроется окно
Добавление, изображенное на рис. 5.25. В этом окне выберите в списке имя
таблицы, в которую надо добавить данные, - Товары. Обратите внимание, что
переключатель в окне позволяет указать, в какую базу данных добавляется ин-
формация: в текущую или в какую-нибудь другую. После этого окно можно
закрыть.
Добавление
! Добавпение записей в -Qf «ч
иш таблицы; товары
О в текущей безе данных
другой г мае датло
пня файла: ||
I-----------I I
I ОТМ8И4
Рис. 5.25. Окно Добавление
Запросы
119
4. Теперь надо определить поля, которые будут добавлены в таблицу Товары.
Идеальным вариантом является тот, когда поля обеих таблиц совпадают.
Тогда, щелкнув два раза по символу «звездочка», мы укажем, что должны
быть скопированы все поля. Соответствуюша> информация появится в бланке
запроса.
5. Осталось нажать кнопку Запуск, и можно, открыв таблицу, проверить, пра-
вильно ли выполнена операция.
Несколько замечаний;
а новые записи размещаются в таблице в зависимости от ее структуры: от
параметров полей, индексов и режимов сортировки;
а если требуется переместить только часть полей, то каждое поле надо
предварительно переносить в бланк запроса отдельно двойным щелчком
мыши;
а при желании можно добавить не все записи из таблицы-источника. а только
некоторые, в соответствии с заданным условием. В этом случае нужно
перенести каждое поле в бланк запроса отдельно и заполнить строку < Усло-
вие отбора». Например, для отбора записей, относящихся к периоду позже
марта 2004 года, в этой строке в колонке для поля, определяющего период
времени, надо ввести следующее выражение: >#1/03/2004#;
а перед выполнением запроса можно увидеть данные, которые будут вставлены
в другую таблицу. Для этого достаточно переключить режим просмотра
запроса: выбрать из списка Вид элемент «Режим таблицы»;
а выполнение запроса на добавление не должно нарушать целостности данных,
поэтому не всякий запрос может быть выполнен. Осложнения могут во шик-
нуть, если таблица-приемник связана с другими таблицами и выполнение
запроса приводит к нарушению уникальности ключа. Запрос не будет выпол-
нен и в том случае, когда нарушается принцип уникальности записей для
индексированного поля, в котором запрещены совпадения;
а запрос на добавление (если макет его сохранен) можно выполнять
неограниченное число раз. Если вы обновите данные в таблице-источнике
и снова активизируете запрос, то новые данные будут добавлены в таблицу-
приемник;
вы можете открыть запрос в режиме конструктора и модифицировать его. Сам
запрос при этом выполняться не будет. Выполнить его в режиме коне i ру кгора
можно путем нажатия кнопки Запуск. Если же вы выберете запрос и нажмете
кнопку Открыть на вкладке Запросы, это приведет к немедленному запуску
(выполнению) запроса;
120
Глава 5
a Access предоставляет последний шанс отменить запрос перед его выполне-
нием. На экран выводится окно диалога, в котором сообщается, сколько запи-
сей будет добавлено. Если пользователь подтвердит выполнение операции,
отменить ее действие будет впоследствии невозможно (придется искать их
другим способом и удалять вручную).
Запрос на обновление
Запрос на обновление обеспечивает одну из важнейших сервисных функций
СУБД - автоматизированную обработку данных. Действительно, что стоила бы
программа, если бы не позволяла редактировать данные в таблице программным
способом? Такие запросы позволяют существенно сэкономить время оператора,
выполняющего редактирование информации. Возможности алгоритмического
обновления данных заложены в запросы Access изначально, поэтому правило
создания таких запросов предельно простое: сначала создается обычный запрос,
а затем в его бланке заполняется строка «Обновление».
Гевары • таблица
] Тип | Единица измерения Цена ha складе | Ожидается | Минимальный апэс| Г *
7 ► + Приправы 24 бутылки по 250 мл 697,50р. 0 5
* Кондитерские изделия 32 коробки по 500 г 785,25р. 2S 0 1С
+ Мясо/птица 20 банок по 1 кг 1 755.00р. 0 0 0
* Рыбопродукты кг 2В12ДОр 42 0 0
* Кондитерские изделия 10 коробок по 12 шг 414,00р. 25 0 5
* Кондитерские изделий 30 з5ск 3 64£.0Ср. 40 0 50
+ Кондитерские зделия 24 •, пэковкн по 4 шт. 450,00р. 3 40 5
изделия 24 упаковки по 500 г 945,00р. 104 0 25
Хлебобулочные изделия 12 упаковок по 250 г 40БДОр 0 25 v
Запись: [Н | । | ► || Н kj ?9 < >
Рис. 5.26, Таблица Товары базы данных «Борей»
Для того чтобы внести изменения не во все записи, а только в те, где это необ-
ходимо, в бланке запроса нужно сформулировать условие отбора. На рис. 5.26 по-
казана таблица с данными о товарах. Для товаров из категории «Кондитерские
изделия» значение минимального запаса увеличим на десять процентов. После-
довательность действий будет такая:
Создадим запрос с помощью мастера простого запроса и добавим в него таблицу
Товары, выбрав поля <одТипа и ЛинимальныйЗапас.
2. Откроем запрос в режиме конструктора.
Запросы
121
3. По таблице Типы определим, какой код соответствует типу «Кондитерские
изделия» - 3.
4. В запросе для поля Кс Типа введем условие отбора: =3.
5. Выберем из списка Тип запроса элемент «Обновление». В бланке появится
строка «Обновление».
6. Для поля МинимальНЫЙЗап; в строке «Обновление» введем формулу:
Int ([МинимальныйЗапас] * 1,1)
7. Просмотреть данные, подвергающиеся обновлению (одно поле), можно, если
переключить запрос в режим таблицы (командой Вид => Режим таблицы).
Кнопка Запуск (с красным восклицательным знаком) позволяет выполнить
обновление в режиме конструктора (рис. 5.27).
Рис. 5.27. Запрос на обновление в режиме юн стр; ктпра
После выполнения запроса можно открыть таблицу Товары и убедиться. что
значения минимального запаса для выбранного типа товаров действительно из-
менились (где было, к примеру, 10, станет 11). Поскольку величины в этом поле
являются целыми (нельзя хранить на складе 0.3 коробки конфет), в формуле ис-
пользована функция округления до целого lnt(). В формуле использовано также
имя поля МинимальныйЗапас из самого запроса, а не из таблицы (этого вполне дос-
таточно). При необходимости запрос можно сохранить и, изменив параметры на
бланке, выполнить другое обновление.
122
Главг 5
Запрос на удаление
Запросы служат не только для выборки данных из таблиц. Существует ряд
операций по автоматизированному редактированию данных, в которы» запросы
незаменимы. Например, удаление большого числа записей из таблицы. Здесь
ошибки оператора могут привести к потере нужных данных, а результат выпол-
нения такой операции трудно проконтролировать. Намного проще эта же задача
решается программным путем. Для автоматизации удаления должно быть выпол-
нено одно словие - оператор обязан определить условие отбора записей для уда-
ления каклогическое выражение.
После того как рассмотрены два предыдущих примера, совсем просто объяс-
нить, как выполнить запрос на удаление. Уже понятно, что такой запрос позво-
лить исключит из таблицы (или из связанных таблиц) записи, удовлетворяющие
некоторому условию. Алгоритм запроса следующий:
1. Создайте запрос и включите в него нужную таблицу.
2. Перенесите в бланк запроса поля, для которых должно быть сформулировано
условие отбора.
3. Выберите из списка Тип запроса элемент «Удаление». В бланке появится
строка «Удаление».
4. Заполните строку «Условие отбора» так, чтобы были отобраны только те запи-
си, которые надо удалить.
5. Для просмотра записей, которые будут удалены, выберите команду Вид =>
Режим таблицы. Для выполнения запроса, то есть физического удаления
записей, нажмите кнопку Запуск.
Запрос на создание таблицы
Запрос может служить средством создания новой таблицы. В обычном запро-
се пользователь имеет возможность соединить поля и записи нескольких таблиц,
создав тем самым объект базы данных, который выполняет функции таблицы.
Все данные, которые будут использованы в таком запросе, будут располагаться
в исходных таблицах. Но таким же способом можно создать и новую, реально су-
ществующую таблицу с данными. Таким способом можно превратить несколько
связанных таблиц в одну. Запрос на создание таблицы выполняется за несколько
шагов.
1. Создайте запрос в режиме конструктора и включите в него все необходимые
таблицы. Если таблиц несколько, они должны иметь поля для связи.
Запросы
123
2. Определите связи между таблицами. Программа пытается сама устанавливать
связи, если находит поля с одинаковыми именами и типами. Если Access не
может создать связи автоматически, создайте их, перетаскивая мышью имена
полей из одного списка в другой.
3. Отредактируйте бланк: создайте графы, соответствующие полям иуд) щей
таблицы, введите (при необходимости) условия отбора и/или сортировки,
4. Выберите из списка Тип запроса элемент «Создание таблицы».
5. Просмотрите (Слученнуютаблицу, переключившись в режим таблицы коман-
дой Вид => Режим таблицы. Вы увидите таблицу в том виде, как она будет
создана после завершения операции. Если результат вас устроил, нажмите
кнопку Запуск. Программа запросит имя новой таблицы и создаст ее.
Завершим эту тему рядом замечаний.
Как вы уже поняли, разработка запроса на создание таблицы содержит два
этапа. На первом создается обычный запрос любым доступным и удобным спосо-
бом. На втором появляется новая таблица после того, как обычный запрос пре-
образуется в запрос на создание таблицы. Выполнение второго этапа означает
копирование данных внутри одной базыданных или в другую базу данных.
Если в запрос входят связанные таблицы и вы перенесли все их поля в бланк
при помощи символа «звездочка» (то есть не указывая поля по отдельности!, то
программа автоматически оставит в новой таблице только одно поле из двух ис-
пользованных для организации связи. Если вы переносите поля в бланк запроса
по отдельности, то в новой таблице появятся два связных поля. Если они имеют
одинаковые имена, то кним будут добавлены именатаблиц-источников.
Запрос на создание таблицы можно использовать неоднократно и двумя спо-
собами. Если вы попытаетесь открыть такой запрос или нажмете кнопку Запуск
в режиме конструктора, то запрос будет запущен на выполнение и программа
предложит перезаписать полученную ранее таблицу, то есть создать ее заново.
Если же вы выберете из списка Тип запроса команду «Создание габлицыщ то
Access предложит вам ввести новое имя для новой таблицы. Так можно создать
любое число новых таблиц. Разумеется, данные в них будут дублироваться.
В запрос на создание таблицы можно включить и вычисляемое поле. В соз-
дание! таблице оно будет преобразовано в обычное, но заполнится вычисленны-
ми данными в соответствии с заданным выражением.
Гпава 6
Формы
Формы - второй, альтернативный способ представления данных, который ис-
пользуется, в частности, когда табличное представление данных неприемлемо.
Удобство форм заключается в том, что разработчик может разместить поля так,
как требуется, и вдобавок снабдить их флажками, кнопками и другими элемента-
ми пользовательского интерфейса. К тому же формы удобны для программной
обработки данных.
Кроме того, форма может использоваться для поиска данных. Если пользова-
тельская задача требует документов определенного вида, то без форм обойтись
практически невозможно. В «которых случаях формы позволяют вывести на экран
больше данных, нежели таблицы. Эго достигается при помощи объектов, обеспечи-
вающих «трехмерность» данных (например, - раскрывающихся списков). Если
изъять формы из Access, то эта программа превратится в заурядную СУБД, каких
множество. Мне кажется, что именно разнообразие форм, их внешний вид и лег-
кость, с которой они создаются, придают Access определенный «шик».
Форма в Access соединяет два полярных взгляда на работу с современной про-
граммой «от Microsoft». С одной стороны, для создания форм разработан простой
в использовании мастер форм. При желании в нем можно построить форму за не-
сколько минут без малейших усилий - просто надо соглашаться со всем, что
предлагает мастер. С другой стороны, многие эффекты в форме невозможны без
программирования и знания некоторых тонкостей работы СУБД. Изучать формы
легче всего, рассматривая «кубики», из которых они строятся.
6.1 .Автоформы
В Access встроено несколько инструментов, позволяющих создать форму авто-
матически, с минимальным участием разработчика. Такие формы получили назва-
ние автоформ. Рассмотрим пример создания такой формы. Вначале необходимо
нажать кнопку Создать на вкладке Формы.
На рис, 6.1 показано окно, которое позволяет выбрать вид формы.
Формы
125
Новая форма
Автоматическое создание
фор с полями,
рзсположвнньни в един
столбец.
'tifcf
Копгтругтар
Mgcrwjwp?
Аетифрй^ nrwu
Дьтофорн* чеитзчная
АвгоФ.р*ч 1еЬинчн«г1
Артосов: свОД-кга i«nne
f^T&i+iDpHa ГСрДнТА длагрпивд
/Ь-лгр5г+$5
Сродьзя ташииа
Выберите в качестве
ИсЮчниИё данных таблицу ИЛИ
запрос1
Рис. 6,1 Окно для выбора вида формы
Существует три стандартных вида форм, которые программа может построить
автоматически. Используем для примера таблицу Заказы из базы данных
«Борей». Применяем вариант «Автоформа: в столбец».
Программа создаст в этом случае форму, показанную на рис. 6.2. Действитель-
но, все поля таблицы выстроены на ней «в столбец». В таком случае на экран вы-
водится одна из записей таблицы. На этом рисунке форма оставлена в том зиде,
как она была сгенерирована программой. Столбцов получилось два из-за того,
что полей много. Есть и недостаток: подписи находятся слишком близко к полям,
и для подписей не хватает места. Этот недостаток легко исправляется вручную,
в режиме конструктора (надо увеличить для всех полей величину отступа от ле-
вого края). В остальном форма получилась вполне приемлемой. Видны также
списки подстановочных полей.
Ленточная форма показана на рис. 6.3. Она похожа на таблицу, но данные
в ней расположены не так компактно, как в таблице. Каждая запись занимает от-
дельную строку - «ленту».
Для форм, создаваемых автоматически, можно выбрать фоновый рисунок. С ри-
сунком формы смотрятся, несомненно, привлекательнее. В режиме конструктора
выберите команду Формат => Автоформат и измените фон в режиме диалога.
В режиме просмотра форм в меню Окно появляется команда По размеру
формы. Эта команда позволяет автоматически настроить окно формы. Допус-
тим, вам необходимо, чтобы в ленточной форме была видна только одна запись.
Вы делаете окно по высоте меньше чем нужно, так, чтобы текст одной строки не
был виден целиком, а затем применяете указанную выше команду. Программа
сама установит высоту окна оптимальным образом.
126
Глава 6
3 Заказы
Код заказа 1Q248
v
Сотрудник Кротов, Андрей v
Дата размешен)
Дата назначены: 01-08-1936
Дата исполнены 1&-07-19Э6
v
Стоимость пост- 32.38р.
Индекс получате S01Ю л
Ст pat п получате Финляндия
и
Получате пь Wailian Hcikku
Адрес помете г Tprikatu 38
Город .ид^чвтел Оулу
Область получал
Запись: Тр «| 1 Гf | И>*] hj 830
Рис. 6.2. Форма в и олбец»
'I- ЯЁЗ
Код заказа Клиент Сотрудник Дата размещения Деть назначения л
10218 Wailian v F сотов Андрей V 01 |)81°ЭБ
10249 Т oms Spezialitaten v Air.fiai Иван V- 1Е-3013Э6
v Воронова Дарья W 08-07-1936 05-0&1НЭ6
10251 Victual!®* en stock v Е абкотч. v D8071S96 05-98-1995
10252 Supremes defcos v j ю Дарья V 09-07-1996 ОБ-З&^ЭБ
Ct. 1 if M 4 Г з FjM из 830 < >
Рис. 6.3. Ленточная форма
Табличная форма не отличается от обычной таблицы. На самом деле, это и есть
обычная таблица, имеющая статус формы. Или, иными словами, для формы уста-
новлен режим таблицы. Это можно сделать с помощью списка Вид (на главной па-
нели инструментов). Для того чтобыувидеть истинный видтабличной формы, надо
использовать этот список и выбрать из него элемент «Режим формы». Обычно таб-
личная форма при переключении в «Режим формы» принимает вид ленточной.
Формы
127
6.2. Мастер форм
Создание форм с помощью мастера происходит примерно так же, как и с помо-
щью генератора автоформ, но мастер предоставляет больше возможностей. С помо-
щью мастера можно определить, какие поля надо использовать в форме. Поскольку
можно выбирать поля разных таблиц и запросов, появляется возможность сделать
форму на основе связанных таблиц. Используем в качестве примера базу данных
«Борей». В ней есть таблица Товары, которая связана с таблицей Заказано по
значению поля КодТовара. Тип связи - щин-ко-многим» Даже из названий таблиц
понятно назначение этих данных: первая таблица хранит информацию обо всех то-
варах на складе, а вторая - о том, что было продано (с разбивкой по заказам). Мож-
но создать форму, в которой были бы показаны обобщенные данные по каж юму
товару. Для этого удобно использовать мастер.
Чтобы запустить мастер форм, перейдите на вкладку Формы, а затем щелкни-
те команду Создание формы с юмощь» мастера.
Первый шаг мастера форм показан на рис. 6.4. Здесь надо указать i оля,
которые необходимы для построения формы. Их можно выбирать как из таблиц,
так и из запросов. Сразу хочу сказать: брать большое количество полей из связан-
ных таблиц не имеет смысла - мастер в этом случае не сможет построить пра-
вильно работающую форму. Мы выберем некоторые поля из указанных таблиц
и перейдем к следующему шагу.
таблиц... и апрссы
Таблица Заказано
Выверите лоляд-- формы.
выбор или
Доступные поля:
КодТоБ^ра
КодТовара
Маркл
Г >, '[| КодПоставш! а
----Тсвэры.Цена
1_ -fo11»' j I |
Рис. 6.4. Первый шаг мастера форм
Глава 6
Второй шаг мастера форм показан на рис. 6.5. Мастер определил по типу свя-
зи, что необходимо построение двух форм, так как в одной запрошенные данные
разместить физически невозможно. Предлагается два варианта: создать форму
с подчиненной формой или две формы (вторая будет запускаться кнопкой из
первой). Выберем первый вариант - более компактный.
Создание форм
I бя^беркге инд предс т вяления
лиена «.Цазай | Ддлва j Готерр ]
Г; УДрЫ
Рис. 6.5. Второй шаг мастера форм
На третьем шаге мастера (рис. 6.6) надо выбрать тип формы. Мы уже познако-
мились с типами в гредыдущем разделе. Выберем табличный вариант, хотя это
непринципиально - можно было бы выбрать и ленточную форму.
Следующий шаг мастера (рис. 6.7) - дизайнерский. Содержание формы
нельзя изменить, но можно выбрать стиль: фон и стиль оформления полей
(шрифт, рельеф). Стиль «Камень» используют довольно часто - он удобен для
восприятия, не отвлекает внимание. Слово «Подпись» в левой части окна напо-
минает нам, что мастер использует в форме подписи полей, если они были
определены в таблице. Точнее, подписи используются для объекта «надпись»,
привязанного к полю. Действительно, форма достигает такого уровня шзайна,
что обычные имена полей с цифрами, со знаками подчеркивания вместо пробе-
лов между словами смотрятся как-то несолидно. Я рекомендую использовать
в формах подписи, тем более что на их создание тратится немного времени.
Формы
129
Создание форм
Выберите внешний вид подчинение форты;
сводная диаграмма
| «-Унепа
дацт|/-ны i
') табличный
сводная таблиц*
Рис. 6.6. Третий шаг мастера форм
Создан! • форм
Выберпе *pe£te»*b*t с *и пь
Рис. 6.7. Четвертью шаг мастера форм
Последний шаг мастера форм показан на рис. 6.8. Здесь можно задать имя дня
новых объектов (теперь мы видим, что будут созданы две формы, одна из них
подчиненная) и выбрать направление дальнейшей работы: просмотреть го говую
форму или взяться за доделку того, что не сумел сделать мастер форм.
5-870
130
Глава 6
. ...
Задайте имена форм:
(Верна I Говеры!
Подчиненная Законно подчиненная . -рна
форма
Тлэамы все сведения, необходимые для создания
форм- 'С помощью мастера.
Дальнейшее Действия
Сокрыть ферму для грюсмстра и ввода данных
Измени t макет формы,
И Вывести ^правку по работа с формой?
Рис. 6.8. Пятый шаг мастера форм
Результат работы мастера форм показан на рис. 6.9. Для каждого вида товара
в подчиненной форме показан процесс продажи этого товара: каждая запись со-
ответствует одному заказу, который был выполнен фирмой-продавцом. Посколь-
ку количество доступных записей в подчиненной форме может быть любым,
в ней предусмотрена собственная полоса прокрутки. Подчиненная форма пред-
ставлена в табличном виде: ширину столбцов и высоту строк можно изменять
при просмотре, не прибегая к режиму конструктора. В целом такие формы доста-
точно удобны. В том случае, когда какие-то параметры форм надо изменить
(например, размеры), форму надо открыть в режиме конструктора и переделать.
6.3. Конструктор форм
Так же как таблицы и запросы, формы можно редактировать в режиме кон-
структора. Для его запуска на вкладке Формы есть две кнопки: изменить сущест-
вующую форму можно, нажав кнопку Конструктор, а запустить пустое окно
конструктора, чтобы начать работу с новой формой, можно, щелкнув кнопку Соз-
дать, а потом выбрав пункт «Конструктор» в окне диалога.
Формы
13!
_jdl Товары!
► ।код говоря В , - . '
Марка Gustaf': Knaclv’vod
Паснвиущ Р8 Knacketorod АВ v
Цена 345,00р.
-V
Цена [ Количество |
320,00р. 70
320.00р.
400 ООр ю
400 да
400,00р 1D
1 I I 5 COHJ 13
Запись:(кГ]|~< j | -------й L fr ][~М |;НЁ] из 79
Рис. 6.9. Форма, созданная мастером форм
Окно конструктора форм показано на рис. 5.1( Одновременно с окном откры-
вается Панель элементов. На этой панели расположены кнопки для создания
элементов управления (флажков, кнопок, надписей и т. д.). Кроме этого, на пане-
ли есть кнопка с белой стрелкой для выбора объектов формы и кнопка-пере-
ключатель Мастера для включения режима мастера - если этот режим включен,
то при создании нового элемента управления автоматически запускается мастер,
чтобы определить параметры элемента. Разработчик может отказаться от исполь-
зования мастеров, и тогда элемент управления создается как заготовка, без опре-
деления многих свойств. Их необходимо будет задать на дальнейших этапах.
На рисунке также показано контекстное меню, связанное с рабочим полем
конструктора. Оно тоже имеет ряд полезных команд.
Цвет заливки/фона - выбор цвета фона формы.
Линейка, Сетка, Панель элементов - показ и скрытие соответствующих ин-
струментов разработчика.
Колонтитулы - по аналогии с печатными документами, форма может иметь
верхний и нижний колонтитулы для размещения неизменяемой информации.
Заголовок/Примечание формы - эта команда позволяет создавать зоны, по-
хожие на колонтитулы.
Свойства - открытие окна свойств рабочей области формы.
5
132
Глава 6
Рис. 6.10. Окно конструктора форм
При работе с формой в режиме конструктора следует активно использовать
мышь. Например, почти всегда приходится менять размеры рабочего поля
формы, а это удобнее всего делать мышью. Границы заголовка и примечания
тоже сдвигаются мышью, причем указатель мыши надо наводить точно на верх-
ний край серой горизонтальной линейки, чтобы указатель принял вид черного
крестика с двумя стрелками.
Окно свойств формы открывается при помощи контекстного меню, связанного
счерным квадратиком, находящимся напересечении горизонтальной и вертикальной
линеек. Есть несколько важных параметров, которые определяют вид окна в целом.
Подпись - текст, выводимый в заголовке окна.
Режим... — несколько параметров, которые определяют тип формы.
Полосы прокрутки - подключение одной или двух полос прокрутки (или от-
ключение обеих).
Кнопки перехода - подключение или скрытие кнопок перехода по записям,
Автоматический размер - изменение размера формы для показа записи це-
ликом (в главном меню есть команда Окно => По размеру формы, которая вы-
полняет такую же функцию).
Тип границы - возможность изменения размеров окна пользователем
(по умолчанию принята опция «Изменяемая», то есть изменение размеров разре-
шено).
Кнопки размеров окна, Кнопки закрытия - вывод кнопок управления окном.
Формы
133
Всплывающее окно - если «да», то окно формы появляется над всеми откры-
тыми окнами.
Модальное окно - окна такого типа не позволяют пользователю работать
с другими окнами, пока не закрыто это. Наиболее распространенный тип модаль-
ных окон - сообщения программ, выводимые на экран.
Параметры, которые отвечают за представление информации в окне, находят-
ся на вкладке Данные. При разработке форм полезно познакомиться со всеми
свойствами, чтобы иметь возможность применять их в случае необходимости.
Разрабатывая форму, необходимо решить ряд задач: определить источник дан-
ных (обычно таблицу или запрос), создать необходимые элементы управления и
при необходимости добавить программы для обработки данных.
Очень часто для настройки элементов форм используется окно свойств. Каж-
дый объект имеет присущий ему набор параметров, поэтому содержание окна
свойств может меняться. Запускается это окно командой Свойства, которая есть
как в контекстных, так и в обычных меню.
6.4. Элементы управления
Надпись
Надпись - самый простой элемент управления. Он позволяет разместить в форме
текст небольшого объема: заголовок, подсказку, копирайт и т. д.
Для ее создания надо (в режиме конструктора) нажать кнопку Надпись на па-
нели инструментов и нарисовать прямоугольник в рабочем поле формы. Потом
внутри прямоугольника можно написать текст (рис. 6.1 ]).
_3 Форма 1 : форма
। ., '1 .2.1. з',и7*' 5 1 -1 • 7 74- • • г6 1 Г7»Л 1
Область даты*
Рис. 6.11 Надпись в форме
134
Глава 6
Поскольку надпись - простой объект, то и свойств у него немного. Для при-
мера познакомимся с некоторыми из них (другие элементы управления имеют та-
кие же свойства). В окне свойств есть несколько вкладок. На вкладке Макет
можно найти такие параметры.
Подпись - текст из которого состоит надпись.
Адрес гиперссылки, Дополнительный адрес - надпись можно превратить
в гиперссылку (с локальным или интернетовским адресом). Второй параметр ис-
пользуется, когда надо указать адрес внутри документа.
Вывод на экран - элементы управления можно скрывать (и использовать,
к примеру, для хранения данных для программ).
Режим вывода - можно создавать элементы управления, которые видны на
экране, но не выводятся на печать и наоборот. Эта возможность может оказаться
полезной, если на основе формы создается документ для вывода на бумагу.
От левого края, От верхнего края, Ширина, Высота - параметры опреде-
ляющие размеры и положение элемента управления. Их всегда приходится под-
бирать, чтобы форма выглядела красиво.
Тип фона. Цвет фона - параметры, которые позволят создать цветной фон
элемента управления.
Тип границы. Цвет границы, Ширит границы - опции, определяющие
рельефность объекта и внешний вид его рамки.
Цвет текста, Шрифт, Размер шрифта, Насыщенность, Курсив, Подчеркну-
тый, Выравнивание текста, Направления чтения. Начертание цифр, Левое
поле, Верхнее поле, Правое поле, Нижнее поле. Междустрочный интервал -
параметры форматирования текста. Их назначение ясно из названий. Обычно исполь-
зуются далеко не все из них.
На вкладке Данные есть только один параметр: Смарт-теги. Он позволяет
создать ссылку для открытия стандартных функций приложения Outlook (напри-
мер, календарь запланированных пользователем мероприятий).
На вкладке События находится перечень событий, которые можно включить
в работу формы. События позволяют запрограммировать реакцию программы на
определенные действия пользователя. Для надписи фиксируются такие события:
Нажатие кнопки — щелчок левой кнопкой мыши на объекте;
Двойное нажатие кнопки - двойной щелчок левой кнопкой мыши на объекте;
Кнопка вниз - кнопка мыши нажата, но еше не отпущена;
Перемещение указателя -движение указателя мыши;
Кнопка вверх - кнопка мыши отпущена.
Формы
135
На вкладке Дополнительно есть такие свойства.
Имя - уникальный идентификатор элемента управления. Он может использо-
ваться в программах для изменения свойств элемента, считывания данных, изме-
нения данных и т. д. В имени можно использовать русские буквы, но нельзя
использовать пробелы.
По вертикали - с помощью этого параметра можно выводить текст в верти-
кальных строках.
Всплывающая подсказка - хорошее свойство, позволяющее придать форме
профессиональный вид. Все кнопки известных программ снабжены всплы-
вающими подсказками, и пользователи привыкли к этому.
Идентификатор справки - ссылка на элемент встроенного справочника.
Контекстное меню - возможность создать контекстное меню для элемента
управления. Другой вариант - вписать в эту строку имя существующего макроса,
тогда этот макрос будет выполняться по щелчку правой кнопки мыши.
Дополнительные сведения - возможность сохранить здесь строку длиной до
2048 символов. Обычно это свойство используется при программировании.
Кроме этих вкладок в окне присутствует вкладка Все. На ней повторены все
параметры, которые есть у данного элемента управления. Такую вкладку удобно
использовать для поиска необходимого параметра.
Если вы хотите получить подробные сведения о каком-либо параметре, то, от-
крыв окно свойств, установите курсор на поле ввода параметра и нажмите клавишу
F1 Многие параметры имеют стандартные имена и используются в подпрограммах
на Visual Basic. В терминах программирования - это свойства (properties) г>бъ 'ктов.
Многие элементы управления состоят из двух взаимосвязанных час-
NB тей, одна из которы\ - надпись. Чтобы не путать эти объекты с ав-
тономными надписями, их обычно называют подписями.
Флажок
Работая с программой, мы очень часто используем флажки для установки пара-
метров и выбора режимов. Поэтому нет смысла подробно объяснять, что такое фла-
жок и для чего он может быть нужен. Главное, на чем надо остановиться, -
каждому флажку ставится в соответствие переменная логического типа которая мо-
жет принимать значения ДА или НЕТ в зависимости от состояния флажка (сброшен
или установлен). Гораздо интереснее разобраться, как на практике внедрить флажок
в форму. Для примера создадим флажок который будет управлять выводом и скры-
тием поля.
136
Глава 6
1. Раскройте форму в режиме конструктора, нажмите на панели Панель элемен-
тен кнопку Флажок и очертите в форме место для будущего флажка.
2. Задайте для флажка подпись (например, «Скрыть»).
3. Раскройте окно свойств поля и найдите его имя (допустим, это Поле1).
4. Передвиньте флажок и его надпись так, чтобы они оказались рядом с полем -
пользователь должен понимать, что именно скрывает или юказывае флажок;
5. Раскройте окно свойств флажка и найдите имя флажка допустим, это Флажок1).
Выберите вкладку События. Нажмите кнопку с тремя точками в строке Нажа-
тие кнопки. В открывшемся окне выберите опцию «Программы». Откроется
окно редактора Visual Basic. В нем надо создать следующую подпрограмму;
Private Sub Флажок1_С11ск()
If ФлажоИ Then
Forms! орма11 [ЛолеТ Visible - True
Else
Forms! ipwaV [JlonJ.]. Visible - False
End If
End Pub
Алгоритм работы подпрограммы достаточно прост. Если флажок установлен
(ИФлажок1). то свойство видимости (Visible) для Поля1 из формы Форма уста-
навливается как ДА [True), то есть поле видимо. В противном случае (Else) то же
самое свойство устанавливается как НЕТ (False), то есть поле скрывается. Вы-
полнение подпрограммы происходит после щелчка мышью на флажке, то есть
после изменения его состояния. Теперь при работе с формой присутствие поля
будет определяться состоянием флажка.
В данном примере работа с флажком заключается в анализ' его значения: имя
флажка представляет собой переменную логического типа. Основным событием,
которое меняет статус флажка, является нажатие кнопки (click). Подпрограмма
обработки этого события в нашем примере ничего не делает с самим флажком.
Она лишь меняет свойство Visible указанного нами поля. Этот пример можно не-
сколько усложнить. Допустим, некоторые поля должны выводиться в форме толь-
ко после ввода пароля. Тогда подпрограмма для обработки события флажка
может выглядеть так;
Private Sub Флажок! Clickf)
If Флажок! Then
If InputBox("Введите пароль") ’2345987 Then
Feu ms! Форма! ! [Поле! ] Visible lr„j
Формы
}37
Else
Forms! ОормаТ!Флажок! = False
End If
Else
Forms! Форма!'[ Лоле!].Visible - False
End If
End Sub
В этом случае при попытке открыть поле с помощью установки флажка про-
грамма выведет на экран окно диалога (стандартная функция InputBoxO) с сооб-
щением «Введите пароль», и пользователь должен будет ввести пароль. Потом
введенное значение с помощью оператора If будет сопоставлено с записанным в
памяти паролем (2435987). Если пользователь введет пароль неправильно, поле
не откроется, а флажок будет сброшен. Это самый примитивный способ защиты
данных паролем. Здесь даже не используется скрытие введенных пользователем
символов (для этого пришлось бы создавать еще одну форму), а значение пароля
должно храниться в зашифрованном виде. И тем более этот способ не имеет ни-
какого отношения к системе доступа, существующей в Access. Такой прием не
может использоваться для защиты от преднамеренного взлома. Зато это подходя-
щий способ для защиты от неосторожных действий пользователя или разграниче-
ния полномочий там, где пользователи в определенной степени доверяют друг
другу. Кстати, существует еще и барьер компетентности: есть много людей, ко-
торым не сломать и такую защиту... Бывает немало ситуаций, когда простых
средств защиты вполне достаточно.
Поле. Пример вычисляемого поля
Поле самый распространенный элемент управления. При создании формы
в полях размещаются данные из таблш и запросов. Поле состоит из подписи
и собственно поля (рис. 6.12). Обе части имеют свой набор свойств. Если поле
создается в режиме конструктора, то имя поля (в нашем примере это П<>ле2),
которое присваивается программой автоматически, повторяется и в подписи.
Разработчик может стереть подпись и вписать в нее текст по своему выбору, Сло-
во «Свободный» означает, что для этого поля не определен источник дачных.
Когда форма создается с помощью мастера, то для всех полей автоматически на-
ходится источник данных. Когда разработчик создает свое поле, он должен поду-
ГП Глава 6
мать, как это поле будет заполняться данными. Вариантов тут несколько. Поле
может использовать данные из таблицы (запроса), заполняться программным
способом или быть вычисляемым (содержать формулу). В главах, посвященных
примерам баз данных, неоднократно рассказывается о создании таких полей.
Здесь же в качестве примера рассмотрим, как создается вычисляемое поле.
Допустим, в форме есть поле, в котором занесена дата окончания некоторой
работы. По всей видимости, данные для этого поля надо брать из некоторой таб-
лицы, но мы для примера создадим автономное поле, в которое пользователь мо-
жет занести дату вручную. Рядом создадим поле-индикатор, которое будет
менять свой вид, если срок окончания работы прошел, а работа не завершена.
Признаком завершения работы служит установка флажка. Получается микро-
органайзер на одну задачу — такие «кирпичики» удобно использовать при разра-
ботке баз данных.
Создадим поле с подписью «Дата» и именем ДатаОкончания. С помощью окна
свойств зададим в строке Формат поля «средний формат даты».
Создадим флажок с подписью «Выполнено» и именем ДОК (чтобы была мне-
моническая связь с первым именем).
Теперь создадим вычисляемое поле. Подпись для него можно не задавать
(в группе элементов уже есть две подписи). Назовем это поле СообДОК. Никаких
дополнительных свойств пока задавать не будем, но сделаем это поле достаточно
длинным, чтобы в нем уместилась фраза. Теперь для поля надо создать функцию,
которая будет управлять значением поля. Вот ее листинг:
Function SoobData(PoleDat As String, PoleFlag As String, PoleSoob As String)
As String
P'iiu PData As C"iitr"l
r'im Flag As i.TM?--;
Dim F.00D As TextBcx
Pat PData = Forms!Форма! Controls(PoleDat)
Формы
139
Set Flag - Ferms!Форма 1,Controls(PoleFlag)
Set Soob = Forms1Форма!.Controls!PoleSoob!
SoobData -
Soob ForeColor - vbBlack
If (Mot Flag) And PData > tt1/1/198Qtt Then
Select Case Date - PData
Case 1 To 3
S""]jD.4t.4 "Кэньпн 3 дняй"
Soob.ForeColor = RGB(O, 80, 0)
Сазя n
SoobDat a " Сагодня"
Soob ForeColor = vbBlue
Case Is < 0
SoobData - "Просрочено"
Soob. ForeColor = vbRed
Case Else
SoobData
So b ForeColci = vbBlack
End Select
End If
End Function
У этой функции три аргумента, которыми являются имена созданных полей.
Поэтому функцию можно использовать и для других трех полей такого типа.
С помощью операторов Dim и Set происходит передача аргументов функции.
Предполагается, что функция будет использоваться в форме с именем Форма!.
Оператор И позволяет функции работать, если флажок сброшен и дата введена.
Сама функция реализована с помощью блока Select .,. End Select (стандартная
конструкция Visual Basic). В зависимости от разницы в днях между указанной да-
той и текущей датой (Select Case Date - Pdata) функция возвращает одну из фраз.
Date — это системная переменная, хранящая текущую дату. Разность
NB между текущей и указанной датой положительна, если указанная да-
та предшествует текущей.
Одновременно меняется цвет шрифта (свойство ForeColor) поля, которое соот-
ветствует объектной переменной Soob.
140
Глава 6
Функцию надо поместить в модуль. Выберите команду Сервис Макрос =>
Редактор Visual Basic. Щелкните название базы данных на левой панели редак-
тора и выберите из контекстного меню команду Insert Module. Появится окно
модуля (имя первого модуля обычно Модуль!), в котором и надо вставить текст
такой функции.
Теперь для поля СообДОК можно определить источник данных. В окне
свойств в строке Данные надо вписать следующее выражение:
=ScobData("ДатаОкснчания" "ДОК" ‘СообДОК"
В принципе форма уже будет работать, и это можно проверить, но реакция на
изменение данных в полях окажется недостаточно быстрой. Необходимы еще
команды обновления формы. Например, в окне свойств поля ДОК на вкладке
События надо определить такие события, как После обновления и Нажатие
кнопки. Для этого необходимо воспользоваться кнопкой с тремя точками и вы-
брать опцию «Программы». В заготовку подпрограммы надо вписать единствен-
ную команду Me.Refresh (обновить текущую форму). Например, для первого
события функция будет выглядеть так:
Private Sub flOK_Afterllpdate(}
Me Refresh
End Sub
Для поля ДатаОкснчания можно определить свойства После обновления и По-
теря фокуса.
На этом создание компьютерного «узелка на память» заканчивается. Создан-
ные поля являются «свободными» (unbound), поэтому данный пример будет ра-
ботать, если ввести в поле дату и щелкнуть флажок. После закрытия формы
данные не сохранятся. В реальном проекте эти поля должны быть привязаны
к данным из таблицы. Вид полей показан на рис. 6.13.
1 ФормМ : форма
1Выпол-мг<-1
Цата:
23-янь-20М □ Меньше 3 дней
гя
Рис. 6.13. Поля в форме
Формы
14)
Списки
В Access существует две разновидности списков как элементов управления:
«Список» и «Поле со списком». Рассмотрим работу с ними на примере поля со
списком в базе данных «Борей». Для создания этого элемента в форме надо вы-
полнить следующую последовательность действий:
В режиме конструктора формы нажмите кнопку Поле со списком и нарисуйте
мышью прямоугольник - место будущего списка. Запустится мастер полей со
списком.
2. На первом шаге мастера установите переключатель в положение «поле со спи-
ском будет использовать начення из таблицы или запроса»;
3. На втором шаге мастера укажите необходимую таблицу или запрос. Выберем
таблицу Поставщики.
4. На третьем шаге мастера задайте поля таблицы. Выберем поля: КодПоставщика,
Должность и вращаться К Порядок выбора полей определяет порядок следова-
ния их в списке, когда последний раскрывается в форме.
5. На четвертом шаге мастера можно выбрать режим сортировки. Выберем Код-
Поставщика.
6. На пятом шаге мастера настройте ширину колонок шнека. Мастер предложит
скрыть ключевой столбец (КодПоставщика). Это разумное решение, согласимся
с мастером.
7. На шестом шаге мастера необходимо задать подпись для поля со списком.
Я выбрал подпись «Поставщик».
8. После того как мастер закончит работу, необходимо задать обязательные свой-
ства списка. Высоту рамки списка целесообразно выбрать равной высоте стро-
ки в форме. На рис. 6.14 показана форма со списком в режиме конструктора.
Рис. 6.14. Поле со списком в режиме конструктора
142
Глава 6
Раскрыв контекстное меню, относящееся к списку, выберем команду Свойст-
ва и посмотрим, какое имя программа дала списку. Имена назначаются гак, что-
бы избежать повторений. Например, у меня список был назван ПолеСоСпискомО.
Затем на вкладке Макет найдем свойство Заглавия столбцов. По умолчанию
там стоит «Нет», то есть заголовки не выводятся. Установим это свойство как
«Да», потому что списки, состоящие из нескольких столбцов, лучше смотрятся,
когда у последних есть заголовки. Затем выберем вкладку События. Она предна-
значена для создания подпрограмм, которые позволят списку нормально функ-
ционировать. Выберем строку Нажатие кнопки. Ясно, что в приложении
должно что-нибудь происходить, когда пользователь раскроет список и щелкнет
мышью один из его элементов. Поэтому для такого события надо предусмотреть
реакцию системы. Справа от строки свойства имеется кнопка с тремя точками,
которая позволяет раскрыть окно модуля (окно построителя) для редактирования
подпрограмм. Щелкнем эту кнопку и выберем опцию «Программы». Доработаем
процедуру обработки события так, чтобы она приняла следующий вид:
Private Sub ПолеСоСпискомО_С11ск()
Msc "Из списка выбрано: & ПолеСоСпискомО
End Sub
В дальнейшем при выборе элемента списка будет раскрываться окно сообще-
ния. Далее закройте окно, в котором вы вводили код.
Форма с раскрытым списком показана на рис. 6.15. Напомню, что для реаль-
ной работы с формой вы должны выйти из режима конструктора. Поработав со
списком, можно убедиться в том, что полю списка и переменной ПолеСоСпискомО
присваивается значение поля КодПоставщика, соответствующее выбранному эле-
менту списка. В реальной программе в качестве элементов списка лучше исполь-
зовать текстовые поля — с ними удобнее работать.
Л Форма 2 : форма
Поставщик 1
|Дсл>нг<т~ ~
по :лкупкем
Координатор
Првдсьавнтвпь
Главный менеджер
1 | по
-l 1 -----Директор
Г лавный менеджер
Вероника * удрвпц»
У
Re ^па Мир) у
Yo<i Naoese
Acierto tfel ‘ ж1е 5ни
bi^jfn Chinn
Ian Paving
Рис. .15. Поле со списком в режиме просмотра
Формы
143
Есть несколько способов организовать выбор данных в списке. Во-первых, мож-
но отредактировать свойство списка Источник строк (на вкладке Данные) Оно
содержит инструкцию SQL для отбора записей. В нашем примере она такова:
SELECT Поставщики КодПоставщика, Поставщики Должность, Поставщики ОбращаяьсяК
FROM Поставщики ORDER BY [КодПоставщика];
Изменить указанное свойство удобнее всего, запустив построитель запросов
при помощи кнопки, расположенной прямо в строке. Допустим, мы хотим от-
бирать строки для списка по значению поля Должность. Для этого в запросе в ко-
лонке, соответствующей этому полю, надо указать критерий в строке «Условия
отбора». Например, чтобы в поле показывались только должности, в название ко-
торых входит слово «менеджер»:
Like ‘ «менеджер*'
Окно построителя запросов с введенным условием показано на рис. 6.16 В ре-
зультате инструкция SQL приобретет следующий вид:
SELECT Поставщики КодПоставщика Поставщики Должность, Поставщики Обраща ьсяК
FROM Поставщики WHERE (((Поставщики Должность) Like ’«менеджер*")) ORDER BY
Поставщи ;и. КодПоставщика;
Как видим, в инструкцию, определяющую источник строк, для списка добави-
лась опция WHERE, которая определяет условие отбора записей из таблице .
) Инструкция SQL : построитель млросоя
пс оо-рагтанию j
| Обращаться
Должность v
Попе КодПоставщика
Инятлблицы: юстаещнх?;
Сортирое^
Вывод наэкрапг
Условие отбора!
или
Like 'Менеджер'
Должность
I [оставщики
Рис. 6.16. Построитель запросов для списка
144
Глава 6
У этого способа есть недостаток - отсутствие универсальности. Можно заме-
нить в запросе указанное выражение (Like...) назначение параметра:
[Название должности]
Квадратные скобки обязательны, иначе программа воспримет слово как текс-
товую константу. Имя параметра не должно совпадать с именем какого-либо по-
ля. Кроме того, это имя должно быть достаточно понятным пользователю,
потому что оно будет играть роль подсказки. Теперь при попытке раскрыть спи-
сок программа будет выводить на экран окно для ввода параметра, показанное на
рис. 6.17. Задав то или иное значение (в нашем случае «Директор»), пользователь
обеспечит выполнение фильтрации в списке. В данном случае будут отбираться
записи с точным совпадением значения параметра и поля.
Введите значение параиатр& Г?
нам 5HHG -."’АЖНССТИ
, Директор
__________________________,
\ ОК [ Отмена
Рис. 6.17. Окно для ввода параметра
Если в таблице есть поля с числовыми данными, то можно задавать и матема-
тические критерии отбора. Допустим, мы работаем с таблицей Товары и нам
надо показать только те записи из таблицы, для которых значение поля НаСкладе
больше нуля. Иначе говоря, показать только те товары, которые имеются на дан-
ный момент. Для этого необходимо выполнить следующую последовательность
действий.
Раскрыть окно построителя запросов для списка, как и в предыдущем примере.
2. В пустом столбце бланка в строке «Поле» выбрать из списка имя НаСкладе.
3. В той же графе в строке «Условие отбора» ввести условие: >0.
Для такого запроса инструкция SQL (с отбором трех полей и сортировкой по
полю Марка) будет следующая:
SELECT "свары КодТовара, Товары. Марка Товары НаСкладе FROM Товары WHERE
(((Товары НаСкладе)>0)) ORDER BY "овары Марка,
Разумеется, ее можно напечатать прямо в строке Источник строк окна
свойств списка. Несмотря на то что в запрос добавлено еще одно поле, в списке
оно видно не будет.
Формы
145
Если уже готовый список требуется доработать - создать в нем еще одно поле, -
то нам потребуется:
1. Раскрыть окно свойств списка, выбрать вкладку Макет.
2. В строке Число столбцов указать величину на единицу большую, чем была.
В строке Ширина столбцов указать ширину нового :толбца. например:
•' 2, 544см; 2, 544см; 544см.
Рамки объектов
Если в форму надо вставить графический объект, для него создается элемент
управления, называемый рамкой. Существуе! несколько разновидностей рамок.
На панели инструментов Панель элементов есть три кнопки для создания рамок.
Кнопка Рисунок предназначена для размещения в форме изображения i з гра-
фического файла. Как только пользователь очертит мышью контур области ри-
сунка в форме программа откроет диалог для связывания рамки с графическим
файлом. После выбора файла рисунок будет вставлен и виден в режиме конструк-
тора. Пользователь должен установить рамку вокруг рисунка с соответствии
с размерами последнего.
Кнопка Свободная рамка объекта предназначена для внедрения объектов
OLE из других приложений. При ее нажатии Access открывает окно диалога для
выбора программы-источника, поддерживающей протокол OLE. Можно даже
создать объект прямо в режиме конструктора. Например, если во время работы
мастера при определении типа объекта выбрать «Bitmap Images (рис. 6.13), то
после создания объекта будет подключено окно графического редактора
MS Paint, и с помощью его инструментов можно будет создать рисунок (или ис-
пользовать готовый). Можно также выбрать опцию «Документ Microsoft vVord».
и тогда графический объект (с текстом) можно создать средствами експ авого
редактора. Единственный недостаток такого объекта: он не может прокручивать-
ся и должен быть показан в рамке целиком.
Кнопка Присоединенная рамка объекта предназначена для внедрени; объ-
ектов OLE, хранящихся в базе данных, например рисунков в таблицах. В этом
случае пользователь сам определяет источник данных.
146
Глава 6
Mfr f Dio ft Office Access
Сеида*. новый
О Создать цз файла
Тип объекта;
А.1 JkrBMP wane
flCDSee и - [mage
А СО 5 m Р5Р linage
Л do ₽ »«£osh Image
ешэОпк™
Media
MIDI. Sequence
Package
Добавление в док уме» • нового o6wr »типа 'Bitmap [mage
Рис. 6.18. Окно для выбора типа объекта
Размеры рисунка и рамки не согласуются по умолчанию. Разработчик
должен сам подобрапи их в режиме конструктора. Если рисунок
больше, чем рамка, то он усекается. Это соответствует опции
«Фрагмент» свойства рамки Установка размеров Два других вариан-
NB та позволяют выбирать способы автоматического согласования раз-
меров рисунка и рамки «Вписать в оамку» и «По размеру юмки». Оба
эти варианта предполагают масштабирование рисунка, а не измене-
ние размеров рамки. При масштабировании качество рисунка, как
правило, ухудшается.
Кнопки
Кнопки довольно часто приходится использовать в форме. При создании
кнопки в режиме конструктора надо обрисовать ее контур и задать надпись на
ней, Кроме того, кнопку можно сделать с графическим изображением (с помо-
щью свойства Рисунок). Рисунок можно взять из файла или воспользоваться
встроенной коллекцией значков, состоящей из нескольких десятков изображений.
Мне особенно нравится рисунок дискеты 5,25 дюйма.
Кнопка сама по себе работать, не будет, для нее обязательно надо определить
процедуру, которая будет выполняться при ее нажатии. Эту процедуру надо свя-
зать с событием Нажатие кнопки (Click) с помощыс окна свойств.
Например, кнопка для открытия другой формы (с именем Форма1) должна
иметь такую процедуру обработки события:
Private Sub Кнопка1_СПск()
DoCind DpenForm ’ФормаТ’
End Sub
Формы
147
Если кнопка создается для пересчета данных в форме (что бывает необходимо,
если в форме есть вычисляемые поля), то программа должна быть такой:
Private Sub Кногка1_С11ск()
Me Refresh
End Sub
Объект Me означает текущую форму, поэтому такая процедура годится для
любой формы.
В форму можно, например, включить кнопку, которая запустит встроенный
калькулятор. В коммерческих базах данных это особенно актуально. Тогда про-
цедура будет такая:
Private Sub нопка1_С1гск()
On Error GoTo Егг„Кнспка!_С11ск
Dim > zAopNamt As String
stAppName = "Calc exe"
Call Shell(stAppName 1)
Ех11_Кнопка1_Click:
ExitSub
Егг_Кнопка1_С11Ск:
MsgBox Err Description
Resume Exit Кнопка1_С11ск
End Sub
Можно сделать кнопку и без программирования. Есть набор стандартных кно-
пок, который доступен в мастере кнопок,
Мастер кнопок
До сих пор мы создавали кнопки, самостоятельно определяя их свойства, но
для их разработки можно использовать мастер (на панели инструментов Панель
элементов должна быть нажата кнопка Мастера). Начало процесса создания
кнопки такое же, как и в предыдущих случаях. - надо использовать инструмент
Кнопка в режиме конструктора формы (или отчета) и обрисовать мышью контур
будущей кнопки. Затем в дело вступает мастер кнопок.
Он содержит фиксированный набор готовых инструментов, и на его первом
шаге надо выбрать подходящий. Все они разбиты на категории. Названия кнопок
приведены ниже.
Категория "Переходы по записям^
Найти далее;
148
Глава 6
Первая запись;
Поиск записи;
Последняя запись;
Предыдущая запись;
Следующая запись.
Категория «Обработка записей":
Восстановить запись;
Добавить запись;
Дублировать запись;
Печать записи;
Сохранить запись;
Удалить запись.
Категория «Работа с формой":
Закрыть форму;
Изменить фильтр формы;
Обновить данные формы;
Открыть страницу;
Открыть форму;
Печать текущей формы;
Печать формы;
Применить фильтр формы.
Категория "Работа с гнетом«
Отправить отчет в файл;
Отправить отчет по почте;
Печать отчета;
Просмотр отчета.
Категория «Приложение"
Выйти из приложения;
Выполнить приложение;
Запустить MS Excel;
Запустить MS Word.
Категория «Разное»:
Автонабор номера;
Выполнить запрос;
Выполнить макрос;
Печать таблицы.
Формы
149
Выберем для примера кнопку Выйти из приложения. На втором шаге мастера
можно выбрать изображение на кнопке. Эго может быть произвольный гекхт или
рисунок. Мастер предлагает набор стандартных рисунков, но разработчик иожет
выбрать графический файл, нажав кнопку Обзор. На третьем шаге мастера надо
определить имя кнопки. Имя кнопки представляет собой переменную, и его не надо,
путать с подписью - текстом, изображенным на кнопке. На этом работа мастера
кнопок заканчивается. На рис. 6.19 показан пример формы с заготовкой обычной
кнопки и с кнопкой выхода из программы. Кнопки, созданные с помощью мастера,
обеспечивают весьма быструю реакцию программы - использовать их удобнее, чем
команды меню.
Рис 6.19. Кнопки в форме
Группа переключателей
В некоторых случаях необходимо создавать группу элементов управления.
Группа имеет свою рамку и подпись. Например, если надо создать группу пере-
ключателей, выполните следующие действия:
1. Откройте форму в режиме конструктора.
2. Нажмите кнопку Группа переключателей на панели инструментов Панель
элементов. Нарисуйте мышью прямоугольник, в пределах которого должны
находиться будущие переключатели. Предусмотрите место и для подписей
кним.
3. Ответьте на вопросы мастера групп.
Первый шаг мастера групп показан на рис. 6.20. Здесь надо задать подписи бу-
дущих переключателей. Для примера можно сделать три переключателя.
150
Глава 6
Создание группы переключателей
Задайте подпись для каждого переключателя:
Группа । • । •» течя гелей содержит чабрр кнопок,
флв*м<» или выкпючатеней. Ьыбсритеодимц?
вариантов.
| Подписи;
__I Первая подпись
Вторая подпись
71 Трегья под пись
Рис. 6.20; Первый шаг мастера групп
Второй шаг мастера показан на рис. 6.21. На этом шаге надо выбрать пере-
ключатель, который будет включен по умолчанию. В реальной разработке почти
всегда требуется, чтобы все значения по умолчанию для настроек приложения
были специально определены, иначе пользователю будет трудно работать. До-
пустим, по умолчанию должен быть выбран третий переключатель.
Создание группы пере ключе! лен
Задать переключатель, «сгсльзуемый по-^спчвнио?*
Да, выбор по умолчанию: Третья подпись
ПКвГ
Готово j
Рис. 6.21. Второй шаг мастера групп
Третий шаг мастера групп показан на рис. 6.22. Надо определить значение
каждого переключателя группы. Эти значения будут анализироваться в неко-
торой процедуре (код которой еще предстоит написать), чтобы было ясно, какой
переключатель выбрал пользователь. Числовые значения достаточно удобны,
и можно принять предложенный мастером вариант.
Формы
151
Рис. 6.22. Третий шаг мастера рупп
Четвертый шаг мастера изображен на рис. 6.23. Программа предлагает выбрать
тип элемента управления: переключатель, флажок или выключатель. Интересно, что
в этом окне все три типа элементов управления представлены в работающем виде.
Они служат для выбора самих себя, одновременно являясь иллюстрацией работы
и внешнего вида элементов управления. Для нашего примера подойдет тип «пере-
ключатель». хотя можно было бы использовать и другие два типа. Выключатся! вы-
глядят как кнопки, а флажки - это галочки. Принципы их работы очень похожи
Создание группы
Els It ТИП JHT Г vnp3Einei-tHfl:
Образец 0 ^переключатели
О Первая подпись
О Вторая подпись [ | выключатели
О Третья подпись _
Задайте • рорппенне группы1
С») Ёдав пен-се о с тенью
О утопленное
I фгрцподнятсв
I | || Далге -- [ [ Гртиеи
Рис. 6.23. Четвертый шаг мастера групп
Последний шаг мастера позволяет только задать имя группы переключа елей.
Допустим, это имя ГруппаД. Конечно, в реальном проекте подпись должна нести
смысловую нагрузку, и надо задать свою. А вот имена для элементов управления
программа задает автоматически. Разработчику не рекомендуется их менять, что-
152
Глава 6
бы избежать дублирования имен и путаницы в программах. При работе приложе-
ния имени группы будет присваиваться значение выбранного переключателя.
Переключатели, объединенные в группу, обладают свойством зависимой фикса-
ции. Иными словами, в каждый момент времени только один переключатель мо-
жет быть включен. Если бы мы просто ввели в форму несколько переключателей
(а инструмент для этого тоже :сть — кнопка Переключатель), то их можно было'
бы устанавливать независимо друг от друга - это была бы независимая фиксация.
Можно создать процедуру, которая будет проверять состояние переключате-
лей. Для этого создадим в форме кнопку (с именем Кнопка4) и определим для
события Нажатие кнопки следующую процедуру:
Private Sub Кнопка4_С11ск()
ч - Me Группа4
МьдВс "Выбран переЕльчатель ноиар п
End Sbb
Как зидим. получить порядковый номер выбранного переключателя совсем не-
сложно. Его можно сохранить в переменной числового типа и использовать
в дальнейшем в программе. Форма с переключателем и кнопкой для его тестирова-
ния показана на рис. 6.24. Каждый переключатель состоит из двух объектов: собст-
венно переключателя и подписи к нему. При доработке формы каждую такую пару
можно перемещать в границах группы. Указатель при этом должен иметь форму
раскрытой ладони. Конфигурацию рамки группы тоже можно менять.
. И ФормИ : форма
рутти4
О Первая подпись
О Втирая подпись
О Третья подпись
Запись" [1-1
Рис. 6.24. Пример переключателя
Подчиненная форма
Одна форма рассчитана на использование одного набора данных: таблицы,
связанных таблиц или запроса. Во всех случаях предполагается, что источник
данных может быть виртуально представлен в табличном виде - форма может
переключаться в табличный режим. Использование в форме других данных - по-
Формы
153
мимо этой виртуальной таблицы - всегда наталкивается на определенные трудно-
сти, которые разрешаются тем или иным способом. Довольно часто эта задача
решается путем написания специальных процедур. Другим способом является
создание подчиненной формы. В тех случаях, когда между таблицами существует
связь «один-ко-многим», перед разработчиками встает проблема размещения
данных из связанных таблиц в одном документе.
Рассмотрим алгоритм создания таких форм. Эго позволит решить очень мно-
гие проблемы, возникающие при разработке реальной базы данных. Допустим,
есть две таблицы, которые объединены при помощи связи типа «один-ко-мно-
гим». Сначала надо выбрать место в основной форме для размещения подчинен-
ной. Последнюю можно будет прокручивать, но тем не менее размеры полей
должны соответствовать размеру области формы. Основную форму надо открыть
в режиме конструктора.
Для запуска мастера подчиненных форм надо нажать кнопку Подчиненная
форма/отчет на панели инструментов Панель элементов и нарисовать мышью
прямоугольную область, в которой должна расположиться подчиненная форма.
Обратите внимание, что этот прием можно использовать и при разработке отче-
тов. Вас не должно смущать то, что вы не знаете точных размеров будущей
формы. Их можно будет установить после окончания работы мастера.
На первом шаге мастера надо указать источник данных для новой формы: таб-
лицу или запрос. Возможно, это уже будет готовая форма, и тогда ее имя можно
выбрать из списка, щелкнув переключатель.
На втором шаге надо определить поля для подчиненной формы.
На третьем шаге мастера надо определить тип межтабличной связи. В списке
обычно представлены различные варианты связей. Программа пытается найти
все возможные варианты, а разработчик должен выбрать один из них.
Четвертый шаг мастера традиционный: можно только определить имя формы.
В ависимости от конкретной ситуации работа мастера может незначительно ме-
няться. В целом создать подчиненную форму можно очень быстро, при /слэвии,
что связи между таблицами уже определены. В конце работы мастера сохраняются
сразу две формы. Если же надо доработать подчиненную форму, приходится изме-
нять параметры объекта в режиме конструктора основной формы и параметры
подчиненной формы, открыв ее отдельно, тоже в режиме конструктора. Размеры
столбцов подчиненной формы можно изменять при ее просмотре, а размер самой
подчиненной формы в целом - только в режиме конструктора.
Пример создания подчиненной формы рассматривается в главе, посвященной
созданию базы данных рассылки.
154
Глава 6
Вкладки
Мы привыкли к тому, что для увеличения информационной емкости окна
разработчики программ часто используют вкладки. В этом случае последние
имеют азмер. близкий к размерам окна. На самом деле вкладка, как любой эле-
мент управления, может иметь произвольные размеры. Для создания вкладок
надо нажать кнопку Вкладка на панели Панель элементов и начертить мышью
контур, который должны занимать вкладки. По умолчанию создаются две вклад-
ки. но их количество может быть увеличено. Удалять вкладки придется по одной:
выделить ненужную и нажать клавишу Delete. Вместе с вкладкой уничтожаются
все расположенные на ней элементы управления.
Несколько вкладок объединяются в набор вкладок. Для создания новой вклад-
ки в наборе надо выделить уже имеющиеся и выбрать команду Вставка =>
Вкладка.
Подписи для вкладок определяются, как и для других элементов управления,
в окне свойств. Подпись появляется на ярлычке вкладки, поэтому она должна
быть короткой, но информативной. Для получения доступа к свойствам набора
вкладок его надо предварительно выделить. Сделать это проще всего при помо-
щи списка Объект, который доступен в режиме конструктора на главной панели
инструментов. Так же как свойства отдельной вкладки, свойства набора предна-
значены в первую очередь для дизайна. Например, свойство Стиль позволяет за-
менить привычные ярлычки вкладок кнопками.
6.5. Диспетчер кнопочных форм
В Access существует надстройка, которая позволяет создать своеобразный пу-
теводитель по формам и отчетам базы данных - кнопочную форму. К примеру,
такая форма открывается при запуске базы данных «Борей» (рис. 6.25). Эго удоб-
но: когда форм и отчетов становится слишком много, полезно иметь систему ука-
зателей, которая позволит ориентироваться среди множества объектов.
Сделать такую форму несложно: достаточно создать форму и разместить на
ней рисунок и несколько кнопок для запуска других форм.
Допустим, у нас есть несколько форм в базе данных (Форма1. Форма!,
ФормаЗ, Форма4) Создадим для примера кнопочную форму в базе данных
test I mdb —. Разобьем, как обычно, весь процесс на этапы.
Формы
155
Рис. 6.25. Кнопочная форма базы данных «Борей»
1. Создадим логотип (например, в формате BMP) и вставим его в форму с помо-
щью инструмента Рисунок.
2. Создадим четыре кнопки. Первую с помощью инструмента Кнопка, три по-
следующие командой Правка => Дублировать.
3. Введем на кнопках соответствующие надписи и создадим процедуры обработ-
ки событий (см. раздел «Кнопки»), В процедуре должна быть единственная
команда, созданная по шаблону DoCmd.OpenForm 'Форма 1".
4. В свойствах формы определим параметр Кнопки перехода как «Нет» - кноп-
ки перехода по записям здесь не нужны.
5. Сохраним форму и дадим ей имя Старт.
6. Выберем команду Сервис => Параметры запуска и зададим в поле Вывод
формы имя нашей формы (рис. 6.26). Обратите внимание что в этом okj е еще
много полезных параметров.
Теперь при открытии базы данных будет автоматически запускаться кно-
почная форма (рис. 6.27). Она делает базу данных более удобной для пользовате-
ля, который может или воспользоваться кнопочной формой, или, закрыв ее,
работать напрямую с окном базы данных. Кроме того, такой прием позволяет
базе данных выглядеть более эффектно.
156
Глава 6
Пн раматрымпуск а
Заголовок приложен-й
Значок приложения:
I Строка наню:
1 (по умолчанию) v
♦ [3. ' 1ПНЫЙ набор меню Лоте к
11 0 Контекстные ней по умолчанию
Вывод фор№1;странийы1
Стар1!
[(отсутствует)
Норма 1
ФормаЭ
шюрнач
^тарт
(По умолчанию)
2 Встроенные панели< -стррчентс-д
[yj ^некен ? панелей нтов/меню
О тэхиальные клавиши Access
(Вывод окна 'чзы данных, окна проверки и
окна .®иа) Bask, приостановка вйгюлнания)
Рис. 6.26. Окно «Параметры запуска»
л Стар форма
Вторая форма- • и .«-текста
третья форма - примеры кнопок
|гервая форма - 'Умпсжна память"
: тмрта^ Фррнй
Рис. 6.27. Пример кнопочной формы
Глава 7
Книжная база данных (пример)
В качестве примера, иллюстрирующего методы работы с БД Access, возьмем
создание базы данных электронной библиотеки. Сейчас нетрудно приобрести ком-
пакт-диск с тысячами книг в электронном формате, скачать тексты из Интернета
или получить их другим способом. Понятно, что для того, чтобы разобраться
в большом количестве текстов, необходима БД. Эти подходы можно использовать
и для создания БД технической документации или коммерческих документов.
Общим принципом таких задач является сбор сведений о каких-то предметах.
7.1. Создание таблиц
Создав новую БД, файл которой назовем Lnigi.mdl (режим Новая база данных),
мы сразу переходим в режим конструктора таблицы командой в режиме
конструктора. Использовать мастера по созданию таблиц (Создание таблицы
с помощью мастера) в данном случае не имеет :мысла потому что нам надо опре-
делить все характеристики полей самостоятельно. По той же причине не имеет
смысла использовать режим Создание таблицы путем ввода данных.
Я всегда рекомендую начинать создание каждой таблицы с ключевого поля.
В дальнейшем это облегчит связывание таблиц и заодно позволит нумеровать
записи. Имя для поля можно выбрать попроще, например St1. Тип поля -Счетчик
(с последовательной нумерацией). Нажмите кнопку Ключевое поле. Теперь поле
счетчика станет ключом, который позволит в дальнейшем связывать эту таблицу
с другими по значениям поля. Данные поля окажутся автоматически проиндек-
сированы, а на повторение значений будет наложен запрет. Значения поля
счетчика будут формироваться автоматически, и нам не надо заботиться ^запол-
нении этого поля. Все это стандарт работы в Access, и разработчики создают
такие поля довольно часто.
Теперь надо создать поля, которые будут содержать информацию из нредмет-
ной области.
Мы уже должны к этому моменту продумать, какие поля будут в основной
таблице.
158
Глава 7
С чего же начать? Допустим, у вас имеется компакт-диск с текстами. Можно
посмотреть его: вдруг на нем уже имеется база данных. Тогда целесообразно
обеспечить совместимость полей, чтобы данные из одной БД можно было пере-
нести в другую.
Допустим, мы нашли базуданныхсо следующими полями:
Имя поля Формат поля
author Текстовый, 5 символов
book name Текстовый, 50 символов
annotation Текстовый, 50 символов
В нашей БД мы можем создать таблицу, в которой будут такие поля:
Имя поля Формат поля
Жанр Текстовый, 15 символов
Страна Текстовый 20 символов
Серия Текстовый, 25 символов
Автор Текстовый, 50 символов
НазваниеКниги Текстовый, 50 символов
ГодВыхода Числовой
Аннотация Мето
Для текстовых полей целесообразно выбрать длину, исходя из максимально
возможного количества знаков в поле. По умолчанию устанавливается длина
50 символов. Для поля Автор это нормально, потому что у книги могут быть не-
сколько авторов, а вот название серии вряд ли будет таким длинным. Например,
фраза «Жизнь замечательных людей» содержит 25 знаков, так что длину поля
Серия можно выбрать равной 30 символам.
Для поля года издания можно выбрать формат даты и формат данных уууу.
Для данных большого объема и неопределенного формата больше всего под-
ходит поле Мето.
Разумеется, в таблице можно было бы создать и другие поля, например поле
для кода книги ISDN, но это уже определяется назначением БД. К тому же новые
поля можно добавить и позднее.
Для имен полей можно использовать русские буквы, но нельзя использовать
пробелы. Обычно в формах имена полей заменяют подписями, однако старайтесь
давать полям по возможности удобочитаемые имена, потому что эти имена могут
Книжная базаданных ’пример)
159
«проявиться» там, где трудно создавать подписи, например в юдчиненны формах.
Конечно, эти проблемы можно решить, но часто БД создается в условиях юхватки
времени, так что возможные проблемы надо постараться минимизировать.
Для имени таблицы тоже надо выбирать удобные имена. Например, имя каж-
дой таблицы можно начинать словом «Таблица». Тогда имя нашей таблицы будет
ТаблицаКниги. При разработке процедур на Visual Basic это облегчает работу,
потому что наверняка в базе появятся такие имена, как ЗапросКнигн или
ФормаКниги.
Создание таблицы на этом завершается, и можно приступать к заполнению
таблицы данными и/или созданию запроса, но осталась еще одна проблема. Она
довольно часто возникает при разработке базы данных.
Проблема касается возможного изменения структуры БД. Представим себе,
что нам потребуется ввести в базу данных сведения об авторах. Допустим даже
(для простоты), что для этого будет достаточно одного поля Мето. Но поскольку
в таблице может оказаться несколько книг одного автора, сведения об авторах,
во избежание повторения, надо разместить в отдельной таблице (скажем, с име-
нем ТаблицаСведення). Сделать ее несложно, но связать ее напрямую
с ТаблицаКниги не удастся: одна книга может иметь несколько авторов.
В этом случае придется создать еще одну, третью таблицу, в которой будет
указано, какие авторы у той или иной книги. Предвижу возможный вопрос чита-
теля: а что делать с полем Автор из ТаблицаКниги? В данной ситуации это поле
оказывается ненужным, но удалять его не стоит. Возможно, при дальнейшем со-
вершенствовании базы данных оно еще пригодится.
И еще одно замечание. Если мы реализуем данное решение, то вводить дан-
ные в базу можно будет только с помощью формы. Точнее, без формы с вводом
данных справится только квалифицированный специалист, но обычно такую
работу поручают обычным пользователям, которые не вникают во все тонкости
Access. Таг что нам обязательно надо «запланировать» этап создания формы.
Таблица с именем ТаблицаАвторы должна содержать следующие поля:
Имя поля Формат поля
S12 Счетчик, ключевое поле, повторы значений не разрешены <
НомерКниги Числовой длинное целое, товторь значений не разрешены
НомерАетора Числовой, длинное |елое. повторы значений разрешены
J
/да
Глава 7
Таблица с именем ТаблинаСведепня должна содержать следующие по, in:
Имя поля Формат поля
513 Счетчик, ключевое поле, индексированное, повторы значений не разрешены
Автор Текстовое, длина 30 имволов, индексированное, повторы значений не разрешены
Сведения Мелю
Завершить этап редактирования структуры можно, нажав кнопку
Сохранить в эсновнох окне Access или нажав кнопку закрытия окна
конструктора. Если таблице до этого не существовала, перед мхра-
нениел структуры будет предложено ввести имя таблицы.
7.2. Связывание таблиц. Связи «один-ко-многим»
и «многие-ко-многим»
Для связывания баз данных необходимо выполнить ряд подготовительных
действий.
Нажать кнопку Схема данных на панели инструментов основного окна.
2. Схема данных пуста, поэтому автоматически" откроется окно Добавление
таблицы. С помощью кнопки Добавить надо включить необходимые таблицы
в схему данных. В нашем случае - это три таблицы из предыдущего раздела.
3. Закрыть окно Добавление таблицы.
Теперь в окне Схема данных можно установить связи между таблицами.
В нашем примере надо установить мышь на поле Н из ТаблииаКниги и перета-
щить указатель на поле НомерКниги из ТаблицаАвторы. Автоматически откроет-
ся окно Изменение связей, в котором можно установить тип связи (рис. 2. 23).
В данном случае необходим тип связи «один-ко-многим». То есть одному номеру
записи о книге может соответствовать несколько записей из ТаблицаАвторы,
Этот тип связи установился автоматически, потому что мы связали поле счетчика
с обычным числовым полем. Очевидно, что в поле счетчика каждое значение
встречается один раз, а в обычном числовом поле значения могут повторяться.
Полезно также установить флажок «Обеспечение целостности данных» и два
флажка, которые отвечают за каскадное обновление и удаление данных.
Книжня база данных (пример)
161
С помощью кнопки Объединение можно выбрать свойства связи. Как уже
упоминалось в главе 2, есть три варианта. Access установил по умолчанию
первый вариант, но я бы рекомендовал выбрать второй: «Использовать все записи
из ТаблицаКниги и только те записи из ТаблицаАвторы, в которых связанные
поля совпадают».
Создание связи завершается нажатием кнопки ОК.
Точно также создается и вторая связь. Мышь следует расположить на поле st3
из ТаблицаСведения и перетащить на поле НомерАвтора из ТаблицаАвторы. Все
параметры связи выбираются, как и в предыдущем случае. В результате схема
данных приобретает вид, как показано на рис.
-• J Сх«ма данных
Й1
Жанр
Страна
Серия
Двтср
KesMHwKmvi
Издательства
Г сдВьиода
<
Ьзя и
|Ночвр Автора
Рис. Г.1 Схема данных базы knigi
Создав две связи типа «один-ко-многим» мы фактически создали связь, которая
носит название «многне-ко-многим». В этом случае любое количество записей
из первой таблицы (ТаблицаКниги) может связываться с любым количеством запи-
сей из второй таблицы ТаблицаСведения). ТаблицаАвторы является в данном
случае вспомогательным объектом и служит только для обеспечения связи, Поле
счетчика sl^ не является обязательным и создано «на всякий случай».
7.3. Создание запросов
В нашем примере есть две таблицы, содержащие необходимые пользователю
данные, и для этих таблиц следует создать запросы. Возьмите за правило сразу
делать запрос для каждой таблицы: в формах и отчетах удобнее использовать
данные именно из запросов, а не таблиц. Запрос является своеобразным
фильтром, который позволяет отбирать нужные записи. Кроме того, в запросе
легко создаются новые, вычисляемые поля, которых нет в исходной таблице.
6-870
1S2
Глава 7
В данном случае необходимо щелкнуть вкладку Запросы в окне базы данных
и выбрать режим Создание запроса с помощью мастера. В окне Добавление
таблицы выберем ТаблицаКниги и, выполняя двойные щелчки на названиях
полей, добавим все поля в таблицу запроса (рис. 7.2).
.л-Запрос 1 : запрос на выборку □Д' |
Г - т—г.г-т-ы-
Детор л
НямннеКы
Издательств!
Рис. 7.2. Окно конструктора запроса
Закрывая окно, дадим имя новому запросу: ЗапросКннгн. Аналогично сдела-
ем запрос для ТаблицаСведения и дадим ему имя ЗапросСведеиия.
Обратите внимание, что в таблице запроса присутствует строка Сортировка.
Если вы таете, что для определенных полей будет необходим режим сортировки,
можно установить для них эту опцию (сортировку по возрастанию или убыванию).
Разумеется, к таблице запроса можно вернуться позднее и выбрать необходимые
параметры.
Для редактирования запросов, так же как и для таблиц, служит кнопка
Конструктор.
7.4. Создание формы с помощью мастера
Формы могут создаваться для ввода, просмотра или поиска данных, поэтому
при построении формы разработчик должен поставить себя на место того, кто бу-
дет иметь дело с формой, и представить, насколько легко будет работать. Жела-
тельно сразу предвидеть возможные замечания пользователей, чтобы потом не
пришлось переделывать готовую работу.
Книжная база данных (пример)
.f63
Существует множество путей создания форм, но в нашем примере я восполь-
зуюсв толвко одним.
В разделе Формы выберем режим Создание формы с юмошью мастера.
Исполвзуем в качестве источника даннвхх ЗапросКпиги и ввхберем все поля для
включения в форму (работа мастера форм проиллюстрирована в главе 6, первый
шаг показан на рис. 6.4).
После нажатия кнопки Далее, на следующем шаге мастера, ввхберем вид
формы. Режим Выровненный (в одну записв) удобно исполвзоватв, когда в форме
должно быть много коротких полей. Режимы Ленточный и Табличный предпола-
гают размещение данных в таблице. Представлять нашу форму в виде таблицы не-
удобно из-за того, что поля достаточно длинные, а еще имеется поле Мешо. Поэтому
используем опцию Выровненный. В этом случае будет видна только одна пись,
но для каждого поля останется больше места (рис. 7.3),
Созданий фб|>м
В одни с
BbpoBhei-rc и ।
r гасднея таб^ьша
сзо-дни ддзгрзлна
Сгмена v Hawд || Даню । | [ргрбс ।
Рис. 7.3. Шаг мастера форм, на котором можно выбрат вариант
компоновки полей формы
На следующем шаге мастера можно выбрать стиль художественного оформле-
ния. Это, как говорится, дело вкуса, а самый простой вариант - Стандартный
(рис. 6.7). Он прекрасно подходит для деловых целей и в тех случаях, когда вкусы
заказчика неизвестны. Потом, в режиме конструктора, можно доработать форму,
например придать полям различный цвет.
в
164
Глава 7
На последнем шаге мастера необходимо выбрать имя формы. Переключатель
«Открыть форму для просмотра и ввода данных» позволяет сразу открыть форму,
чтобы посмотреть, как она выглядит. Потом при необходимости можно включить
режим конструктора и доработать ее.
_3 ФормаКниги
>Канр Страна Серия
1 Фантастика США
Автор Назван .--Книги
А, Азимов Избранное
Аннотация
В сборник клй! американской . и Ахтмка Азимова вклюм.иь1 »
из сб. "Путь марсиай" (50-е - 60-е п i и роман "Сами боги', наттисамный писателе.; о начале 70-и
п. после! 5-Л вт него перерыв „ в литературном творчестве.]
Запись: [к] * 1 1 Е® **1 =f 1
Рис. 7.4. Форма в режиме просмотра
Готовая форма показана на рис. 7.4. Для проверки можно сразу ввести какие-
нибудь данные. Если окажется, что характеристики полей выбраны неправильно
и в структуру таблицы будут внесены изменения, это не будет автоматически
учтено в форме, сформированной на основе этой таблицы. Форму придется соз-
дать заново или переделать в режиме конструктора.
7.5. Совершенствование формы
Изменение размеров полей
При первом взгляде на форму сразу видны ее недостатки. Например, поля St1
и ГодВыхОДЭ занимают больше места, чем нужно. И наоборот, длина поля
НазваниеКниги явно недостаточна.
Откроем форму в режиме конструктора и попробуем изменить размеры полей.
Размер поля Stl можно изменить так:
1. Выделить (щелкнуть мышью) само поле.
2. Удерживая клавишу Shift, щелкнуть на подписи к этому полю. Оба поля долж-
ны попасть внутрь одной рамки.
3. Перетащить влево правую границу рамки (указатель мыши должен превра-
титься в двойную горизонтальную стрелку, как показано на рис. 7.5.
Книжная базаданных(пример)
165
Рис. 7.5. Форма в режиме конструктора
4. Снять выделение с поля, щелкнув на свободном месте формы.
5. Расположить указатель 4ЫШ£ выше и левее подписи «Жанр».
6. Нажав левую кнопку мыши, нарисовать прямоугольник так, чтобы внутрь не-
го попали поля Жанр, Страна, Серия и подписи к ним. Границы прямоугольника
не должны касатьс. элементов, которые выделять не нужно.
1. Теперь выделенными оказались сразу шесть элементов. Необходимо передви-
нуть образовавшуюся группу влево, чтобы использовать свободное место.
Указатель надо расположить так, чтобы он превратился в черную раскрытую
ладонь. Для того чтобы двигать объект строго влево, можно, удерживая левую
кнопку мыши нажатой, несколько раз нажать клавишу «стрелка влево». Это
обеспечит более точное позиционирование.
8. Снять выделение с группы.
9. По аналогии выделить поле Серия и его подпись и перетащить правую границу,
чтобы увеличить длину поля.
После этого, используя уже известные приемы, можно уменьшить длину поля
и увеличить длину поля НазваниеКниги.
Режим конструктора форм не имеет средств для изменения масшта-
ба просмотра, а в то же время границы полей приходится подгонять
друг к другу с большой точностью. В этом случае может помочь спе-
циальный инструмент Windows « Экранная лупа».
166 Глава?
Еще одна маленькая деталь: выделите поле дВыход! и нажмите кнопку По
центру в основном окне программы. Это позволит отцентрировать данные поля.
Как видите, множество инструментов находится «под рукой», надо только заме-
тить их и использовать.
Переключившись в обычный режим формы (кнопкой Зид). можно проверить
результат. Он показан на рис. 7.6.
]формаКннги "cl .
ГД.»». — ' 1,1 ш - - Ц<111 И I .w
Жанр Страна Серия
1 Фантастика США
Название «иги ГодВьледа
А. Азимов Избранное 198S
Аннотация
В сборник осечка америг.зн . of и .pi г Фантастики С iseKS Азимова вг люмены рассказы
из ви |"1уть маремаьГ Йе - 60-е гт ] и роман "Сами 6>_ч i написанный писателем е начале 70*
гг. после 1 Б-летнего перерь । в шктераг^н-киатворчвп ве
Запись: I I <J [ > | of |
Рис. 7.6. Пример доработанной формы
Обратите внимание, что с точки зрения дизайна зертикальные линии проходя-
щие слева от полей Страна и 1азваниеКниги. должны совпадать.
Добавление нового поля
Теперь представим себе, что в исходную таблицу надо ввести новое поле. До-
пустим, это будет поле с названием издательства. Здесь опять-таки надо поду-
мать, в каком формате представить эти данные. Можно просто указывать
название издательства, например Мир» а можно сформировать строку, которую
можно использовать как часть библиографических данных: «М Мир». Это зави-
сит от задач, которые должны решаться с помощью базы данных.
Процесс добавления нового поля можно разбить на этапы.
Закройте все объекты, связанные с таблицей (например, ФормаКнигн).
2. Откройте таблицу ГаблнцаКввгн в режиме конструктора.
3. Выделите строку, относящуюся к полю, перед которым надо вставить новое
(например, ГодВыхода).
4. Выберите команду Вставка Строки.
5. Введите имя нового поля; Издательство.
Книжная базаррнных (пример) 167
В. Выберите формат поля Текстовый и длину 20 символов. Остальные характери-
стики поля выбираются по умолчанию.
7. Закройте окно конструктора, сохранив изменения в таблице.
8. Откройте запрос ЗапросКниги в режиме конструктора.
9. Установите текстовый курсор (щелчком мыши) на поле Год Выхода
10. Выберите команду Вставка => Столбцы.
11. Раскройте список в первой строке новой колонки и выберите поле:
Издательство (рис. 7.7).
ЗапросКниги : запрос на выборку
ТаблмцдКни'и
Серия
Рис. 7.7. В запрос включено новое поле
12. Закройте окно конструктора запросов.
13. Откройте форму ФормяКвиги в режиме конструктора.
14. Расположите указатель мыши над линейкой Примечание формы так, как по-
казано на рис. 7.8,а.
f Прийёчание формы
М'ис. 7.8. Редактирование формы; а - перетаскивание линейки примечания:
б - перемещение поля
168
Глава 7
15, Перетащите линейку вниз, чтобы освободить место для нового поля.
16. Выделите с помощью клавиши Shift одновременно поле Аннотация и под-
пись к нему и наведите указатель так, чтобы он принял вид раскрытой ладони
(рис 7.8,6).
17. Удерживая нажатой левую кнопку мыши, нажмите несколько раз клавишу
«стрелка вниз», чтобы поле Аннотацш сместилось вниз.
18. Нажмите на панели инструментов Панель элементов кнопку Поле и нарисуй-
те мышью контуры будущего поля. Обратите внимание, что новое поле состо-
ит из двух элементов: подписи (она имеет имя Text21) и собственно поля, ко-
торое первоначально обозначено словом «Свободный» (Unbound), как показа-
но на рис. 7.9.
Рис. 7.9. Вид нового поля в режиме конструктора
I 1
I и
19. Установите положение и размеры подписи и поля так, чтобы они соответство-
вали дизайну формы.
20. Выделите подпись поля Text21 и нажмите кнопку Свойства. Откроется окно
свойств элемента.
21. На вкладке Макет в строке Подпись введите слово «Издательство» и закрой-
те окно свойств.
22. Выделите поле и нажмите кнопку Свойства. Откроется окно свойств элемента;
23. На вкладке Данные, в строке Данные выберите из списка «Издательство»
и закройте окно свойств.
24. Переключитесь в режим просмотра формы.
Легко заметить, что у подписи нового поля не хватает рамки. Создать рамку
можно, сравнив свойства существующего элемента со свойствами вновь созданно-
го. На рис. .10,. показано окно свойств подписи «Автор», а на рис. МО,с - окно
свойств созданного нами поля. Видно, что свойства Тин границы. Достаточно за-
менить (выбрав из списка) опцию «Сплошная», как рамка появится. Попутно мож-
но установить и одинаковое значение высоты подписи, чтобы элементы выглядели
единообразно. В данном случае высота должна быть равна 0,423 см. С помощью
Книжная 'аза да. нных(пример/
№
мыши установить точное значение высоты практически невозможно. Разумеется,
высоту надо (стандартизировать» и для самого поля Издательство. У меня она по-
лучилась несколько больше высоты подписи и оказалась равна 0,503 см.
Надпись: Автора Latel
AbTrip_Latd
ранние События Другие * Вес
1 •чЛиС-'
'<Д JKpAH
Ремни вывода
I гт лмсге. края
1 *т кив
Ццьтнв . . .
В . га
Тип фона
(Дит .
Т,1П грвини 4
Цвет грачяцьь
LLVpma гр4нн!Ы
t|wr мг-та
U
Размер шрифте
Насышегнсмтть
|ын
Аг-Пр
Да
. Всегда
i 12?сн
* 07*01
O.KXh
, npospa'+fcfi
£№№33
С'и’ощ-чр
О
. Сверхтонкая
?MT4C3537
MS Звги Seri?
в
> не?
,Й8Т
ГНадлкСь: LabeQj
I I LabslZZ
МйКЕ Данные йсСытня
A 1 “1-ДГ»1ГГ
. ВывЛд its *тлн
Рении вывода. __________
I . •> пввлгл ap№
1 I Сп ве^-вго
J 1 Uhpwu
I Оыссга
। 7 Ki ±сна
I! kXjTitPHa
tin грвг*щ-1
Цвет -ранты
ЦУтрмнг грми-ипы
(лег г'кта
Шрифт
, Раз пер шрифта.
I Катыш е-пссть
I КуРСМ.
V | Подчеркнут сЛ
Другие Все
ЙЗДМ- Г* “ПТГ
Дь-
. Всегда
<051 cm
«,0Г4;г
0,423<-1
. рроэрачный
... 2Н7нлЭ«ьЗЗ
•
ЯТЯИГУЯ!
, - о
. . Сеер;гончак
HS Sar > ?
, S
. . С&--Ы ’
нет
.. Нет
Рис. 7.10. Окно свойств: а- для подписи Автор; б -для юдписи новой поля
Часто бывает, что установить с помощью мыши точное расположение по высоте
для полей и подписей бывает сложно. Тогда надо воспользоваться окном свойств
этих элементов. Открыв окно один раз. его можно не закрывать, а выбирать раз-
личные элементы на макете формы и менять параметры в окне. Например, если для
подписи «Издательство» значение координаты по вертикали (от верхнего края) рав-
но 2,051 см, а высота элемента равна 0,423 см, то для ыемента. расположенного
ниже (то есть поля Издательство), значение параметра От верхнего края должно
быть равно 2,474 са (2,051 + 0,423). Установив точные значения, мы обеспечим
совпадение рамок элементов. Скорее всего, таким же способом нужно 5удет «по-
догнать» и координаты подписи и поля «Аннотация». Вертикальная координата от-
считывается от верхнего края формы. Как видите, данные расчеты следует
производить с точностью до сотых долей миллиметра.
Когда мы создавали форму с помощью мастера, расположение полей было вы-
брано автоматически. Но потом, при переделке формы, такая кропотливая работа
оказалась необходима, когда потребовалось обеспечить качественный внешний
вид объекта.
Переделанная форма показана на рис. 7.11 Как видим, все поля на ней выровне-
ны, и осталосьсвободное место длякакой-нибудьдополнительной инф ормации.
170
Глава 7
_2 ФормЫСнмгм
Страна Серия
1 внтасгнкв США
Автор Название^.-и ГрдВыявда
А Азимов Избранное 19SS
Издательство
Мир
Аннотация
В сборник л амррмкэчской и мировой а^таст ’ Ъвкв Азимове вылечены рассказы
из сб. "Путь марсиан” (50-е - 60-е гг) и роман "ивми боги”, написанный гмсателем в начале70-к
гг лрсле 15-летнего переросл в литератур нс™ творчестве.
эвжр.|Н| < Г~ ГГПГн।
Рис. .11. Форма с новым полем Издательство
В данном примере подразумевалось. что в качестве источника данных
для нового поля формы берется поле из запроса ЗапросКниги Это не
нужно было проверять, так как ^начально вся форма создавалась
только на основе этого запроса. Но так бывает далеко не всегда.
Проверить, что является источником данных для формы, можно, от-
кры окно ее свойств. Это делается в режиме конструктора щелчком
правой кнопкой мыши на квадратике, расположенном на пересечении
NB горизонтальной и вертикально! линеек. Из контекстного меню надо
выбрать команду Свойства, а в окне свойств посмотрегт параметр
Источник записей на вкладке Данные. Если надо выбрать источник
данных для поля из другой таблицы (или запроса), то в окне свойств
этого поля, в строке Данные следует воспользоваться кнопкой с тре-
мя точками. Эта кнопка раскрывает окно построителя выражений,
которое позволит выбрать в качестве источника данных любое поле
из любой таблицы (или запроса, или создать вычисляемое поле.
Создание поля со списком. Мастер подстановок
Поработав с базой данных какое-то время, вы обнаружите, что она нуждается
в дальнейших усовершенствованиях. Например, окажется, что значения неко-
торых полей необходимо выбирать из списка. Если заполнять поле Жанр произ-
вольным образом, то одно и то же значение может быть записано по-разному:
«фантастика», «научная фантастика» или «н/ф». Это приведет к тому, что в даль-
нейшем будет невозможно проводить сортировку по этому полю или выполнять
запросы. В данном случае правильный путь - заранее создать набор допустимых
значений и предлагать пользователю выбирать одно из них. В то же время необ-
Книжная базаданных 'пример)
171
ходнмо иметь возможность редактировать этот набор в любое время. Без новой
таблицы никак не обойтись.
Создадим новую таблицу (назовем ее ГаблнцаЖапры). Она будет содержать
два поля.
Имя поля Формат поля
st4 Счетчик, ключевое поле, ищексцюванное, повторы значений
не разрешены
Текст, длина 15 символов
Характеристики поля Жанр должны совпадать с характеристиками одноимен-
ного поля в ТаблицаКниги - ведь мы будем подставлять данные из одной таб-
лицы в другую.
В новой таблице желательно сразу создать несколько записей чтобы можно
было на практике проверить работу списка.
Для этой таблицы можно сразу же создать (ЗапросЖанры) и задать режим
сортировки по возрастанию для поля Жанр. Тогда в списке подстановки данные
тоже будут отсортированы.
Теперь можно раскрыть ТаблицаКниги в режиме конструктора и изменить
тип поля Жанр. В столбце Тип данных в списке надо выбрать Мастер подстано-
вок. Создать поле подстановок без мастера достаточно сложно. Первый шаг мас-
тера показан на рис. 7.12. Предлагается два варианта хранения значений поля:
использовать для них отдельную таблицу или определить значения во время ра-
боты мастера. Если выбрать первый вариант, то в таблицу можно будет добавлять
новые значения.
На втором шаге мастера (рис. 7.13) выберем источник записей. Это будет, ес-
тественно, объект базы данных ЗапросЖанры,
На третьем шаге мастера (рис. 7.14) надо выбрать поле, которое будет исполь-
зоваться для выбора данных. В таблице подстановки может быть несколько по-
лей. но показывать их необязательно: поле счетчика должно быть скрыто от
пользователя.
На четвертом шаге мастера (рис. 7.1 5) можно выбрать режим сортировки поля
подстановки. В нашем случае это необязательно, так как сортировка уже обес-
печена в запросе. Но, конечно, пользователю будет удобнее выбирать названия из
отсортированного списка.
т
Глава 1
Создание подстановки
Мастер с езда столбец подстановки, в котоген
отображается список• - ^ни» для выбора, каким способом
столб* подстановки будет получать эти значения?
Qbtw: 1 . -.'i иадетаисйкп' будет пояьтомтъ
знамени, из таблицы или - .проса.
О Будет введен фик<.ц> . набор i начти.
I
в
Отмена I Далее > i
Рис. 7.12. Первый шаг мастера гюдст ано вок
Создание подстановки
н или запрос со будет
содержать столбец' i установки
Показать
ОНблнцы .^anpocbij 0 Таблицы и запросы
Рис. 7,13. Второй шаг мастера подстановок
На пятом шаге мастера (рис. 7.16) можно визуально определить и установить
ширину поля подстановки. Границу поля можно передвинуть мышью. Здесь мож-
но уже нажать кнопку Готово. Остался шестой, заключительный шап но на нем
можно только выбрать подпись для поля. В нашем случае имя поля (Жанр) доста-
точно информативно и создание подписи не требуется.
Книжная базаданных 'пример)
173
Создание подстановки
Кй<"не ЮЛ*содержат чИЧрни" которые включить в
столбец । ;ид<1 Отобранные пр ... станут тслбиа • Е
объекте "столбец подстановки*.
Досту пньи поля.
ffc бранные поля:
Отмена ] Цамд Д,ал*>й
Рис. 7.14. Третий шаг мастера подстановок
Создание подстановки
Выберите порядок сортировки списка
Допускается > *нровказапнс?<то возрастание нл и
по убыванию, включают»- до 4 идеи.
1 tra v по врастанию |
v по возрастанию |
I Отдана 1 < Назад | &апее а 1
--------- ----------... .... -J
Рис. 7.15. Четвертый шагмастера подстановок
Теперь полезно проверить, как сделанные в таблице изменения отразились
на других объектах базыданных. Откроем ЗапросКниги Достаточно щелкнуть
на поле Жанр, чтобы увидеть список и возможные значения поля.
174
Глава/
Со эдонне подстановки
Задайте шир+vy столбцов, которь*содержит столбец подстановки
Перетащите правую границу изголовка стодйца м нужную ширину или двджды
L щелкните ее для ввтокгтическото подбора ширины.
Рис. 7.16. Пятый шаг мастера Ю [СТановок
Откроем форму ФормаКннги. Поле Жанр не имеет списка, значит, это поле
надо доработать. Откроем форму в режиме конструктора. Нам потребуется эле-
мент управления «поле со списком» и его мастер. В первую очередь необходимо
убедиться, что кнопка Мастера на панели инструментов Панель элементов на-
ходится в нажатом состоянии. Затем надо нажать кнопку Поле со списком на той
же панели и на свободном месте в форме нарисовать контур будущего поля. Поя-
вится поле и подпись к нему.
Одновременно откроется окно Создание полей со списком (рис. 7.17). Этот
мастер очень похож на мастер подстановок, проиллюстрированный выше, поэто-
му я остановлюсь только на отличиях в работе с ними.
На первом шаге мастера мы выбираем верхнее положение переключателя.
На втором шаге так же устанавливаем переключатель в положение Запросы
и выбираем в качестве источника данных ЗапросЖанры. На третьем выбираем
(переносом в правую область) поле Жанр. На четвертом шаге не выбираем ничего,
потому что режим сортировки уже задан. Пятый шаг тоже проходим без редак-
тирования, потому что задавать сейчас размеры поля не имеет смысла, мы это
сделаем позже и более эффективно. Шестой шаг мастера показан на рис. 7.18. Он
самый ответственный — надо выбрать поле таблицы (запроса), в которое будет за-
носиться выбранное пользователем значение. Напомню, что форма сделана на
основе запроса ЗапросКниги, так что нам требуется только поставить пере-
Книжная база данных (пример)
175
Создание полей со писком
Мастер -«д»т поле со сгжком, в кот срок отображается
список значений для выбора. Каким способом гопе со списком
будет получать эти мечения?
0£Йъегт Тюле со сгмскрм" будет нс ноль зевать значения из
!т*Бли_х..или запроса.
О Будет введен фиксированный набор значений.
Поиск цапнем е форме на основе Значения, которое
содержит попе со списком.
I Списиа"]
|~Д.д"М > |
Рис. 7.17. Первый шаг мастера «поля со списком»
ключатель во второе положение и выбрать поле Жанр (фактически мы сейчас вы-
бираем поле из ТаблицаКниги, потому что запрос является только
промежуточным объектом в информационном потоке). В этом окне можно на-
жать кнопку Готово, так как последний (седьмой) шаг мастера знамени не имеет,
Создан не полей со с писком
Mcrosoft Office Access позволяет сохранит выбранное из
объекта "поле со списком" значение в базе дайны* или
использовать это значение в дальнейшем для выполнения
действия. Какое действие будет выполняться при выборе
значвгвтя из . бъвкта*попесо списком"?
(2' зманй+й
0 Сохранить а поле Жанр
||
I
| Опт* "~| | < Вим ~~| Дапёе > | | готова |
Рис. 7.18. Шестой шаг мастера гимн со списком» надо
выбрать поле, в которое будет записываться информация
176
Глава 7
Мастер закрылся. Что изменилось в конструкторе форм? Теперь в форме есть
два поля Жанр. Этот момент отображен на рис. 7.19. Можно переключиться в ре-
жим просмотра формы и убедиться, что выбранное из раскрывающегося списка
Жанр значение сразу же появляется и в обычном поле Жанр. Для проверки можно
открыть ТаблицаКпнги и убедиться, что данные записываются и туда, - нам,
разумеется, необходимо, чтобы данные записывались в таблицу.
2 ФормаКнигм : форма
(0 1
Г
13-1 А
* Заголовок формы
* Область данных
SI1 |
AhteiiJ
Автор
ИздаЦ/ьстгЬ
Издательств
Аннсг|ацйя |
Жанр
Жанр
Страна
Серия J
Серия
Н»ИВамиеКниги
I
ГодВьфка
ГсдВсдхода
«Жанр
V !
Рис. 7.19. В форме появилось поле Жанр с раскрывающимся списком
и подпись к нему
Теперь можно вернуться в режим конструктора. Надо удалить старое поле
и поместить на его место новое. Если вы будете выполнять эту операцию, прово-
дите ее в такой последовательности:
1. Выделите подпись старого поля Жанр, раскройте окно ее свойств и запишите для
памяти координаты и размеры: От левого края (величина отступа от левого
края формы), От верхнего края (величина отступа от верхнего края формы).
Ширина, Высота.
2. Выделите старое поле Жанр и запишите те же характеристики. Закройте окно
свойств.
3, Нажмите клавишу Delete, чтобы удалить старое поле. Оно будет удалено вме-
сте с подписью.
4. Выделите подпись нового поля Жанр и в окне свойств введите записанные значе-
ния координат и размеров. Установите значение параметра Тип границы (стиль
рамки) как Сплошная.
5. Проделайте то же самое и с самим полем. Новые подпись и поле должны
точно встать на место старых. Закройте окно свойств.
Книжная база ценны) (пример)
177
6. Выделите юдпиш и щелкните ее еще раз. Откроется режим редактирования
подписи. Замените слово «Жанр!: на «Жанр». Такая подпись выглядит более
естественно.
Новый вариант формы показан на рис. 7.20. Мы видим, что ширина поля Жанр
недостаточна для показа данных полностью, но это не проблема: при необходи-
мости ширину поля можно изменить, и мы уже знаем, как это сделать.
ФормаКннги
>К^нр Страна
1 ииити сша
Автор Детектив
А. Азимов Кулинария Ь5рзнное
’ Мемуары •
Поэзия
Приключения
Спорт
Издательств!
Мир |
Аннотация
Всборн » КЛ.
Фантаст и как
изсб “Пчтьт Эзотерик я
Серия
Г идЭымвдй
1909 "
гг. после! й-летнегс'герерьь эЕ лир вротч рвом творчестве
и ' «ровои Фантастики Айзека Азимова включены рассказы
Ь гг.] и ром "Сами гоги". написанн В пи отелем в начале х
катись: Ц< « Г Г Цн]|Н*]сГэ
Рис. 7.20. Теперь шачение ноля Жанр южновь брат'. /п списка
По аналогии можно было бы снабдить раскрывающимся списком и поля
Странаи Серия: здесьтожеважнаунификацияназваний.
7.6. Импорт данных
Мы начали эту главу с рассмотрен и таблицы, структура которой послужила
прототипом для создания нашей таблицы ТаблицаКниги Может так оказаться,
что нам потребуется перенести данные из той таблицы в нашу. Если импортируе-
мая таблица находится тоже в базе данных Access, то перемещение данных вы-
полняется достаточно просто. Для этого надо:
1. Открыть две программы Access с двумя базами данных.
2. Перетащить импортируемую таблицу в окно другой базы данных на вкладку
Таблицы.
3. Открыть импортируемую таблицу в конструкторе и изменить имена ее полег так,
чтобы они совпадали с именами соответствующих полей основной габлпць .
4. Создать и выполнить запрос на добавление данных (см. главу 5).
178
Глава?
Кроме того. Access может импортировать данные из файлов самых разных
форматов. Окно диалога, позволяющее выполнить импортирование, показано на
рис. 7.21. Оно похоже на окна открытия и сохранения файлов. Вызывается это
окно командой Файл =з Внешние данные Импорт. Пользователь должен
определить тип файла, который будет служить источником данных, и найти необ-
ходимый файл.
Импорт
* jd ' -А «1 ~1 Л ’ Сервис Т
Пап-л:
Рабочий стол
после дгн?
дйкучвнто
МОИ
ЛЖумвгпы
Мон
кпмгьитвр
Мое сетврОО
окружение
ifaa ф«нм
К файлов: dSASt JV
^V*opr
Mjcrcsofc ofhcs Af D5<I
dSASES
dSASE HI
ЛАЯ&Г
отмене
Рис. 7.21. Окно для выбора импортируемого файла
Импорт из баз данных, например dBASE или FoxPro, выполняется наиболее
просто. Это объясняется тем, что в файлах разных СУБД определены одинаковые
по смыслу элементы. Нельзя сказать, что поле базы данных FoxPro - это то же са-
мое, что и поле таблицы Access, но их свойства схожи. Например, поля в той
и другой системе имеют имена, типы и длины. Это позволяет выполнить пре-
образование данных автоматически, без участия пользователя. Импорт электрон-
ной таблицы Excel проходит не так гладко. Несмотря на то что рабочий лист
Excel разбит на столбцы, последние неэквивалентны по смыслу полям СУБД. Для
столбца электронной таблицы невозможно определить единый тип (как для поля
базы данных) - он может хранить данные разного типа. Ширина столбца тоже
может изменяться. В результате программа «не знает», как преобразовать стол-
Книжная Загаданных (пример)
179
бец рабочего листа Excel в поле таблицы Access, и «вынуждена» задавать пользо-
вателю дополнительные вопросы для настройки алгоритма приведения данных.
Но даже если вы правильно ответите на все вопросы программы, нет гарантии,
что данные будут импортированы без потерь и искажений. В результат перенос
выполняется в несколько приемов методом проб и ошибок.
Импорт из текстовых файлов заслуживает отдельного разговора. Здесь имеют-
ся в виду не документы, создаваемые в текстовых редакторах, а данные, которые
используются в информационных системах. Такие файлы являются своеобраз-
ным и очень давно «изобретенным» стандартом для межпрограммного обмена
данными. Текстовый формат известен под разными именами. В MS-DOS он из-
вестен как ASCII-файлы, в СУБД семейства dBASE - это опция SDF (system data
format), в Windows это называется «текст MS-DOS». Основная особенность тек-
стового файла заключается в том, что он содержит только данные и никаких слу-
жебных кодов и символов структуры, кроме знаков конца строки. У таких файлов
есть два крупных недостатка. Во-первых, структуру данных в них надо описы-
вать отдельно. Во-вторых, их можно открыть в любом текстовом редакторе,
и случайное или преднамеренное изменение информации (особенно сдвиг) мо-
жет испортить содержимое. То есть информация в таких файлах абсолютно не за-
щищена от неосторожных действий пользователя.
Несмотря на то что существует множество стандартных форматов обмена, все
еще встречаются случаи, когда распространители информации используют именно
текстовые файлы как источник данных. Иногда, таким способов распространяются
и базы данных, хотя для последних стандартом являются файлы типа DBF. Моти-
вировка этого обычно следующая: «Пользователи могут не иметь опыта работы
с DBF-файлами или программных систем, которые работают с такими файлами,
а текстовый формат доступен всегда. Каждый получивший эти данные сможет пре-
образовать их в свой любимый формат». Кроме того, существует много програм-
мных продуктов, в которых данные хранятся в файлах типа DBF.
7.7. Мастер импорта
В том случае, когда надо импортировать текстовые данные. их лучше заранее
выровнять по колонкам с помощью пробелов (рис, 7.22). После этого файл
надо сохранить и запустить мастер импорта: выбрать упомянутую выше команду
и в окне Импорт задать тип файла «Text Files». Затем надо найти требуемый
файл.
180
Глава?
I V Литература -Елокнот
И
Файл [Травка Формат Вид Справка
1. Джек Лондон мо
2 Рафаэль :abaTiu од|
морской волк
2 Рафаэль ai ЭТ1 ОДИССЕЯ КАПИТАНА БЛАДА
3. Обе Пупс СТИВЕНСОН остров СОКРОВИЩ
4. Иван Ефремов на у раю ойкумены
5. Джон С ’ ейноек райские пастбища
6. Александр Дюма черный тюльпан
7. Мих а НИ АНЧАРОВ СОДА-СО ЛИЦЕ
Рис. 7.22. Текстовые данные, подготовленные для импорта
На первом шаге мастер пытается определить формат текстовых данных.
Поскольку мы заранее сформировали колонки, переключатель автоматически
устанавливается во второе положение: программа определила, что будет иметь
дело с колонками «фиксированной ширины». Поскольку это соответствует дейст-
вительности, менять в окне ничего не надо (хотя теоретически есть и другие
варианты), и можно переходить к следующему шагу.
| Импорт текста
II Предполагается, что данные имеют формат "фиксированной шириньС. Если это не так,
выберите подходяций фори.ь данных.
О £ я? делитенями - поля доделаются запятыми или табуляцией
0 фикс проминая щирина полей - интервалы аалопняются грсбелзни
Образцы данных и файла: D;U АССЕ55 2W3\nHTEPATypA.TXT.
Ц1. Джек Лондон Иорской волк
z|j . Рафаэль Савптини ОДИССЕЯ КАПИТДНА БЛАДА
зр. Роберт Лупе СТИВЕНСОН ОСТРОВ СОКРОВИЩ
На краю ойкумены
I s]5. Джон Стейнбек Райские пастбища
616. Александр Дшма Черный тюльпан
Дополнительна...
| Отмена |
| ^алее > I I Готово
Рис. 7.23. Первый шаг мастера импорта
На втором шаге (рис. 7.24) у нас есть возможность изменить границы столб-
цов. В общем, программа сделала все правильно, но ошиблась в одном - здесь
должно быть три столбца, а не четыре. Поэтому третий разделитель (черная
вертикальная стрелка) не нужен, его надо удалить, дважды щелкнув мышью.
Книжная база данных (пример)
181
_i Импорт текста
[Предлагается следующее разделены попей с данные. Если предложения ластет»* не
соответствуют данным, настройте разделен <е попей вручную.
Лимин со стрелка* отмечают »кта разделений полей.
Чтобы создать раздеппело, щелкните ну*нс? положение.
Чтобы 1 делить разделитель дважды щелкните его.
Чтобы г>!ремастцть разделитель, перетащите его в нужное положение.
10
Оггйм | |"<Цамд | Далее
парскои волк
ЮДИССЕЯ КАПИТАНА [БЛАДА
|ОСТРОВ С0КР0БИ11]
На краю ойкумены
[райские пастбища
ерный тюльпан
Рис. 7.24. Второй шаг мастера импорта
1. ЩхеК ЛОВДОК
]Рафаэль Сабатини
3 Роберт Лупе СТИВЕНСОН
4. 4ван Ефремов
Цжои Стейнбек
Александр Дюма
5-
На третьем шаге мы укажем, что данные сохранятся в новой таблице. Добав-
лять данные в существующую таблицу нет смысла, это можно сделать и потом.
На четвертом шаге можно определить имена будущих полей и их типы. Эго не-
много напоминает работу с конструктором таблиц. У нас задача довольно про-
стая, мы сделаем три поля, все текстовые, и назовем их Номер, Автор и Название. На
пятом шаге мастер предлагает создать ключевое поле. Создадим его, это не по-
вредит, а удалить его всегда будет можно. На последнем шаге назовем новую таб-
лицу Литература. Она показана на рис. 7.25. Мы получили полноценную
таблицу, а что делать с ней дальше, зависит от конкретной задачи. Можно, напри-
мер, перенести эти данные в ТаблицаКниги с помощью запроса на добавление.
' Литература : таблица
номер
[Счетчик)
Рис. 125. Таблица после импорта данных
Автор
Название
1 1. Джр* Лондон Морской Всяк
22 Рафаэль Сабатини ОДИССЕЯ капитана БЛАДА
33 Роберт Луис СТИВЕНСОН ОСТРОВ СОКРОВИЩ
44 Мвен Ефремов На краю ойкумены
55 Джон Стейнбек Райские пастбища
6 6 Александр Дюна Черный тюльпан
7 7. Михаил АНЧАРОВ СОДА-СОЛНЦЕ
Гпава 8
Отчеты
В отличие от форм, отчеты предназначены в основном для вывода на печать.
Часто они включают много данных и занимают несколько страниц. Но структуры
отчетов и форм похожи, и многое из того, о чем рассказывалось в главе «Формы»,
можно применять и для отчетов. Их создание также проходит в режиме конструк-
тора. Можно, конечно, создавать отчеты и для просмотра на экране. В этой главе
мы рассмотрим различные способы создания отчетов, взяв в качестве источника
информации базу данных «Борей».
8.1. Быстрое создание автоотчета
Проще всего сделать отчет с помощью режима «Автоотчет». Access позволяет
строить автоотчеты (то есть отчеты, создаваемые автоматически) двух типов:
«в столбец) и «ленточные». Различие между ними ясно из их названий - в отче-
тах первого типа поля располагаются по вертикали, а в отчетах второго типа - по
горизонтали. Для того чтобы построить автоотчет, достаточно нажать кнопку
Создать на вкладке Отчеты, выбрать, к примеру, Автоотчет: ленточный и ука-
зать имя таблицы (к примеру, Заказано). Этот момент показан на рис. 8.1. Далее
программа будет работать самостоятельно.
Фрагмент готового отчета, названного, как и таблица, Заказано, показан на
рис. 8.2. Предполагается, что макетом отчета является страница (по умолчанию
формата А4), поэтому отчет формируется на прямоугольнике белого цвета, ими-
тирующего бумажный лист. Обратите внимание, что в нижней части окна не ука-
зано количество страниц. На самом деле их может быть достаточно много.
Увидеть число страниц можно в правом нижнем углу документа.
В ленточном отчете в каждой строке выводится одна запись. У нас получился
отчет потому, что в таблице Заказано всего пять полей. Если бы полей было мно-
го, лучше подошел бы отчет «в столбец». Получить хороший ленточный авто-
отчет можно только для таблицы или запроса, имеющих небольшое количество
полей.
Отчеты
183
Новый отчет
кжтрргпзр
Мастер отчетов
АзтО0тме7. в столбец
Автоответ; ленточный
Месте? диаграич
Почтив^» гйкпей^и
Автоматическое создан,•«
AftrTflUttJx СТч**ТСВ
уточнила данньи таблицу кпи
а агро::
Рис. 1.1 Окно для создания авто отчета
1 CUB <
Страница: -4
Рис. 8.2. Фрагмент отчета
8.2. Печать отчета
Во время вывода отчета на экран автоматически включается режим предвари-
тельного просмотра и выводится соответствующая панель инструментов. Подра-
зумевается, что пользователь должен сразу приступить к подготовке печати.
Кнопка Масштаб позволяет просмотреть страницу целиком, но в этом случае
символы не будут различимы. Все поля не уместились на одном листе, и одна за-
пись таблицы будет выводиться на двух страницах. Кнопка Две страницы п лзво-
ляет увидеть их одновременно. Пример макета страниц показан на рис. 8.3,
Программа автоматически выбрала альбомную ориентацию листов, потому что
иначе строки на листе не умещались.
184
Глава 8
Рис. 8.3. Отчет режиме предварительного просмотра
Возможно, отчет требуется напечатать, используя книжную ориентацию лис-
тов. Есть несколько возможностей для уменьшения ширины отчета. Для начала
можно, нажав кнопку Установка, изменить параметры страницы: ширину левого
и правого полей (рис. 8.4). Их размеры взяты с запасом, и^ожнс установить
ширину левого поля 20 см, а правого - 10см. После этого можно на вкладке
«страница» выбрать книжную ориентацию листов и проверить, будет ли текст
отчета выходить за границы листа.
ГЬрйме 1 ры страницы
25,47
। гм’ЯЗее'
доавое. и J7
Q Л вч ТОЛЬКО Лаинг«
1 | Оггена f
Рис. 8.4. Окнодля выбора параметров страницы
Отчеты
185
Если этого недостаточно, можно попробовать изменить размер таблицы. Для
этого надо:
1. Создать копию таблицы (перетаскиванием ее значка при нажатой клавише Ctrl),
2. Проверить максимальную длину строк в текстовых полях. Необходимая для
этого процедура описывается в главе 10.
3. В режиме конструктора уменьшить длину полей. Если есть возможность, уда-
лить ненужные или необязательные поля.
4. Снова построить автоотчет на основе этой таблицы. Уменьшить ширину пра-
вого и левого поля страницы в окне параметров.
Конечно, все эти меры хороши на один раз, если отчет нужен срочно. Посколь-
ку мы работаем с копией таблицы, информация в ней быстро устареет, и придется
все повторять заново.
Бывают и другие трудности. В отчет может входить информация из нескольких
связанных таблиц. Чтобы узнать из каких, надо на вкладке Отчеты открыть кон-
текстное меню значка отчета и выбрать команду Зависимости объектов. В нашем
примере отчет сделан на основе таблицы Заказано но самое длинное поле отчета
выбирается из связанной таблицы Товары. В этом случае целесообразно сделать
запрос, включающий поля обеих таблиц, открыть его в режиме конструктора, с по-
мощью инструмента Тип запроса преобразовать в таблицу и потом изменять раз-
меры ее полей.
В остальном отчеты распечатываются как обычные документы. Настройка
принтера дш печати отчетов осуществляется так же. как и для других трограмм,
работающих под управлением Windows (с помощью команды Файл Печать).
8. 3. Конструктор отчетов
Если открыть в режиме конструктора отчет, создание которого описывается
в разделе 8.1, то мы увидим окно, очень похожее на конструктор форм (рис. 8.5).
Вся область отчета разделена несколькими горизонтальными линейками на зоны:
Заголовок отчета, Верхний колонтитул, Область данных, Нижний колонти-
тул. Примечание отчета. Высоту этих зон можно менять при помощи мыши.
Все элементы отчета представлены в режиме сонструктора в качестве объектов.
После того как объект выбран, он окружается рамкой с черными квадратиками
(маркерами). На рисунке выделено поле, в котором помещен заголовок докумен-
та. Маркеры, как обычно, служат для изменения размеров объекта. Пользователь
может перемещать объекты, задавать их свойства и программировать обработку
166
Глава 8
событий, связанных с объектом. Каждый объект снабжен контекстным меню,
которое позволяет выполнять указанные действия. Кроме этого, объекты можно
копировать через буфер обмена. При вставке объект располагается по умолчанию
в верхнем левом углу выбранной зоны. Для того чтобы поместить объект в опре-
деленную точку отчета, можно создать вспомогательный элемент управления
в этом месте, выделить его и выполнить вставку из буфера. Вставляемый объект
будет расположен рядом. Затем вспомогательный элемент управления можно
удалить. Прг просмотре отчета в режиме конструктора видно, что многие объек-
ты в отчете располагаются парами. Например, поле и его подпись, флажок и его
подпись и т. д. Такие объекты бывает удобно перемещать в связке. Если указатель
мыши принимает вид раскрытой ладони, то расположенные рядом объекты мож-
но двигать одновременно. В этом случае их взаимное расположение не изменит-
ся. Если указатель мыши имеет вид указующего перста, то перемешать можно
один объект. Для удобства позиционирования в поле отчета выведена сетка. Про-
грамма позволяет автоматически выравнивать объекты по сетке. Соответст-
вующие команды находятся в меню Формат.
Л'.
| Закамно : отчет
♦ заголовок □тчета
‘Заказано
| |
< Примечание отчета
< Верхний > .гюнтитул
(/Гбк» Гидр
* Область данных
КпдЭа|г.уч j (одТЬвара
УДЕкнийколснтигул
| • • । • Ч '
। и . I ц I •
Рис. 8.5. Отчет в режиме конструктора
и
Для создания в отчете новых объектов - элементов управления - в режиме
конструктора на экран, как и в конструкторе форм, выводится Панель элемен-
тов. Элементы управления отличаются тем, что их недостаточно просто создать -
необходимо еще запрограммировать, иначе они бесполезны. Различные аспекты
создания элементов управления обсуждаются, в частности, в главах 7, 10 и Ц.
Отчеты
187
\КоЬ Заказа Тсы-'р________________________[ Л'киргеслмо |
| ^Область ДЗДНЫ*
J ; |КодЗе|(сиа " цодТ^вара j v~цён^ р ' КИмчес |а
| | * Нижний колонтитул
/ [ т т Г“ Г" I I 1 I г-
S=№trp | — "фпрокгфо ' "из |'|
| х Прннечэнк* отчета v
и >
Рис. 8.6. Нижний колонтитул отчета в режиме конструктора
На рис. 8.6 показан нижний колонтитул автоотчета. Программа по умолчанию
вставила в колонтитул поле, использующее длинный формат даты, с функцией
Now( (текущая дата), а также поле с выражением, в которое входят переменные
Page (Страница) и Pages (Страниц):
-"Страница & [Раде] & из & [Pages]
Результат такого оформления виден на рис. 8.7. Для создания подобных полей
удобно использовать построитель выражений. Он запускается через контекстное
меню элемента управления. Из меню надо выбрать команду Свойства а далее на
вкладке Данньп использовать кнопку в строке Данные.
10253 Crdcclacfe
10254 Сшпдаск Leger
Г“Т ЙЭ?1] <
160.ООР
36.00Р
J UJ 95
Рис. 8.7. Нижни i колонтитул отчета режиме просмотра
8. 4. Сортировка и группировка в отчете
В таблице Заказано есть записи с одинаковыми кодами заказов, и в отчете,
сделанном на основе этой таблицы, можно сгруппировать записи по номерам за-
казов. Для подобных операций в Access предусмотрен специальный инструмент.
Создадим на базе нашего автоотчета отчет Группировка, в котором записи будут
отсортированы и сгруппированы по номерам. Для этого надо выполнить сле-
дующие действия:
188
Глава 8
I. Скопируйте отчет Заказано в буфер обмена и вставьте его на вкладку Отчеты,
дав ему новое имя. Откройте отчет в режиме конструктора.
2. Нажмите кнопку Сортировка и группировка на главной панели инструмен-
тов (или выберите эту команду из контекстного меню, связанного с линейкой
Область данных). Откроется окно с тем же именем. Выберите из списка
в первом столбце поле КодЗаказа (рис. 8.8), а в столбце Порядок сортировки
укажите значение «По возрастанию».
(I Ссртировк и группировка
По возрастанию
Свойства группы
Заголсюск гпугты
Г^инвчани? группы
Грулпрровка
Интервал
Нерйэрыроть
Да
Нет
По пйлнону эн-эченг
Нет
Порядок Г ртиравки
От-збраженге заголовка
группы
Поле/вырл1кен>№
КрдЭакам
Рис. 8.8. Окно для выбора параметров сортировки
и группировки
3,. Установите опцию Заголовок 1 руины как «Да». Закройте окно Сортировка
и группировка. В отчете появится новая линейка, которая создас зону заго-
ловка группы, как показано на рис. 8.9.
•4. Создайте в зоне заголовка группы новое поле. Его надпись будет определена
программой автоматически. Нам потребуется ее изменить. Раскройте контек-
стное меню надписи, выберите команду Свойства и на вкладке Макет задай-
те новую подпись «Заказ».
5 Теперь выделите само поле и укажите источник данных для него, то есть для
заголовка группы. Напомню, что это можно сделать, открыв вкладку Данные
и отредактировав одноименное гвойс гвс Используйте имя поля, которое было
выбрано в окне Сортировка и группировка. В нашем примере это поле Код-
Заказа.
б На вкладке «макет» задайте более крупный шрифт, например: размер 12 пунк-
тов и полужирное начертание.
Отчеты
189
Рис. 8.9. Зона заголовка группы
Теперь данные в отчете будут разбиты на группы. Каждую группу будет пред-
варять ее заголовок с номером заказа, как показано на рис. 8.10. Первая колонка
отчета теперь лишняя. Убедившись, что новые заголовки 1равильно показывают
номера заказов, первую колонку можно убрать. Для этого достаточно выделить
и удалить поле и заголовок колонки (открыв отчет в режиме конструктора). Осво-
бодившееся место можно занять другими полями.
13 Эяксзпис
Заказано
Цена JZoiirjetzwfl
Код до» Товар
Зеэчаз:
10248
35,30р.
1П24В СГвгТгесетчлПе
1024В Jad:^5 Mw^Englord Clam Che
S3 5Wp
Hbjjcp.
10246 те1 i Pierrot
^OjGQp
1LQ43 Wish Kcte N*u
C-pvUHUBl
5*
Рис. .Ю.Отчст группировкойданных
Скидка
!"
Если во время работы в окне Сортировка и группировка значение
Заголовок группы установлено как «Нет», группы создаваться , ie бу-
дут, но данные в отчете будут отсортированы по выбранному полю.
Обеспечить группировку шписег можно и в том случае, когда отчет
строится с помощью мастера отчетов.
190
Глава 8
8.5. Мастер отчетов
Отчет можно построить и с помощью мастера. Перед его запуском необходи-
мо выбрать таблицу или запрос, которые будут служить источником данных для
отчета. Используем таблицу Заказы. На первом шаге мастера, изображенном на
рис. 8.1 необходимо выбрать поля для отображения в отчете. Выберем (из спи-
ска «Доступные поля») КодЗаказа, КодКлиента, ДатаРазмещения, ДатаНазначения, Дата-
Исполнения. Это вполне подходящее количество полей для одного отчета. Если
полей слишком много, то программе не всегда удается правильно расположить
данные.
Сезанне отчего»
Тдбгыиы и мпмкы
Тлйгьща Заказы
Etitepnn- поля для отчета.
Д п скее выбор таблиц или запросов.
Ддсг/рнью тпяг
Выбранные поля:
Ст нностьДсставки
НазмниеГЬ л уча теля
ДдресПолучателя
ГородПопучат ля
пучателя
Инд ексПо лучатепя
СтранаПо л у ч атега
КодКлиента
Д з« кщения
ДатаИсполнення
гчя-Щ I
Рис. 1.11. Первый шаг мае юра отчетов
На втором шаге мастера (рис. 8.12) можно определи параметры группировки,
о которой говорилось выше. Правая часть окна мастера представляет собой упро-
щенный макет отчета, который наглядно показывает принцип группировки. Поле,
значения которого будут сгруппированы, надо выбрать из левого списка. Выберем
два поля: КодКлиента и КодЗаказа. При том положении, которое они займут в окне
мастера, список заказов в отчете будет сгруппирован по клиентам и номерам.
Иерархию группировки можно менять при помощи кнопок Уровень. Один из уров-
ней группировки всегда является текущим. Он выделяется полужирным шрифтом,
и к нему относятся все операции в окш в том числе команды изменения уровня.
Отчеты
191
Кнопка Группировка позволяет определить интервалы группировки. Это особен-
но важно для числовых данных и данных типа дата/время, потому что позволяет из-
бежать слишком большого числа групп или обеспечивает создание таких групп,
какие нужны пользователю.
Рис. 8.12. Второй таг мастера отчетов
Создание отчете*
Выберите порядок сортировки звписейн
[по энрю
Датткполиеннд
по возрастанию]
Допускается сортировка эапнее» по возраст
hi»1 по убыванию, включэощ-м до 4 полей.
Рис. 8.13. Третий шаг мастера отчетов
192
Глава 8
На третьем шаге (рис. 8.13) выбирают поля, по которым будет проведена
сортировка данных. Здесь можно гадать вычисление итоговых значений для
числовых полей. Нам можно использовать для сортировки поле ^атаИсполнения.
Как всегда, имеется возможность выбрать принцип сортировки «по возраста-
нию» или «по убыванию».
На четвертом шаге планируется общий вид отчета. Здесь вид окна мастера за-
висит эт того как была определена операция группировки. В зависимости от это-
го программа предлагает набор макетов отчета. В нашем примере (рис. 8.14)
мастер предложил достаточно большое число макетов, но так бывает не во всех
случаях. Картинка в левой части окна помогает понять, как будет выглядеть
отчет, если выбрать определенный макет. Нам подойдет, например, макет «блок»,
так как он обеспечивает компактное расположение данных.
I Совданмотчетов
Выберите вид накетадлр отчете
яви Miiriii ькйй m* |Д5йг
ЯХК4Х ХКХХХ ХХХХ» «И8Х
ЯНК'Я -И ХН
ХХНМ КХХК8 ВКХНН HWK
ХКЛХ
хюик ювхк адххй
XX
WHW WtoCK ЮОСЮС BWK8
XXWK ЖИХХ X8K8X JttXXX
XX1OB ХИМИЯ ЖХХХ
ХИМИИ XK8KX МХХ8Я
Макет
сгупеи-йяплй
• ЙПЗн-
» ЙИ 1
I структура £
Ориентация
0 книжная
। QJ Пйвопу КИю I
I PXJ г-рло 2
О Настроить полей для
размещения нз одной странице.
| | <»3змд |j flanfrp > | I Lctcco j
Рис. 1.14. Четвертый шаг мастера отчетов
Пятый шаг мастера (рис. ?.15) позволяет определить стиль отчета. Стиль -
это, скорее, дело вкуса, но даже он может повлиять на успех: от размера исполь-
зованных шрифтов зависят размеры заголовков и текста, которь в свою очередь
влияют на возможность напечатать отчет. Выберем, для примера, стиль «Полу-
жирный».
На шестом шаге (рис. 8.16) указывается имя отчета. Я выбрал имя Заказы по
датам. Теперь мы можем посмотреть на результат. Он показан на рис. 8.17 Нельзя
сказать, что все получилось идеально. Данные сгруппированы и отформатированы
Отчеты
193
Создание отчетов
Выбв iTe требуемый стиль.
Подпись да» паях
* <UJrt»w £алик-;
Деловой
»Щ1Й
СЖсПЪЫ
Спокейиым
Стрягтч-
I urn-lb JI <и°мл IL Дапц > | " готово |
Рис. 8.15. Пятый шаг мастера отчетов
Задай • имя отчета:
по
Создание отчетов
Указаны ес® сведения. необходимые для создания
отчета с помощью мастера.
Дальнейш»» действия:
® Просмотреть отчет,
Q Изменить макет отчета.
О Вывести (прав • по работе с отчетом?-
Отмена j < Нгал |
[ EtiTCico
Рис. 8.16. Шестой шаг мастера отчетов
правильно, так что отчет можно использовать. Обратите внимание, что имя отчета
становится заголовком отчета - имя надо выбирать подходящее. Но, в крайнем
случае, заголовок можно изменить в режиме конструктора.
7-870
134
Глава 8
U Заказы по датам - П
Заказы по датам
КодКлиента КодЗаказа Цата испо л нения [ата размещения та казна нения
[ALFKI 10702 21-104997 13-10-1997 2441-19971
10952 24-03-1993 16-03-1998 27-04-1993
11011 13-О4-199Ё 09-044998 07 ИМ 998
[AHATR 1030- 2WJ9-1996 18-09-1996 16-10-1996
1 J _ 10625 14-084997 08-03-1997 05-094997 >
10759 12-1?. 1007 28 И 1997 26-124997
10926 11-03-199? 04-03-1998 01-04-1993
1 [ANTON 10365 02-12-1996 27-1Ц996 2542 1596
' Страница: * < f*" 1” [ ID5D7 да < 22-04-1997 15 04-1997 13-05-1997
Рис. 8.17. Отчет сделанный pt помощи мастера
Легко заметить, что ширина столбцов недостаточна для размещения заголов-
ков (часть букв пропала). Это произошло, конечно, не потому, что в Access плохо
работает процедура форматирования отчета. Просто в строке оказалось слишком
мало места, чтобы разместить все заголовки. Только на боковые поля листа отво-
дится около пяти сантиметров. Выходом из положения может стать уменьшение
размера шрифта или иное позиционирование заголовков. Все это легко выполня-
ется в режиме конструктора (вручную, конечно). Доработка отчета предполагает
частое переопределение типа и размера шрифтов. В этом случае целесообразно
вывести списки-инструменты Шрифт и Размер на панель инструментов, которая
всегда находится на экране, или подключить панель инструментов Формат
(форма/отчет). Выбирая объект в режиме конструктора, вы сразу увидите по
этим спискам, возможно ли переназначение шрифта для этого объекта. Так, если
вы захотите изменить настройки шрифта для данных в отчете, то придется на-
страивать шрифт для каждого поля в области данных отдельно.
8.6. Анализ данных с помощью отчетов
Допустим, мы хотим выяснить, какие клиенты сделали больше всего заказов,
и отразить это в отчете. Для этого надо выполнить определенную последователь-
ность действий.
1. Вначале надо создать запрос для поиска повторяющихся записей в поле (одКли-
ента в таблице Заказы. Перейдите на вкладку запросов. Нажмите кнопку Соз-
Отчеты
195
дать и начните создание нового запроса типа Повторяющиеся записи.
На первом шаге мастера запросов выберите таблиц)' Заказы. На втором шаге
мастера укажите в качестве поля повторов ^Клиента. На третьем шаге не делай-
те ничего. На последнем шаге мастер даст запросу имя Поиск повторений для
Заказы. После выхода из мастера раскроем запрос в режиме конструктора и из-
меним условие отбора для поля Повторы: КодКлиента. Там было записано: >1.
Зададим новое условие: >0. Это позволит включить в запрос записи,
встречающиеся в таблице Заказы один раз. В результате мы получим запрос,
изображенный на рис. 8.18.
Поиск повторении для ~ шаэы : за пре на выборку
Рис. 8.18. Запрос на поиск повторений - источникданных
для отчета
2. Теперь можно приступить к созданию отчета. Мы будем строить его, как было
упомянуто выше, с помощью мастера. Перейдите на вкладку Отчеты. Нажми-
те кнопку Создать и выберите Мастер отчетов. На первом шаге мастера вы-
берите оба поля построенного запроса: КодКлиента поле, содержащее ин-
формацию о клиентах, и Повторы, где хранится информация о количестве
сделанных заказов.
3. На втором шаге не используйте группировку,
4. На третьем шаге задайте сортировку поля Повторы по убыванию.
5. На четвертом шаге выберите макет «табличный».
6. На пятом шаге можно указать любой стиль. Я рекомендую «Деловой».
7. На шестом шаге назовите отчет Сводка по клиентам. Готовый отчет показан
на рис. 8.19.
Можно ли улучшить этот отчет? Я думаю, да. В режиме конструктора можно1
поменять местами колонки отчета - это будет выглядеть более естественно.
И, кроме того, не помешает дать колонкам более понятные заголовки - мастер
отчетов использовал имена полей запроса.
7
196
Глава 8
। кЭ Сводка но клиентам _ >С] Д. .j
Сводка по клиентам
I
Повторы КодКлиента пале
31 SaVl<=
30 ERNSH
28 QUICK
19 HUNGС
19 FCLKA
| Страница: < I г » II tO < »
Рис. 8.19. В отчет включены < лько те данные, которые
были нужны
Еще одна задача. Создадим список товаров с группировкой их по видам. Для
ее решения выполните :лед> юшш действия в мастере отчетов:
1. На первом шаге мастера отчетов выберите из таблицы Товары поля КодТипа
КодТовара, Марка, ЕдиницаИзмерения. Цена, НаСкладе.
1. На втором шаге задайте для группировки поле КодТипа.
3. На третьем шаге выберите для сортировки поле Марка.
4. На четвертом шаге выберите макет «ступенчатый».
5. На пятом шаге можно указать любой стиль, но лучше «Сжатый».
6. На шестом шаге назовите отчет Группы товаров.
Готовый отчет показан на рис. 8.20. Как видно из рисунка, этот отчет также
нуждается в доработке - необходимо отрегулировать ширину колонок в режиме
конструктора, потому что заголовки колонок выведены не полностью.
8.7. Построение диаграмм
Создадим запрос (ЗапросСот удинки) в котором будут поля Фамилия и Имя из
таблицы Сотрудники и поле КодКлиента из таблицы Заказы. Поскольку обе таб-
лицы связаны, построение такого запроса возможно (рис. 8.21).
Отчеты
197
jJ Группы товареи « П
Группы товаров
КодТипа Млрм* KcmoiiJ* EДЛИННА. ЮТ-- I IM Денг их»
Г 10 p fiCiltr TQ 010 ООр Л
Chang Off 24 бутылки no 355 esa сер 17
Charixusc ved* ВД 74 । мл г rnrlp SIOjOOp- CQ
Cot* at Btaye 39 1г в ffbinon no 75 11 857.500. 17
Gujufu Faniaiiicj 10 12 6лногпоЗл и 202 50р 20
p<A CdUm 44 И бак .» no 50?.- 2 070.00р. г?
Lakk jlikoori 30 500 ни 010 дор 57
Lau Ching Lumberjack La 21 24 бутылки ио 355 еэо оор □и
□ ulbJtJa LfQfeT 24 24 бутилен *>« Эб5 еи.сср. 16
Rhcnbrau 2в 24 бутил»«паОВ &«.75р о
Sasquatch Alt 35 24 бутилам лс 356 ВЭО.Ойр И
Sitek' .Stout 36 24 бутылей ПС565 810,00р. г
1 2 Ante e« Syrup ЯВ 12 бутыль с ло 560 450 .ССр 23
г ‘ Chef Atforfi Cajun 07 ив бани* п 177м еоо сер.
1 С >• ч | 1 ► 1 nJ C
Рис. 8,20.11рпмер отчет с группировкой данных
I д’ Зап рос Сотрудники : запрос на выборку I -JI Н IKcflj
I I - — - II НИ , .!!» |l I - Ь—Н.гтт --------- — “[““I
Фамилия Имя
Клиент
|'Белова Мария Tortuga Restaurants
Белова Мария LILA-SjMerniercado
[Белова Мария Rattlesnake Canyon Grocery
[Новиков Павел Bion del pere et tils
Новиков Павел Morgenslern Gesundkost
|Новиков Павел BerglunLc snabbkop
Новиков Павел Vinelte bisiro
1 Новиков Павел Maaazztni Alirnentari Riuniii
Запись: [И 1 * i ГГц h~i . ♦ изгзо
Рис. 8.21. Исходные данные для построения диаграммы
При рассмотрении запроса видно, что поле Фамилия содержит повторяющиеся
значения. Если мы захотим сравнить количество заказов, обработанных менед-
жерами, то информацию удобно представить в виде диаграммы. Построение диа-
граммы можно разбить на следующие этапы:
1. Перейдите на вкладку Отчеты. Нажмите кнопку Создать и выберите Мастер
диаграмм. Укажите в качестве источника данных запрос Зап росСотруд ники.
Будет запущен мастер диаграмм.
198
Глава 8
2. На первом шаге мастера диаграмм (рис. 8.22) выберите два поля запроса:
Фамилия и 'одКлиента - они будут отображены на диаграмме.
Рис. 8.22. Периый шаг мастера диаграмм
3. На втором шаге мастера укажите тип диаграммы - «Гистограмма» - как наи-
более подходящий для нашего случая (рис. 8.23).
| Создание диаграмм
Выберите тип диаграммы.
I ( । « ш и тип диаграммы позволяет
наглядно представить ••-вменил
выбранных полей.
Гистограмма
Ото" изменения за период
времени или называет
относительные
элементов. Каюгории данных
располагаются по горизонтали,
щ «ее - по времени
значения - по вертикали.
Отпена | < Назад jj Далее > | Q тово
.Рис. 8.23. Второй шаг мастера диаграмм
Отчеты
199
Создание диаграмм
Отмена | < Уазад 1 > [ I Готово
Рис. 8.24. Третий шаг мастера диаграмм
4. На третьем шаге мастера определяется внешний виддиаграммы. Для того что-
бы в гистограмме для каждого менеджера была предусмотрена отдельная ко-
лонка, поле КодКлиента надо перетащить в зону вертикальной оси. В этом окне
имена полей перемещаются при помощи мыши. На рис. 8.24 показано, как
должно выглядеть окно мастера. Зона «Ряды» должна остаться пустой: тогда
мы получим только один ряд данных, и все столбики диаграммы будут одного
цвета. В других задачах эта область позволит создать разноцветную диаграм-
му. Итак, в нашем случае по вертикальной оси должны располагаться коды
клиентов, а по горизонтальной оси - фамилии менеджеров.
5. На последнем, четвертом шаге мастера (рис. 8.25) можно выбрать имя для но-
вой диаграммы. Назовем ее ДиаграммаСотрудники. Вы уже знаете, что имя,
заданное в мастере, попадет в отчет в качестве заголовка и будет напечатано
самыми крупными буквами. Поэтому в реальных задачах есть резон приду-
мать естественное информативное имя.
Диаграмма построена. Но нет никаких гарантий, что она вас удовлетворит.
Возможно, у вас получится что-нибудь наподобие показанного на рис. 8.26. Оче-
видно, что работу, начатую мастером, надо продолжить.
1. Откройте отчет с диаграммой в режиме конструктора (рис. 8.27). Диаграмма
представлена в виде макета, и надписи, расположенные на ней, не имеют ничего
общего с реальными данными.
200
Глава 8
Создании диаграмм
Задайте нзэв-ани® диаграммы:
ДиаграмгаСотрудн'км
jftw- Погамть условии обозначений?
G«
О"ЕТ
/ у Дальнейшие действия после созданиядиагмнгы^
© Открытие Отче । с грзччсй.
О Изменение структуры отчета t»iH дивгра^пы
Q Вывас^нслровкугорабстесдмагранной.
| Спона J ] < Назад j | Qjtcc^ |
Рис. 8.25. Четвертый шаг мастера диаграмм
Рис. 8.26. Диаграмма, полученная в результате работы мастера
2. Выделите диаграмму так, чтобы она окружалась рамкой с маркерами. С перво-
го раза это может не получиться, тогда надо несколько раз щелкнуть мышью.
3. Выберите команду Диаграмма Параметры диаграммы. Откроется окно
Параметры диаграммы. На вкладке Легенда отключите легенду. Закройте
окно.
4. В окне конструктора увеличьте площадь зоны отчета и увеличьте размер диа-
граммы перетаскиванием маркера.
Отчеты
201
, ДнчграммаСотрудники : отчет
ЦЩГР ДО М 3 С отру ДН LI к L |
□ 114)
•Д тТЛ;1 Jff.
тлгЛгМугГ
10С
ас
?мт
□ JhD
□ 4га
I 1-bixnrri К.ЦП1>1Т>П¥Л
BqCiok Запух Стр
Рис. 8,27. Конструктор отчетов с диаграммой
Рис. 8.28. После доработки диаграмма выглядит лучше
Теперь диаграмма смотрится намного интереснее (рис. 8.28). Ее несложно
превратить в рисунок и вставить в любой офисный документ.
В режиме конструктора можно раскрыть контекстное меню, связан-
ное с диаграммой, и выбрать из него команду Объект Диаграмма =>
NB Изменить. Будет запущена программа Graph. В ней пользователю дос-
тупны два основных объекта: таблица с данными и окно диаграммы.
Это еще один способ редактирования диаграммы.
Гпава 9
Подготовка данных для Интернета
Для публикации данных в Интернете Access позволяет создавать страницы
в формате HTML. В локальной сети предприятия такие файлы тоже можно ис-
пользовать, если открывать их броузером. Эти документы бывают нескольких ти-
пов: статические HTML-файлы. динамические HTML-файлы, страницы доступа
к данным. Все они имеют свои особенности и область применения. Например,
статические документы удобны тем, что их можно разместить в Интернете
у любого провайдера, не прибегая к сложным настройкам. Страницы доступа
к данным будут надежно работать в локальной сети предприятия. Эта глава по-
священа архитектуре подобных документов.
9.1. Статические файлы в формате HTML
Документ статического типа создается один раз и впоследствии не может по-
лучать обновленные данные из базы. Если требуется поддерживать актуальность
данных, документ надо генерировать заново и выгружать в Интернет. Зато ста-
тические документы обеспечивают высокую совместимость с различными типа-
ми броузеров. Поскольку в основе таких документов лежит достаточно старая
версия HTML 3.2, то практически все используемые сейчас броузеры будут
корректно отображать такие документы. Для просмотра этих документов можно
использовать программу Microsoft Internet Explorer 3.0 и ее более поздние версии
(сейчас применяется версия 6).
Допустим, нам надо конвертировать таблицу Товары из базы «Борей» в статиче-
ский файл HTML. Для этого надо:
1. Выделить таблицу.
2. Выбрать команду Файл > Экспорт.
3. Выбрать при сохранении тип файла «HTML Документы» и задать имя файла,
например tovari.
Подготовка данных для Интернета
203
В результате в выбранной папке сохранится файл tovari.html. В Интернете суще-
ствуют свои правила для выбора имен файлов, поэтому я настоятельно рекомендую
никогда не использовать в именах русские буквы и пробелы. Кроме того, желатель-
но использовать только строчные буквы, чтобы не было путаницы в ссылках (в не-
которых операционных системах, применяемых на серверах, не происходит
автоматического преобразования регистра букв при работе с именами файлов).
Формально документ готов для выгрузки в Интернет, но его можно и дорабо-
тать. Единственное реальное ограничение - размер файла. Исходная таблица мо-
жет оказаться настолько большой, что Web-страница, сделанная на ее основе,
будет очень долго загружаться. Если размер файла намного превышает
100 килобайт, лучше разбить таблицу на части и сделать несколько файлов.
Наш файл можно открыть в броузере как обычную Web-страницу (рис. 4.1).
levari - Microsoft Internet Explorer С1
Г Файл Правка Вид избранное Сервис ^правке Поиск Избранное Медиа if d ’
Адрес D:\l AccessiOS'jBDpeHjtovari.l'l 1 v Переход
1 1 Genen S'Eoiiyu tovan 6 2 24 бутылки по 250 мл 697,50р. 39 г A 5 Г
2 7 3 32 коробки по 500 г 785,25р. 29 С 10
3 Alic - Mutton 7 6 20 банок по 1 кг 0 С 0 1
4 Carnarvon Tigers 7 8 Г кг упаковка 42 0 0 0
5 Jeatin r- Chocolate Tiscuits 3 10 коробок по 12 пгт 414.00р 25 С 5 0
6 Sir Rodney’s Marmalade • 8 ? 30 коробок 3645,00р. 40 0 ' I 0
7 Sir Rodney’s Scones 8 3 24 упаковки по 4 шт. 45п,Опр. 3 40 5 0
8 Gustafs Knackebrod 9 5 24 упаковки по 500 г 945,00р. 104 0 25 0
Готово J Му Computer
Рис. 9.1 Пример статического юкумептп HTML
При желании несложно просмотреть код такой страницы. Эго можно сделать
прямо в броузере, использовав команду Вид => Просмотр HTML-кода. В этом
случае в качестве текстового редактора по умолчанию используется программа
Блокнот. Настройки броузера позволяют подключать другой текстовый или ги-
пертекстовый редактор.
Приведу здесь код этого документа, оставив две строки таблицы (в смысле
HTML-форматирования они все одинаковы):
204
Глава 9
<HTML DIFt=LTR>
<HEAD>
<META HTTP-EQUIV='Content-Type CONTENT^" Lext/html charset=windows-1251“>
<TITLE>tovan</TITLE>
</HEAD>
<BODY>
<TABLE DIR=LTR BORDER>
<CAPTION>tova 1</CAPTION>
<TR>
< TD DIR-LTR ALIGN=RIGHT>1</TD>
< TD DIR-LTR ALIGN=LEFT>Genen Shouyu</TD>
< TD DIR=LTR ALIGN=RIGHT>6</TD>
< TD DIR=LTF ALIGN=RIGHT>2</TD>
< TD DIR=LTR ALIGN=LEFT>24 бутылки no 250 -m</TD>
< TD DIR=LTR ALIGN=RIGHT>697,50p.</TD>
< TD DIR=LTR ALIGN=RIGHT>39</TD>
< TD DIR=LTR AL1GN=RIGHT>O</TD>
< TD DIR=LTR &LIGN=RIGHT>5</TD>
< TD DIR=LTR ALIGN=RIGHT>1</TD>
</TR>
<TR>
< TD DIR-LTR ALIGN-RIGHT>2</TD>
< TD DIR=LTR AEIGN=LEf >Pavlova</TD>
< TD DIR=LTR ALIGN=RIGHT>7</TD>
< TD DIR=LTR ALIGN-RIGHT>3</TD>
< TD DIR=LTR ALIGN=LEFT>32 коробки no 500 r</TD>
< TD DIR=LTR ALlGN=RIGHT>7B5, 25p </TD>
< TD l=LTR ALIGN=RIGHT>29</TD>
< TO DIR TR ALIGN=RIGHT>O</TD>
< TD DIR=LTR ALIGN=RIGHT>10</TD>
< TD TR ALIGN=RIGHT>O</TD'
</TR>
</TA8LE>
</BODY>
</HTML>
С точки зрения Web-дизайна это очень простой документ, и содержит он толь-
ко основные теги. Конструкция DIR=LTR совершенно не обязательна. Она указы-
вает, что текст выводится слева направо, но это и так делается по умолчанию.
Из всех элементов МЕТА использован только тот, который указывает на кодировку
Подготовка данныхддя 1нгернета
205
русских букв (windows-1251). Опытный веб-мастер добавил бы еще подобные
элементы для ьиочевы: слов, описания страницы и т. д.
Элемент TITLE не несет смысловой нагрузки: совершенно незачем в заголовке
окна броузера помещать название файла. Целесообразнее ввести туда текст, ко-
торый облегчил бы пользователям поиск этой страницы и увеличил посещае-
мость сайта. Поскольку текст этого элемента индексируется поисковыми
системами (Alta Vista, Google, Rambler, Yandex и др.), то желательно сделать его
как можно более информативным, например:
II \ оварн коммерческой фгрны Ьорей вина, рнбь продукты мне >./Т'Ш
В элементе BODY можно использовать все допустимые атрибуты (например,
для задания желтого фона может использоваться конструкция bgcolor="yellow").
Код таблицы заключен между тегами <TABLE5 и </ТАВЕЕ>. Для формирования
таблицы использованы теги строки <TR> и теги ячейки таблицы <TD>. В таблице
также использован довольно редко применяемый тег заголовка <CAPTION>. Он
опять-таки содержит только имя файла и не дает полезной информации. Я бы
удалил его, а перед тегом <TABLE> поместил обычный заголовок:
<Н1>Перечень товаров коммерческой фирмы Борей </Н1>
Информация из таких заголовков тоже индексируется поисковыми машинами
и влияет на посещаемость страницы.
Вариантов форматирования Web-страницы очень много. Можно изменить тол-
щину рамки таблицы, выбрать другой цвет текста, выровнять таблицу и заголо-
вок по центру и т. д.
Такую страницу несложно доработать в любом гипертекстовом редакторе
(MS FrontPage, Macromedia Dreamweaver или другом) и применить к нему форма-
тирование на уровне HTML 4. Например, если страница предназначена для сай-
та, в нее можно ввести оформление с помощью каскадных таблиц стилей (CSS),
принятое для всего сайта, чтобы не нарушать стилевого единства. Разумеется,
ничто не мешает дополнить страницу новыми необходимыми элементами:
рисунками, гиперссылками, счетчиками, баннерами и т. д.
Можно поступить наоборот: выделить и скопировать в буфер обмена весь код,
находящийся между начальным тегом <BODY> и конечным тегом </BODY>, и вста-
вить в какую-нибудь другую Web-страницу.
206
Глава 9
9.2. Динамические файлы в формате HTML (ASP)
Для обеспечения работы динамических файлов в формате HTML на сервер
должно быть установлено соответствующее программное обеспечение. При ис-
пользовании Microsoft Internet Information Services (IIS) таблица из базы данных
может быть преобразована в файл типа htx. который преобразуется сервером
в обычный html-фаш и отправляется на компьютер пользователя. Для извлече-
ния данных из базы используется дополнительный файл типа ide, содержащий за-
прос на языке SQL.
Другим популярным форматом файлов является ASP. (Active Server Page).
Компонент Active Server входит в состав IIS. Документ ASP представляет собой
файл в формате HTML, в который вставлен код, написанный на одном из скрип-
товых языков: Java Script или Visual Basic Script. Чаще всего применяется Java
Script (его использует даже Microsoft - разработчик Visual Basic). Особенностью
этих документов является то, что они выполняются на стороне сервера, тогда как
обычные скрипты выполняются на стороне клиента. В тексте asp-страниц ис-
пользуются знаки чтобы выделить серверную часть кода.
В том случае, когда в документе ASP используется информация из базы дан-
ных, последняя должна быть подключена при помощи драйвера ODBC.
Access позволяет легко сгенерировать asp-файл (с помощью команды Экс-
порт), но зато при отладке таких файлов возникают определенные трудности.
Эго в первую очередь касается отладки на локальном компьютере.
В этом случае на компьютере должно быть установлено соответствующее про-
граммное обеспечение. На старых версиях Windows обычно устанавливают Per-
sonal Web Server, а на новых - Internet Information Server. Задача заключается
в эмуляции работы через сеть, поэтому здесь требуются определенные настройки.
Рассмотрим ситуацию, когда на компьютере установлена операционная систе-
ма Windows ХР. Для установки IIS надо открыть Панель управления и выбрать
режим Установка компонентов Windows. В окне диалога необходимо выбрать
IIS (рис. 9.2). Даже из подсказки в окне диалога ясно, что этот компонент требует-
ся для работы с ASP.
После его установки на системном диске автоматически создается папка net-
pub\wwwroot, которая представляет собой «Web-сайт по умолчанию» (Default Web
Site). Файлы для тестирования надо копировать в нее.
Теперь требуется проверить, будет ли работать на компьютере механизм ASP. Для
этогонадосоздатьтестовую страницу, например isptest.as| с не сложным кодом:
Подготовь данных дли Интернета
207
I Мастер компонентов Windows
Компоненты Window*
Вы ожетедобавкть йгн ^алить компонуя. Windows 4 Р
Чтобы добавить или делить кс>к1оненг. установите или сииьыге фпажок.
Эатененньй Флажок означает частичную у ст а нсек у компонента. Ewrchhi его
состав г г.зйиляо. кнопка’’Состав”,
Коутюненгы:
^FaxServices 4,1 МБ *•
JsjJ Indexing Service 0.0 ME •
У -4 Internet Explorer 0,0 МБ
Internet IrtfonnaitKin Seivices.^S] 16,5 МБ
r '^‘ЧМлпаоргпйгй and MnnifonnnTrmfe 4 , 7 Я MR . v
Описана: Indites Web and FTP suppat. along wkh support (or Frontpage,
transactions, Adis * Server > ageand 1 йаЬке connections.
Требу err я на диске: 102,6 МБ
315 1МБ
| .Назад j| Далее? | | Отмена j |
Рис. 9.2 Установка IIS
<%© LANGUAG1 JavaScript %>
<HTML>
<HEAD>
<HTLE>Tecr ASP</TITLE>
СМЕТА tittp-equiv="Content-Type" content-'text/html, charset=windows-125l”>
</HEAD>
<BODY>
<Н1>Вывод даты:</Н1>
<! D = Date() ; %>
Response.Write(D) ;%></H1>
</BODY>
</HTML>
Здесь используется стандартная функция DateO для вывода текущей даты
(и времени) в окне броузера. Если открыть такую страницу в броузере, то, скорее
всего, она работать не будет (появится только текстовый заголовок) или будет вы-
ведено сообщение об ошибке «HTTP 403.1 Forbidden: Execute Access Forbidden
Internet Information Services», Тогда настройку IIS надо продолжить. Выберите на
Паиелн управления компонент Администрирование, а потом Internet Infor-
mation Services (рис. 9.3).
208
Глава 9
flf). Internet Informal ion Services
Консоль Действие 0нд £прв!* а
4= ©IE Og &
Internet Information Service*
- ALEXL. (локальный конгьк
- i | Веб узлы
Default1- eb 5ite
- jg HSHWp
* 4 ’’'inters
* _4 btauxdir
+ ,4 vti bin
+ _J rfide
* LJCFDOC5
< _J Mjh
* |_J _\tlj3vr
- _vtijQ0
+ I „private
+ 3_4tl_b!t
* „J-VtLscrpt
* L_J _ vtL r
* _.iimages
i ij Виртуальный SMTP-cepi
!< ’ >
, и
Имя j Путь
D v“ pvt
LJ vti log
|LJ vti txt
_JjKtLscript
-J ..vbjcrif
Jimages
|j] tovasp.asp
1*1 tcvesp.htm
,*| Thumbs.db
Jft.formasp-asp
_*1 baaLmdti
•'Srnpi^Jjery.asp
Jjjtovaspl.asp
,">] aspte asp
I^JbeUatf
v1 I j*] Isstart.asp
Состояние
Рис, 9.3. Окно [IS
Элемент «Default Web Site» - это папка netpub\wwwroo Надо выбрать этот элемент
и нажать кнопку Свойства. На вкладке Веб-узел (рис. 9.4) надо задать IP адрес сво-
его компьютера: 127. 0. 0.1. Кроме этого, надо проверить вкладку Домашний ката-
лог: на ней должен быть указан действительный путь к папке wwwroot
Теперь необходимо дать разрешения для определенных файлов, входящих
в «узел». Выделите необходимый файл (например, asptest.asp) в окне US и рас-
кройте его контекстное меню. Выберите команду Все задачи Мастер разре-
шений. На втором шаге (первый пропускается) надо установить переключатель
в режим «Выбрать настройки безопасности на основе шаблона». На третьем шаге
выбрать «Public Web Site», Четвертый шаг пропускается (там можно прочитать
полезную информацию), пятый шаг финишный. Если в дальнейшем вы захотите
переименовать файл, мастер надо будет запустить заново.
После этого можно открыть броузер (Internet Explorer версии 5 и выше) и ими-
тировать доступ к «Web-странице», набрав в строке Адрес:
fttp://127.0.0.1/asptest asp
После этого броузер должен правильно отработать скрипт и показать дату
(рис. 9.5).
Подготовка данных для Интернета
209
| CnuiiciBii'. Defdult Web Site
Безопасность каталога
Специгы-t • ошибки Se rver Е xtei s tons
Ееб-узеп Фильтры ISAPI Домашний каталог Документы
Иди *»:*• -имя
Описание' Defa -Web to
IP-эдрвс: 127 О | Допо лнительно
TCPnopi 60
Лсдг.лшенв a
Времяожиа-вния ' II . с
0 Разрешить поддерж* открытых лединеи •; НТГР
И Вести журнал
II
" Форматтеру дето журнала
Форм<11 Файла - денала MiciDioft US v I Свойства... j
i
||
I-
□К i | Отмена j [ Справка |
Рис. 9.4. Настройка локального «Web-узла»
I ^jTcctASP - Microsoft Internet Explorer - П ,
11 Файл Правка Вид узбрвнное Сервис Справка
ч- ’ *>
> Назад К] g'j Поиск Избранное н* Медиа
I- : http://127.0.C. l/asptest asp * Переход
Вывод даты:
Mon Feb 16 14:39:35 2004
II I
j £ j TTjtcoo lntBH4t
Рис. 9.5. Файл ASP в броузере
Теперь можно приступать к тестированию страниц, созданных в Access. Для
этого надо сделать следующее:
1. Создайте пустую базу данных; назовите ее, к примеру, bazal .mdb и сохраните
в папке lnetpub\wwwroot.
210
Глава 9
2. Откройте две программы Access с »азам данных «Борей» и baza 1.
3. Перетащите таблицу Товары из базы данных «Борей» в базу данных )aza1.
4. Выберите таблицу Товары в файле bazal .mdb и выберите команду Файл
Экспорт.
5. Выберите при сохранении тип файла «Microsoft Active Server Pages» и дайте
имя файлу, например tovari.
6. В открывшемся окне параметров обязательно заполните строку Название
источника (bazal) и при необходимости выберите опции, например пароль
доступа.
7. В окне IIS запустите мастер разрешений для файла tvari.asp как было сделано
в предыдущем примере.
8. На Панели управления раскройте компонент Источники данных (ODBC).
Выберите вкладку Системный DSN. Здесь надо установить драйвер для базы
данных. Нажмите кнопку Добавить. Выберите «Microsoft Access Driver
(*.mdb)». Нажмите кнопку Готово.
9. В появившемся окне Установка драйвера ODBC для Microsoft Access введи-
те в строке «Имя источника данных» имя файла: bazal.
10. Нажмите кнопку Выбрать и укажите местонахождение файла bazal .mdb
(рис. 9.6). Закройте окно, нажав кнопку ОК.
Имя источника данных, указанное при генерации asp-документа,
должно совпадать с именем источника данных, указанного при уста-
новке драйвера ODBC. В противном случае при открытии страницы
будет выдано сообщение о тутренней ошибке сервера.
Теперь, как и в предыдущем примере, можно использовать броузер для про-
смотра asp-файла (рис. 9.7). Вместо запуска Internet Explorer можно воспользовать-
ся контекстным меню файла в окне IIS. Команда для открытия ASP в броузере
называется Обзор.
ASP по праву считается одним из самых проблематичных направлений Web-
конструирования, и кажущаяся простота этого примера не должна вас обманывать.
В реальных задачах дело обстоит, конечно, несколько сложнее. ASP - отдельная
ветвь программирования со своими тонкостями, приемами и «подводными камня-
ми». Использовать в качестве основы файл, созданный в Access, конечно, можно.
Но, скорее всего, его придется доработать в зависимости от конкретной задачи. Для
этого желательно применять «продвинутый» гипертекстовый редактор с поддерж-
кой ASP, например MS FrontPage.
Подготовкаданныхдля Интернета
2ft
Установка Драйвера ODBC ДНЯ Microsoft Access
Имя источника данных bezel
База товаров
База данным
। Базад,а-1ньи D VnelpubXH^wortXbazal.rridb
। Ёыбрагь.. Создать. | Восстановить. I Ц&31*
I
| Системная база данных
. «• tW
' fieae д-зтых
I I
Рис, 9.6. Окно для выбора параметров драйвера ODBC
fej Товара - Microsoft 1 tier net Explorer
Файл Главка бнд Избранное 'Саране Справка 4
м"1 # Поиск Избранное медиа * • j •
<^пНр7/12?-О О Ifawan.asp v ТАредгса
Товары
Код товара Марка Пвсзайцги; Тип Единиип измерения Цена На Ожидается складе Минимальны* запас - Поставки
1 Genen Shouyu 6 2 24 - ПЫЛКИ 697,5 39 0 5
г 250 мл
j Pavbva 7 3 32 коробки по 6LG г 765,25 29 J ia
3 Multon 7 6 20 бане' по 1755 О [1 3 >
Готово ф Internet
Рис. 9.7. Просмотр ASP
9.3. Создание страницы доступа к данным
Еще одним вариантом подготовки данных для Интернета является создание
страниц доступа к данным. И в этом примере используем данные из базы
«Борей».
212
Глава 9
На вкладке Страницы выберем режим Создание страницы доступа к дан-
ным с помощью мастера. В мастере выберем таблицу Товары и ее поля КодТипа,
Марка, ЕдиницаИзмерения, Цена, НаСкладе, ПоставкиПрекращены, как показано на
рис. 9.8.
Ntacrep страниц
lafinei.b и тросы
Паблинвг Товары
Как.’г-поля следует давить на рэнниу
Долус ается выбор tit когьк- хтабл-f j или лроссе.
Доступные! < ля:
Выбранные поля:
КодТавч>а
Кс -.Тсс -
КрдТгаа
М ппАапьмыйЭапас
- | Ед,>«ги^Ъмер&+в
----Нема
НаСкладе
' По_тавгскЛрекраш,«-ы
| Отмена J
] Далее > | | Готово |
|О'Ундзетёа
Рис. .В Выбор полей для страницы доступа к данным
На втором шаге мастера выберем для группировки поле КодТипа (рис. 9.9). Эго
очень похоже на создание отчета с группировкой, но результат будет другой.
На третьем шаге выберем сортировку по возрастанию для поля Марка
(рис. 9.10). Здесь можно выбрать для сортировки даже четыре поля, но на самом
деле вряд ли стоит использовать больше двух.
На последнем шаге остается только задать имя страницы, например Товары.
После этого страницу можно открыть для просмотра в обычном окне или для
переделки в конструкторе.
Как выглядит страница, показано на рис. . 11 Поле группировки снабжено зна-
ком «плюс» для раскрытия группы (после чего значок превращается в «минус»).
Из-за группировки появились и две строки управления записями. Эго не очень
удобно, и их надо отделить друг друга и снабдить комментариями. Все это можно1
сделать, отредактировав код страницы.
Подготовь данных для Интернета
213
Масте страниц
Добавить уровни группировки?
Мод! и! и
Марка) Един ца н-р-нн Цена
НаСкладе, ПоставкиПрехращены
ПоставкиП. ’•кращвчы
Уровень
Грнтпирпвка... I Отмена [ < Назад Ц Далее - | | Готово
Рис. 9.9. Выбор поля для группировка данных
[ < Ыаэад Далее > j ] ГОТОВО |
Рис. 9.10. Выбор поля для сортировки данных
214
Глава 9
1
-----------
12 КодТипа
Марк*:
Единица jo корсгёс£ *1С 20 LUT-
Цена:
На • ладе 39
ПоставкиПрекращв^ j
Н Ч Товары I из 12 > Н ►- »: Of •; Tf \
Треары-КсдТи' 1 из 8 к И > W Л i К / ’
Рис. 9.11. Пример страницы доступа к данным
Если использовать команду Вид — Источник HTML, то страница будет открыта
во встроенном редакторе (рис. 9.12). Как правило, страницы, созданные програм-
мным способом, имеют большой объем кода, и это достаточно неудобно. Данная
страница построена в соответствии с несколькими спецификациями: HTML, XML,
CSS и Java Script. Во время правки кода необходимые руководства желательно
держать под рукой. Данный редактор хорош, кстати, тем, что в его встроенном спра-
вочнике есть информация по криптовьн языкам и HTML.
На вкладке Страницы в базе данных помещается только ярлык, а сама страница
сохраняется в виде html-файла. Просмотр таких страниц в локальном режиме
обычно не вызывает проблем, но у пользователя на компьютере должны быть уста-
новлены Web-компоненты для MS Office 2003. Эго достаточно серьезное неудобст-
во, ограничивающее возможность публикации данных для широкого круга
пользователей. Указанные компоненты можно, юнечно. загрузить с сайта Microsoft,
но объем файла достигает семнадцати мегабайт, и нет гарантии, что они установят-
ся (например при наличии более ранней версии MS Office). Другое дело публика-
ция для определенных пользователей, например работников предприятия.
При создании файла программа указывает в нем ссылку на базу данных с ука-
занием локального пути. Перед размещением базы и страницы в Интернете этот
путь надо удалить. Эго можно сделать даже в Блокноте, отыскав параметр «Data
Source» (рис. 9.13). Или можно искать имя папки. Например, в моем случае база
данных находилась в папке Борей, и это слово легко найти, потому что оно боль-
ше не встречается в коде. Найденный путь нужно заменить именем файла базы
данных. Причем можно использовать и другой файл. В нашем примере сюда
Подгоговк данных для Интернега
215
4i!> Страница! - Microsoft Script Editor - С граница 1
Hie Edit Ует« Tools Winder Help
;i Страница] [
<'DCjCTYPS HTML PUBLIC « //¥3C//DTP HTML 1.0 TransltiDir^
•-HTML ?rg TP-BtC-li-BdO** яг bis j —
^rnj^hejnas-mi'jrcBUfi-5sitntc^Xio*a:ciCf 1ieh xreiri*
"urn TSCheThM-Bilsircsofi-ean: :excel" xndnJ) a =
"urn: schexnas-TTilcirosctc-ccv office : access" xmlris : d
"uuid: C2F41O1D-ESB3-1Ldl-A2$F-0DAAaDC145B2rr>
rel=File-L1st ><Т1ТЬЕ>Топары< y TITLE*
<BETA
<META
<META
<ДЕТА
СМЕТА
^OBJECT i l-HSOBSC
№1Й=СЬЗИ1!ОООгЕ553-иС1С1С-ОСЬО-СООО-ОСОООООСЮаЧб><РА
<META . Jilt епт - "MSHTML 6.00.2S0C . 1152" падч--GENERATOR*
<STYLE id-aSODAPDEFAULTS *ype=rext r?-> Гл -гщ
Г ФГ T . ip-.-. p г. Ф T?J.- - r ; TUT: . .• Г •
oontent - Access. Application
For Eve nt Handlers VALBE-"TRUE "r
http-equ , ’Content-Type _n.char
Ю nt© ГЛ-«HTML 4.D1
e“vs_"argerS0hetra>
1
>r
LOl I
r граница 1
[ф] CTDiHHLftI
[NS
Ptrjw* Expiof' Ctj.3-hliI
Рис. 9.12. Кол трапицьт доступа к данным
можно записать имя рассмотренного в этой главе файла oazal .mdt Эта база со-
держит такую же таблицу Товары, поэтому в работе страницы ничего не изме-
нится. Имя файла пригодно для размещения в Интернете, но главное не )то База
«Борей» имеет размер около двух с половиной мегабайт, a bazal.ПЛdb - около двух-
сот пятидесяти килобайт. Работать с таким файлом в Интернете, конечно, удоб-
нее. После того как путь удален, предполагается, что файл базы данных будет
находиться в одной папке со страницей.
- tovar - Блокнот
Файл Правка Форсит вид Справка
;Data "Access pm = т г Deny N =:i m d F
LtKdvLJbel</a:Ё1emeu io5*10; <a:ReccrdseTLabel>ToEapu | ь из |2;Товары
I CM 1 dvabel >4*13; 4*10; </a; 11 erne?.? Ext ens 1 nn> 4*10; < a \ El emem e x.t er s i or, >4
'efaultsort>[rpynna_T£jBapbi-KDATnna]</a: Defaultsort<a:neaderElem«
pFllTerccntroix/aiGroupFilTErccnrrol >£#13; A#10; </a:GrcupLevel >£#13; d#l 0;
uct;/>£#13;£#lCi; <a : SchemaFleld a : 1 d=£quot; минимальныиэапас&чиох; a : dataty
ВJECT>
Рисп 9.13. В Блокноте выделена ссылка на файл базы данных
216
Глава 9
9.4. Публикация данных в Интернете
Первый вопрос, который нужно решить при размещении данных в Интернете, -
какие возможности предоставляет провайдер. Одни провайдеры поддерживают
ASP, другие - нет. Возможно, провайдер поддерживает другую «родственную» тех-
нологию - РНР. На размер выгружаемых файлов тоже часто накладываются огра-
ничения. Самое разумное - выйти на сайт провайдера и поискать по ссылкам
инструкции для Web-мастеров (пользователей) и документацию. У каждого провай-
дера есть свои требования к размещаемым страницам. Так, заглавную страницу
сайта надо называть или index.htm, или index.html, В некоторых случаях требуется
указывать кодировку кириллицы с помощью элемента МЕТА в некоторых случаях
это не разрешается. У бесплатных провайдеров в качестве «нагрузки» на страницы
добавляются рекламные баннеры и зорир-окна, так что дизайн страниц должен это
учитывать. Иногда данные не видны из-за всплывающего 5аннера.
Окончательная отладка страниц и их тестирование все равно производятся
в реальных условиях, в Интернете, поэтому надо отработать подключение к сво-
ему сайту по протоколу FTP, Для этого существует много удобных программ:
CuteFTP. WSFTP, Windows Commander. Их несложно настроить для установки
связи. Например, в Windows Commander существует кнопка FTI Нажав ее, надо
нажать кнопку Добавить в окне Соединение с FTP-сервером Откроется окно,
изображенное на рис. 9.14. Необходимо заполнить лишь четыре строки: название
соединения (произвольное), адрес TP-сервера, логин для входа и пароль. Все эти
данные должен сообщить вам провайдер. Остальные параметры обычно берутся
поумолчанию.
Для запуска соединения служит кнопка Соединиться. Я рекомендую устано-
вить к этому времени соединение с Интернетом. Во время соединения надо сле-
дить за сообщениями, которые появляются в модальном окне (где программа
показывает процесс установки связи). Если соединение не устанавливается,
а мелькают фразы наподобие «login incorrect», надо проверить правильность вво-
да логина и пароля. Пароль, к примеру, полезно ввести заново, так как в строке он
не виден.
После того как Windows Commander установит соединение, на одной из его
панелей появятся папки удаленного сервера. Тут надо разобраться, в какой из них
размещать HTML-файлы. Иногда название папки говорит само за себя, например
publichtml Внутри основной папки можно (при необходимости) создавать свои,
Подготовь данныхдля Интернета
217
Настройка FTP соединения
название соединения
£првс[:Порт): FTP-адрвС
| Анснкм-юе соединение (пароль -адрыв oiaif) I
Учётная загмсь: имя юльзователя
I Пароль: П Эр ОЛЬ
ПредуИрёкдение' Хранить здесь пароль небезопасно!
। УдаЛ&нгый isaTjfK
Локальный кагале
Псюлать l *ланлы
I1 Т нп сервера: А его определение
С] через fitewaEl или прокси-сервер
Определить новый .
Пассивный режим
О Послзтъкоьиа-к .для соединения
Команда NOOP Закачать с всех 30
J.F. Отмена 1 । Справка
Рис. 9.14. Настройка FTP-соединения в Windows
Commander
например, для размещения рисунков. При выгрузке файлов учитывайте, что на их
закачку уходит больше времени, чем на копирование на своем винчестере. Кроме
того, после каждого изменения удаленной папки программа делает паузу, чтобы
обновить список файлов.
Есть и другие удобные способы связи. Некоторые провайдеры создают специ-
альные страницы для пользователей, где можно редактировать свой сайт. Еще од-
ним очень удобным способом является установка FTP-соединения с помощью
Internet Explorer. В этом случае выгрузка на сайт происходит путем перетаскива-
ния файлов из окна локальной папки в окно броузера.
Как только файлы оказались на сервере в Интернете, они сразу становятся
доступными для просмотра и можно приступать к тестированию и отладке : гра-
ниц. Напомню, что для открытия заглавной страницы достаточно набрать адрес
сайта, а для открытия определенногс файла к адресу надо приписать еще и имя
(с расширением) этого файла.
Глава 10
Программирование
В Access существует две системы программирования. Первая использует про-
граммирование наязыке Visual Basic (VB' вторая основана на макросах (готовых
процедурах). Первая система является основной, а вторая - вспомогательной,
Между ними существует связь: макросы можно запускать из программ на VB,
Многие объекты форм и отчетов не будут работать, если не запрограммировать
их действия. Задача программирования заключается не только в написании без-
ошибочно работающего кода, но и в поиске наиболее простого решения, тре-
бующего минимального количества строк программы, поэтому заранее нельзя
сказать, какая из систем окажется более эффективной в определенном случае.
В главе рассматриваются особенности составления и отладки программ (при-
меры которых помещены в файл testl mdb).
10.1. Редактор Visual Basic
Встроенный редактор для написания и отладки программ на VB запускается
командой Сервис =5 Макрос => Редактор Visual Basic. Его окно показано на
рис. 10.1. Оно состоит из достаточно большого числа панелей и дополнительных
окон, так что надо разобраться, за что отвечает тот или иной объект. Слева нахо-
дится панель, на которой имеется перечень объектов базы данных. Программы,
обрабатывающие события, находятся в разделах соответствующих форм и отче-
тов. Часть программ может находиться в отдельных модулях ~ такие программы
доступны для всей базы данных, а модули удобно экспортировать в другую базу
данных.
Для каждой формы открывается окно со своими программами: в качестве при-
мера на рис. 10.1 мы видим окно формы-заставки, в которой есть кнопки, откры-
вающие другие формы. Программа для этого состоит всего из одной инструкции:
с помощью команды DoCmd выполняется макрос открытия формы OpenForm.
Программирование
219
^Micionoft Visual Bdalc - teitl
*a I Ln 1. Csi 1
il
Afc^bBtic Categorized I
Private Sub Кнопка? Click()
DsQmd.OpenForm "Форма!"
End Sub
Fife £dir View insert Debug Ь-П Tools Add-Ins Widow Help
И - jd -Hl ! > • j s£l5« J 7
Option Compare Database
Рис. 10.1. Редактор Visual Basic
j <21 tesll - fcrm_CrapT (Cod*)
U______.__________
EE FormjCrapT
ra Рстт_Форна1.
3 РотГ|1_ФормаЗ
El Гогт_Фоо.Ч-э4
Modules
* ^LbeclJi Лоце}
Private Sub КиопкаЭ_С11ск(|
Dq Cmd. Ope nF c r » " Фо рме2
End Sub
Private Sub Кмопка4_С11ск()
ЬсиСтй.ОюепГопп ‘'ФормаЗ
End Sub
Private Sub Ккопка5_С11ск()
DoCmd.OpenForm "Фермам"
End Sub
Наличие горизонтальных линий в окне не должно вас обманывать: в лодуле
представлена обычная текстовая информация, а линии создаются программой
для удобства разработчика, Когда он создает новую процедуру, редактор автома-
тически отделяет ее код от других подпрограмм линиями.
Сохранение данных в редакторе происходит автоматически. Когда вы закры-
ваете его окно, код записывается в файл базы данных.
Запустить программу можно прямо в окне редактора. Для этого на его панели
есть три кнопки, похожие на кнопки управления воспроизведением в медиа-
плеерах. Назначение этих кнопок примерно такое ке, только здесь «проигры-
ваются» программы. Стрелочка запускает программу (курсор должен находи'1 ься
в ее тексте), две вертикальные полоски обеспечивают паузу (временный оста-
нов), а квадратик прекращает выполнение программы.
220
Глава 10
Если во время работы формы возникает ошибка из-за какой-либо подпрограм-
мы, Access выводит на экран при выполнении программы окно с сообщением
и предлагает перейти в режим отладки кнопкой Debug. Нажав ее, мы попадаем
в окно редактора VB, прямо в текст программы. После этого надо нажать кнопку
с квадратиком Reset, чтобы остановить вызвавшую ошибку программу, а затем
приступать к отладке.
10.2. Получение информации об объектах языка
Редактор VB имеет обширный разветвленный справочник по программирова-
нию. Точнее, это не один справочник, а несколько, объединенных в один. Первый
справочник, например, относится к классическому VB - синтаксису языка, стан-
дартным функциям и т. д. Другой посвящен VB для Microsoft Office — в нем нахо-
дятся сведения об объектах, доступных во всех офисных программах. Третий
содержит сведения только по VB для Access. А есть еще ADO, DAO, Microsoft
Forms, Microsoft Jet, SQL... В общем, информации много. Я рекомендую вам,
если вы найдете интересную статью, сразу копировать ее в документ Word, чтобы
не искать информацию заново. Это полезно, потому что статьи справочника изо-
билуют полезными примерами программ.
В режиме конструирования модуля на панели инструментов присутствует
кнопка Object Browser (Просмотр объектов), позволяющая открыть одноимен-
ное окно (рис. 10.2). Я думаю, что это наиболее эффективное средство быстрого
получения справочных сведений, касающихся объектов, методов, свойств и со-
бытий текущей базы данных и доступа к информации об элементах языка Visual
Basic.
В левой части окна можно указать объект или класс, и тогда в окне становятся
доступными все компоненты этого класса, в частности методы и свойства. Поле
ввода в левом верхнем углу окна позволяет осуществлять поиск по ключевым
словам. Для начала поиска служит кнопка с изображением бинокля. Кнопка со зна-
ком вопроса позволяет вывести на экран раздел справки, относящийся к выделен-
ному компоненту. Данное окно позволяет определить, какие свойства и методы
относятся к тому или иному объекту. В языке очень много объектов, и в справочни-
ке они приведены в алфавитном порядке. Эго сильно затрудняет работу со спра-
вочником. Разработчиков в первую очередь интересует, какие методы и свойства
применимы для конкретного объекта. Так что данный способ получения справки
намного удобнее.
Программирование
22)
*All Libraries*
у Object Browser
Member
! Class
Recorded
Librarj
Search Results
Т. ADODB Л ADODB IP. DAO DAO ]Г DAC ffl ffil Recordset Record set Fecordsei Connection Й Database 9 EndOtRecofdse- Л ^NexiRecot set - Л NtxtRecordSel A CpenFecctt sei ъ OpenRecordset v
* - ~ —
Classes Members of ataba e1
Function ipenRecordseK/jeme^l^Sfr* ,?. [Tj/peL [Optorti],
| [£oc*£tf**>As Recoi l^er
Member of DAO 4лЬйбт
Рис, 10.2. Окно Object Browser
Необходимо отметить, что окно Object Browser позволяет получить сведения
и по константам Visual Basic, число которых растет от версии к версии. А обой-
тись без них при написании кода практически невозможно.
10.3. Модули, макросы и функции
На простом примере несложно показать, как взаимодействуют модули, макро-
сы и программы на VB. Отдельные подпрограммы следует хранить в модулях.
Все примеры по работе с программами в базах данных, рассмотренные в других
главах, касались модулей отдельных форм. Эти модули создавались автоматиче-
ски для размещения подпрограмм обработки событий.
Стандартный модуль создается исключительно по желанию разработчика.
Программист сам решает, какие программы в нем разместить. Я думаю, что стан-
дартный модуль может служить двум целям: созданию подпрограмм и функций
общего доступа и возможности копирования набора подпрограмм как единого
блока. Поскольку для изучения Visual Basic лучше всего подходит встроенный
справочник программы, нам остается познакомиться с использованием модулей
на нескольких примерах. Допустим, вам необходимо создать программу и обес-
печить к ней постоянный доступ пользователя. Для этого надо выполнить сле-
дующие действия:
222
Глава 10
1. Выберите вкладку Модули и нажмите кнопку Создать.
2. Введите в окно модуля текст программы. Например, такой:
Function Taimer1()
Dim otvet, MyTime
otvet 1
MyTime - Timer
While otvet = 1
If Timer - MyTime >= 60 Then
otvet - MsgBox("Прошла еще одна минута", vbOKCancel, "Сообщение")
MyTime - Timer
End If
Wend
End f unction
Эта программа позволяет зыводиы на экран каждую минуту окно с сообщени-
ем. Она будет работать до тех пор, пока пользователь не нажмет в модальном
окне кнопку Cancel.
3. Нажмите кнопку Save и сохраните модуль (я назвал его Таймер).
4. Перейдите на вкладку Макросы и нажмите кнопку Создать.
5. Выберите из списка в новом макросе макрокоманду апускПрограммы. а в каче-
стве ее аргумента задайте имя функции Taimer1 () Для этого можно использовать
построитель выражений. Окно макроса должно выглядеть, как показано на
рис. 10.3.
6. Закройте окно макроса, сохранив макрос (я также назвал его Таймер).
' ' 1 Цдхрчк! : макрвс
I Макрокоманда_________I_____________________Примечание_________________
3,’ЛуСгПраграмиы
i Аргументы макрокоманды
1 имя (Ь-унЧмНи TemrlQ G3
введите имя вьпйшяе • он
функции. Поместит - в
скобки необходимые
р1 аргументы. Для
аргумйнтовс помощью
построителя нажмите
кнопку"Построить".
с^язате-Льный аргумент.
Для справки нажмите F1.
Рис. 10.3. Окно макроса
Программирование
223
На вкладке макросов есть кнопка Запуск. Теперь, если запустить макрос
Таймер будет выполнена функция (aimer (}.
Рассмотрим текст программы. Инструкция Dim обозначает создание новых
переменных. Переменные и их тип рекомендуется описывать в начале програм-
мы. У нас переменных две:
otvet - номер кнопки, нажатой в окне диалога;
MyTime - число секунд.
Системная переменная (или, если хотите, функция) Timer хранит число секунд,
прошедших с начала текущих суток.
Цикл While условие ... Wend довольно часто используется в VB. Он работает, пока
выполняется условие.
Оператор If условие Then ... Endlf позволяет выводить окно диалога, только когда
разница между текущим временем и временем, зафиксированным в переменной
МуИше, превысит 60 секунд,
Для создания окна диалога используется функция MsgBoxQ с тремя аргумента-
ми: текстом сообщения в окне, системной константой для выбора вида кнопок
и текстом для заголовка окна. Константа vbOKCancel указывает на то, что в окне
должны быть две кнопки: ОК и Cancel. Такая конструкция очень удобна, когда
надо организовать диалог с пользователем и позволить ему что-нибудь отменить.
Кнопки в окне диалога нумеруются, начиная с единицы, и, когда пользователь на-
жимает кнопку, функция возвращает ее порядковый номер.
У таких программ есть свои особенности. Во-первых, во время их выполнения
для пользователя включается режим ожидания - указатель мыши приобретает
вид песочных часов и доступ к Access блокируется. Во-вторых, такая программа
должна быть оформлена именно как функция (Function), а не как подпрограмма
(Sub). При этом функция не обязана возвращать какое-либо значение.
Если требуется обеспечить возможность работы с Access и другими приложе-
ниями, пока выполняется программа на VB, в ее цикл необходимо вставить
инструкцию DoEvents. Попробуйте поместить ее после строки с оператором While
и проверьте, как изменится работа макроса.
Обозначение Sub является сокращением английского слова subroutine -
МВ подпрограмма. Когда говорят о функциях и подпрограммах Visual Ba-
sic, часто используют общее название «процедура» (procedure).
22Д
Глава 10
Подведем итоги. Программу, написанную на VB, можно запустить нескольки-
ми способами. Во-первых разрешается использовать ее как обработчик событий.
Когда событие происходит, программа выполняется. Этот способ обсуждался на
страницах книги. Во-вторых, программу можно запустить через макрос, а точнее,
с помощью макрокоманды ЗапускПрограммы. В качестве ее аргумента исполь-
зуется имя функции Visual Basic. А сам макрос запускается кнопкой на вкладке
Макросы или командой из главного меню Сервис => Макрос => Выполнить
макрос. В-третьих, программы можно запускать в окне редактора Visual Basic.
10.4. Пример программы и формы
Если требуется определить размер самой длинной строки в текстовом поле
(чтобы правильно выбрать размер поля), можно создать в базе данных инстру-
мент, состоящий из формы и связанной с ней программы. В форме надо создать
три поля для задания имени таблицы, имени поля и вывода номера обрабатывае-
мой записи. Назовем их Tablica, Pole и Zapis соответственно.
Еще надо создать кнопку (рис. 10.4) для запуска программы. В моем примере
она получила имя Кнопка?.
Рис. 10.4. Формадля определения максимальной ллинь строкивполе
С кнопкой надо связать следующую программу:
Private Sub Кнопка7_С11ск()
Максимальная длина поля
On Error GoTo гг Кнопка? Click
Dim lb: As Recordset ' выбранная таблица
Dim As String ' выбранное поле
Dim Stroka As String ' строковая переменная
Программирование
225
Dim lina As Long максимальная длина
Dim Zap As Long ' запись, где длина строки максимальна
Dim TekZap As Long ' текущая запись
If Trim(Me Tablica) = Then Exit Sub
If Trim(Me.Pole) = "" Then Exit Sub
Dl'ina 0
Zap 0
TekZap = 0
Imya = TrimfMe. Pole)
Stroka =
Set Tabl - CurrentDb OpenRecordset(Me Tablica)
With Tabl
Встряхнем таблицу
MoveLast
.MoveFirst
Цикл по всем записям
Do Until . EOF
TekZap = TekZap + 1
Me.Zapis = TekZap
Stroka Trim(Tabl, Fields(Imya))
If Len(Stroka) > Dlina Then
Dlina = Len(Stroka)
Zap = TekZap
End If
.MoveNext ' следующая запись
Loop
Close
End With
MsgBox "Максимальная длина строки & Dlina & Запись номер & Zap
ЕхИ_Кнопка7_С11ск:
Exit Sub
Err кнопка/. Click:
MsgBox Err.Description
Resume Ех11_Кнопка7_СНск
End Sub
Несколько замечаний к данному коду. Если мы хотим работать с таблицей или
запросом, то должны создать объектную переменную типа Recordset. У нас это
переменная ГаЫ. Когда потребуется открыть таблицу, надо применить к текущей
базе данных (CurrentDb) метод OpenRecordset с соответствующим аргументом
K-R70
226
Глава 10
В нашем примере исходные параметры считываются из формы. Если не все
параметры заданы, работу программы надо прервать (инструкцией Exit Sub). Ана-
лизируя значения полей Tablic и Pole, надо отбросить возможные пробелы с помо-
щью функции Trim().
Цикл Do Until EOF... Loop позволяет перебрать все записи таблицы. Внутри цик-
ла необходимо применять метод MoveNext (переход к следующей записи), иначе
цикл никогда не закончится.
Команда Zapis = позволяет выводить в текущей форме (Me) номер
обрабатываемой записи. Это не влияет на работу программы, но дает возмож-
ность пользователю видеть, что программа работает.
Функция Len() позвляет определить длину строки.
Конструкция i/ith ... End With используется только для удобства написания кода.
Она позволяет не использовать имя часто встречающегося объекта. Например код
With Tabl
MoveLast
Move First
End With
эквивалентен коду:
Tabl MoveLast
Tabl MoveFirst
Применять этот прием можно только в тех случаях, когда строка кода будет начи-
наться с точки. В остальных случаях надо использовать имя объекта явным образом.
После того как таблица обработана, ее надо закрыть с помощью метода Close.
Если надо вывести окно с сообщением и не требуется анализировать, какую
кнопку нажмет пользователь, можно воспользоваться инструкцией MsgBox. Здесь
в качестве аргумента используется строковое выражение. Символ & позволяет со-
единять несколько текстовых значений. В большинстве случаев позволяется ис-
пользовать и числовые переменные, значения которых автоматически преобра-
зуются в текст (рис. 10.5).
Microsoft Office AtCttS
! Максимал&нап длина строки 32 Запись номер 19
Рис. 10.5. Окно, сформированное инструкцией MsgBox
Программирование
227
Изучите по встроенному справочнику Свойства и методы объекта
Recordset и все, что с ним связано. Скопируйте в текстовый документ
встреченные примеры программ. Вся эта информация постоянно
требуется разработчику ба: данных.
Visual Basic для MS Office обладает интересной особенностью. Этот язык по-
строен по принципу «заклинаний». Он включает большое количество объектов,
каждый из которых имеет ограниченное число свойств и методов (это называется
«объектной моделью»"). Догадаться, что к чему относится, практически невоз-
можно, так же как писать код, не имея под рукой подробного справочника. По-
пытка наугад (точнее, из соображений здравого смысла) комбинировать объекты
и методы кончается крахом: в большинстве случаев программа сообщает, что
«объект не поддерживает данное свойство или метод». Поэтому все разработчики
программ на VB действуют одинаково: копируют из встроенного справочника ра-
ботающие примеры (которые я называю «заклинаниями») и приспосабливают их
для своих задач.
10.5. Пример функции (вычисление «суммы
прописью»)
В формах и отчетах с коммерческими данными часто требуется вывести «'сум-
му прописью». Для этого необходима специальная функция, Создадим новый мо-
дуль (Module!) и запишем в него приведенные ниже тексты функций (кроме
основной функции используются еще вспомогательные):
Public Function CyMJlPO(chislo)
Функция для заполнения строки сумма прописью"
Dim tekst As String
Dim sumpro As String
Dim ’sumpro As String
Dim tprom As String
Dim nprom As Integer
Dim nkop As Integer
sumpro =
tekst = Trim(Str(Fix(chislo)))
If Len(tekst; > 0 Then
' Единицы, десятки, сотни
If Len(tekst) 1 Then
228
Глава 10
tprorn = "О" + tekst
Else
tprom = Rightftekst, 2)
End If
nprom - Val(tprom)
If nprom >= 10 And nprom <= 19 Then
sumpro = N10T$(nprom) + рублей"
Else
Select Case Val(Right(tprom. 1))
Case 0
sumpro = "рублей"
Case 1
sumpro = "рубль"
Case 2, 3, 4
sumpro - "рубля"
Case 5 To 9
sumpro - "рублей"
End Select
sumpro - N1T$(Val(Right(tprom 1))) + + sumpro
If nprom >= 20 Then
sumpro = LTrim(N20T$(Val(Left(tprom, 1))) + + sumpro)
End If
End If
If Len(tekst) = I Then
SUllll'I' = LTrim(N100T$(Val(Left(Right(tekst. 3), 1))) + + SUIUl'l")
End If
Тысячи
If hen(tekst) ?. Then
Select Case Len(tekst)
Case Is •= E
tprom = Left(Rightftekst 6), 3)
Case 5
tprom = "0" + Leftftekst, 2)
Case 4
tinea = 'Wi" + Left (tekst, 1)
End Eelect
If Val(tprom) > 0 Then
nprom Val(Right(tprom, 2))
If nprom >= 10 And nprom < 20 Then
Psumpro = NIOTS(nprom) + тысяч"
Программирование
229
Else
Select Case Val(Right(tprom, 1))
Case 0
Psumpro - "тысяч"
Case 1
Psumpro = "одна тысяча"
Сазе 2
Psumpro = "две тысячи"
Case 3
Psumpro - "три тысячи"
Case 4
Psumpro - "четырт тысячи"
Psurnpro - "пять тысяч"
Case 6
Psumpro = "шесть тысяч"
Case 7
Psumpro - "семь тысяч"
Case 8
Psumpro - "восемь тысяч"
Psumpro - "девять тысяч"
End Select
If nprom >- 20 Then
Psumpro = LTrim(N20TS(Val(Mid(tprom, 2, 1))) + + Psumpro)
End If
End If
If Vai(Left(tptorn. 1)) > 0 Then
Psumpro = N100T$(Val(Left(tprom, 1))) + + Psumpro
End If
sumpro - Psurnpro + + sumpro
End If
End If
'Миллионы
If Len(tekst) > 6 Then
Select Case Len(tekst)
Case Is >= 9
tprorn = Left(Right(tekst, 9), 3)
Case 8 '
tprom = "0" + l_eft(tekst 2)
230
Глава 10
Case 7
tprqm = "00" + Left(tekst, 1)
End Select
If /al(tprorn) > 0 Then
nprom - Val(Right(tprom, 2))
If nprom >= 10 Und nprom < 20 Then
Psumpro = N10T$( nprom) + миллионов"
Else
Select Case i/al(Right(tprom, 1))
Case 0
PSUIllpI" "МИЛЛИ''H''B"
Caso 1
PSUIllpI" " МИЛЛИ''H"
'Раза 2, ?, "
Psumpi" - "милли"На"
Caso 5 To 5'
Psumpro = "миллионов"
End Select
Psumpro = N1T$(Val(Right(tprom, D) + + Psumpro
If nprom 20 Then
Psumpro = LTrim(N20T$(Val(Mid(tprom, 2, 1))) + + Psumpro)
End If
End If
If /al(Left(tprom, 1)) > 0 Then
Psumpro = N100T$(Val(Left(tprom, 1))) + + LT rim( Psumpro)
End If
sumpro = Lsuiiipr"+ + LTr'.fn(sumnrci)
End Pf
End If
Миллиарды
If n(tekst) 9 T1 on
Pol-of Cat o jn(tekst)
Caso Is >= 12
tpi-"„ = Loftd'i'jhtltoEst, И 3)
Caso 11
tpr-'iu = "(>" + Leftftekst, 2)
Caso lii
tpi' 'Ш 'Till" + Loft(tohst, 1)
End Poloot
If Val(tprom) > " Thon
Программирование
231
nprom - VaI(Right(tprom, 2))
If nprom >= 10 And npror < 20 Then
Psumpro - N10T$(nprom) + миллиардов"
Else
Select Case Val(Right(tprom, 11)
Case 0
Psumpro 'миллиардов'
Case 1
Psumpro "миллиард"
Case 2, 3, 4
Psumpro "миллиарда"
Case 5 To 9
Psumpro = "миллиардов"
End Select
Psumpro = N1T$(Val(Right(rprom 1))) + + Psumpro
If nprom >- 20 Then
Psumpro = LTrim(N20T$(Val(Mid(tprom 2, 1))) + + Psumpro)
End If
End If
If Val(Left(tprom, 1)) > 0 Then
Psumpro = N100T$(Val(Left(tprom, 1))) + + LT rlm( Psumpro)
End If
sumpro = Psumpro + + LTnm(sumpro)
End If
End If
End If
sumpro - LTrim(sumpro)
If Len(sumpro) > 2 Then
sumpro = UCase(Left(sumoro, 1)) + Right(sumpro. Len(sumpro) - 1)
End If
Вывод копеек
nkop Hound((Round(chislo 2) - Fix(chislo)) * 100)
If nkop - 0 Then sumpro - sumpro + 00 коп,"
If nkop > 0 And nkop < 10 Then sumpro = sumpro + 0" + Trim(5tr(nkop)) +
КОП. '
If nkop 9 Ant nkop - 100 Thon suiu’oiu sumpro + Ftr(nkon) + non."
СУМ_ПРН = sumpro'
Erol Function
Function HT$(n001)
232
Глава 10
N1T$ =
8‘lact CaS' Г.С01
Case 1
"1T$ = "один"
Casa 2
N1T$ = "два"
Casa 2
JITf "три"
Casa 4
N1T$ = "четыре"
Casa 5
П1Т$ = "пчть"
Casa r.
П1Т$ - "шасть"
Casa 7
MT$ = "аамь"
Case 8
MT$ - "восемь"
Casa У
"ИТ? = "Д-атъ"
End Select
End Functi'Ti
Function Nl0T$(n001)
N10T$ --
Select Case nOOl
Casa 10
HliiTj = "десчть"
Casa 11
N1OT$ = " одиннадцать."
Casa 12
N10T$ = "дванадцать"
Case 13
N10TS = "тринадцать"
Casa 14
N10T$ = ’ четырнадцать.
Case 15
N10T$ = " пчтнадцать."
Casa lil
N1OT$ - "шестнадцать"
Программирование
233
Case 17
N10TS "семнадцать"
Case 18
"восемнадцать"
Case 19
М0Т$ = "девятнадцать"
End Select
End Functi-n
Function Ют$(niiul)
N20T$ =
Select Case n001
Case 2
N2OT5 = "двадцать"
Case, 3
N20T$ = "тридцать"
Case 4
M20T$ = "sopor."
Case 5
N20TS = "пятьдесят"
Cas« w
IN20TS = "шестьдесят"
Case 7
N20T$ = "семьдесят"
Case 8
N20T$ = "восемьдесят"
Case 9
iN20T$ - "девяносто"
End Select
End Funeti"!!
Funst i on N100T$(nOOl)
N100T$ =
Select Case nOO1
Case 1
MOOTS = "сто”
Case 2
MOOTS = "двести"
Case 3
MOOTS - "триста"
234
Глава 10
Case 4
N100T$ = "четыреста"
Casa 5
N100T$ = "пятьсот"
Casa C
"шестьсот"
'Case 1
N1OOT$ = "сень.сот"
'Case s
N100T$ - "BOC-’bCOT"
'Case 9
1,1001$ = "девятьсот"
End Select -
End Function
Принцип работы функции довольно прост. Числовое значение (аргумент) пре-
образуется в текстовую строку, а потом анализируется количество цифр (разря-
дов). В зависимости от числовых значений формируется строка из слов
с нужными падежными окончаниями. Необходимо предусмотреть все возможные
варианты, поэтому в функции много операторов If и Case. Для работы со строко-
выми данными используется ряд стандартных функций VB:
Len() - количество символов в строке;
Str() - преобразование числа в строковую константу;
Trim() - удаление ведущих и оконечных пробелов из строки;
LtrimO удаление ведущих пробелов из строки;
Left» - выбор левой части строки;
Right() - выбор правой части строки;
Mid{) - выбор из строки заданного числа символов, начиная с определенной
позиции;
UCase() - преобразование строчных букв в заглавные;
Fix() - получение целой части числа;
Round() - округление числа с заданной точностью;
Val() - конвертация числа, записанного как строка, в числовое значение.
Теперь функцию можно использовать. Если у нас, к примеру, в форме
(рис. 10.6) имеется поле Поле! со значением денежной величины, то для поля,
в котором надо вывести «сумму прописью», надо задать такой источник данных:
=СУМ_ПРО([Поле1])
Программирование
235
!• Сумма ЩХШм та : ферма _ П
ЕьйОД Сумпы прогиц^Ю
Сумма: 237ед345Д1
Суггэ грогмсью: Двадцать три и -шпиона семьсот восемьдесят дей«тг- тысяч триста copot: пять рублей 11 коп.
Вались: I4J Ч j Г *(►!]** из 1
Рис. 10.6. Выво, «суммы прописью» в форме
10.6. Отладка программ
Существует несколько способов поиска ошибок в неправильно работающей про-
грамме. В простейшем случае, если в программе встречается ошибка, ее выполнение
приостанавливается и на экран выводится окно модуля с текстом программы. Напро-
тив строки, вызвавшей ошибку, устанавливается стрелка, а сама строка юдсвечнваст-
ся желтым цветом. В некоторых случаях, когда это возможно. Access выделяет
цветом источник ошибки: например, имянеизвестной переменной. Дальнейшие дей-
ствия определяются пользователем. Он может открыть окно отладки чтобы про-
верить значения переменных, просмотреть стек вызова, чтобы понять, какие
процедуры и функции активны в данный момент, попытаться продолжить выполне-
ние программы по шагам. Разумным решением, на мой взгляд, служит попытка ис-
править текст программы и закрытие окна модуля. В этом случае выполнение
прерванной программы прекращается и ее можно будет запустить заново.
Намного более результативным способом отладки является прерывание про-
граммы до момента возникновения ошибки, Это делается введением в текст про-
цедуры точек останова. На рис. 10.7 показана подпрограмма с установленной
точкой останова. Создать или удалить последнюю можно, щелкнув левее строки
программы. Кроме этого, для управления точками останова существует специ-
альная кнопка. Теперь после запуска функции ее выполнение будет прервано,
а на экран будет выведено окно модуля. Окно отладки в этом случае будет выгля-
деть примерно так ке, но теперь можно будет, наводя мышь на переменны?, ви-
деть их значения.
Еще одним методом поиска ошибок является пошаговое выполнение програм-
мы. Для этого надо открыть панель инструментов Debug и воспользоваться од-
ной из кнопок, обеспечивающих выполнение кода по шагам.
236
Глава 10
ai«st1 * Ропп_МйНСИмапьналД1Вна (CodeJ
I Кнопка? > |cHeh
Private Sub Кнопъа,7_^С1 lek()
’ Евкгнмал&нвя диша по л г
On Errbc СаТо £ег_Кмопев'?__С 1 ick
Dim Tafci as Re cor ds ex. ' i aw •.
Dim Imya Аз Siring
Dim Str oka As Srring
Dim DI Ina As Long ' г 1«и«льпям
Dim 2ap As Long ' samk», где ч^мм-э стр км иске реальна
1 ’та ek Zap As Long
If Tritn(Ke.Tablica) - n4' Than Exit Sub
If Tr tint Be. Pole) = rr’ Then Exit Suh
Dlizia. * О
Zap = 0
Tek7 r - 0
- Тглв (Де. Pole)
FVrofca - •"
Set Tebl = СиггеасЕ>Ъ.СрепЦе&агс1зех.(Ме'Tciblica]
Vitb Tatal
Рис. 10.' Процедура с созданной точкой останова
Кнопка Step Into (Шаг с заходом) предполагает просмотр всех выполняемых
инструкций программы. Все операторы выполняются последовательно, каки при
обычной работе программы. После каждого шага следует останов, о чем свиде-
тельствует подсветка кода в окне модуля. При вызове новой процедуры указатель
перемещается на ее текст, и она также выполняется по шагам.
Кнопка Step Over (Шаг с обходом) позволяет выполнить всю программу быстрее,
так как каждая вызываемая процедура выполняется за один шаг, то есть как одна ин-
струкция Visual Basic. В этом режиме нельзя проследить выполнение всех вызванных
подпрограмм. Исключение составляет текущая подпрограмма: она и в этом случае
будетвыполнятьсяпо шагам.
Использовать кнопку Step Out (Шаг с выходом) имеет смысл, если вы находи-
тесь в некоторой процедуре, выполняемой по шагам, но не хотите больше выпол-
нять ее в таком режиме. Нажатие этой кнопки позволит выполнить оставшуюся
часть процедуры за один шаг.
Все три кнопки используются независимо. После каждого шага вы можете ре-
шить, какую кнопку нажать следующей. Для прекращения отладки используется
кнопка Reset (Сброс).
Альтернативны* и достаточно простым способом отладки может
быть вставка в текст программы инструкций MsgBox с выводом
значений переменных. Это позволяет, например, определить, выпол-
няется ли определенная ветвь программы.
Программирование
231
10.7. Создание макросов
Для разработки макропоследовательностей предусмотрена вкладка Макросы
в окне базы данных. Как и для других объектов базы данных, для макросов пре-
дусмотрены два режима: конструирования и выполнения. После нажатия кнопки
Создать пользователь получает доступ к бланку макроса (рис. 10.3). В каждой
строке этой таблицы размещается одна макрокоманда. Для определения ее пара-
метров пользователь должен заполнить предложенные программой формы
в нижней части бланка. Чаще всего оператору СУБД удается определить все
параметры макрокоманды «по ходу дела», не штудируя справочник. Например,
можно создать макрос для фильтрации данных в таблице. Конечно, в Access мно-
го замечательных средств, для того чтобы организовать фильтрацию, но удобство
макрокоманды ПрименитьФильтр заключается в том, что в ней заранее опреде-
ляется критерий фильтрации и запоминается вместе с макрокомандой. Можно
иметь хоть сто макросов на разные случаи жизни. Они вызываются достаточно
быстро, а отменить их действие можно обычным способом, нажав кнопку
Удалить фильтр.
На бланке макроса необходимо указать требуемое имя макрокоманды (в на-
шем случае ПрименитьФильтр) и затем записать условие фильтрации. Такое ус-
ловие можно задать с помощью построителя выражений. Для его запуска можно
применить команду Сервис Макрос Выполнить макрос.
После того как макрос написан, разработчик приложения или пользователь дол-
жен определить способ запуска макроса. Кроме тривиального пути - при помощи
меню Сервис - макросы можно вызывать, как уже /поминалось программным пу-
тем (автоматически) или посредство^' элементов управления в формах и отчетах.
Если макрос должен запускаться независимо от желания пользователя, то он К кен
быть поставлен в соответствие некоторому событию, которое, в свою очередь, связа-
но с определенным объектом. При обсуждении форм и отчетов мы видели, как можно
связать с событием выполнение определенной процедуры. Точно так же для обработ-
ки событий используются и макросы. Достаточно при определении свойств объекта
в строке, соответствующей событию, указать имя макроса.
Создадим для примера макрос, который позволит предварять открытие объек-
та базы данных некоторым сообщением, выводимым в окне диалога. Разобьем за-
дачу на следующие этапы:
1. Создайте макрос, состоящий из одной макрокоманды - Сообщение. В качестве
аргумента этой макрокоманды должен быть введен текст сообщения. Например,
такой: «По вопросу редактирования этой формы обращаться к И. Иванову!»
238
Глава 10
Полезно также задать аргумент Заголовок. Он определит название информаци-
онного окна. Заголовок может быть таким: «Напоминание». Назовем макрос
Напоминание!.
2. Раскройте форму (в базе данных test 1 - Товары) в режиме конструктора и
щелкните мышью строку события Открытие. Введите в строку имя макроса
(рис. 10.8).
j
< т.«олоро|- ф
"говсф Map
< Область
_ hcmTcs Марка
2
_j Форма
Форма
S
Макет Данные События Другие
Текущая >
До вставки
игле вставки
До обновления
После обновления
Внесены - ««нения
Отмана
'удаление
До подтвержден-- Del
После
Открытие
Эаго «а
Изманетме ра>*гр я
Бьгрузка
закрытие
Включение.
Отключение.
Получение фокуса
Потеря Фокуса
Напоминание!
Рис. 10.8. Выбор макроса для обработки события
Теперь при попытке открыть форму для просмотра на экран будет выводиться
окно, вид которого показан на рис. 10.9. Оно будет оставаться на экране до тех
пор, пока пользователь не нажмет кнопку ОК. Поэтому велика вероятность, что
он прочтет сообщение. Данный пример можно использовать и для отчетов.
Напоминание
По еэпросуред актирования этой формы обращаться к И, Иванову!
Jl
Рис. 10.9. Окно сообщения, предваряющее открытие формы
Программирование
239
10.8. Списокмакрокоманд
При создании макроса пользователь имеет возможность выбирать макро-
команду из списка для каждой строки бланка. Ниже приводится перечень макро-
команд Access с их кратким описанием. Макрокоманд немного, и, прежде чем
планировать разработку собственного приложения, я рекомендую ознакомиться
с ними, чтобы решить, смогут ли макросы вам помочь или потребуется использо-
вать более мощные средства программирования. Некоторые макрокоманды неза-
менимы при написании программ на Visual Basic, так как в этом языке не созданы
заменяющие их методы.
Макрокоманды для работы с данными
НаЗапись (GoToRecord). Переход на определенную запись (первую, послед-
нюю, новую и т. д.).
НайтиЗапись (FindRecord). Поиск записи по условию. От команды Правка =>
Найти эта макрокоманда отличается тем, что в ней все параметры поиска за-
даются заранее, на этапе конструирования макроса.
НаСтраницу (GoToPage). Переход на заданную страницу.
ПрименитьФильтр (ApplyFilter). Использование существующего фильтра
или фильтрация по условию, заданному в макрокоманде.
ПоказатьВсеЗаписи (ShowAllRecords). Отмена действия фильтра.
СлсдующаяЗаписг (FindNext). Поиск следующей записи, если ранее успешно
выполнялась макрокоманда НайтиЗапись.
Макрокоманды для управления объектами базы данных и Access
ВыделитьОбьек’1 (SelectObject). Выделение объекта базы данных,
ВыполнитьКоманду (RunCommand). Имитация выбора пользователем коман-
ды меню Access.
Выход (Quit). Выход из Access.
Закрыть (Close). Закрытие объекта базы данных.
3anycK3anpoca$QL (RunSQL). Выполнение команды SQL.
ЗапускМакросэ (RunMacro). Запуск другого макроса.
ЗапускПриложения (RunApp). Запуск программы, работающей под управле-
нием Windows или MS-DOS. В качестве аргумента используется командная
строка.
240.
Глава 10
ЗанускПрограммы (RunCode) Выполнение функции (подпрограммы) Visual
Basic.
КопироватьОбьект (CopyObject). Копирование объекта базы данных.
Обновить Объект (RepaintObject). Обновление данных в объекте или на экра-
не. При обновлении объекта происходит пересчет значений его элементов
управления.
ОткрытьЗапрос (OpenQuery). Открытие запроса в режиме конструктора или
обработки данных.
ОткрытьМодуль (OpenModule). Открытие модуля в режиме конструктора.
ОткрытьОтчет (OpenReport). Открытие отчета в режиме конструктора, про-
смотра данных или печати.
ОткрытьТаблицу (OpenTable). Открытие таблицы в режиме конструктора
или просмотра.
ОткрытьФорму (OpcnForm). Открытие формы в режиме конструктора или
просмотра данных.
ОтменитьСобытие (CancelEvent4 Отмена события, вызвавшего запуск макроса.
Например, если вы создадите для свойства Открытие отчета макрос, содержащий
эту команду, то отчет нельзя будет открыть - он будет сразу же закрываться.
ОстановитьВсеМакросы (SlopAllMacros). Приостановка выполнения всех
макросов.
Ост ановитьМакрос (StopMacro). Приостановка выполнения текущего макроса.
ПанельИпструментов (ShowToolbar). Вывод на экран или скрытие опреде-
ленной панели инструментов.
Переименовать (Rename). Назначение объекту базы данных другого имени.
Печать (Printout). Печап текущего объекта базы данных.
Сохранить (Save). Сохранение объекта базы данных.
УчалитьОбъект (DeleteObject). Удаление объекта базы данных.
Макрокоманды для управления окнами и элементами управления
Восстановить (Restore). Восстановление размеров свернутого окна.
ЗадатьЗначение (SetValueY Определение значения поля, элемента управления
или свойства.
КЭлементуУправления (GoToControl) Выбор определенного поля или эле-
мента управления.
Программирование
241
Обновление (Requery). Обновление элемента управления. Эта макрокоманда
позволяет увидеть изменения, внесенные в базу данных, так как беспечивает
повторное выполнение запросов или обращение к источникам данных.
Развернуть (Maximize). Максимизация размеров текущего окна.
Свернуть (Minimize). Свертывание текущего окна.
СдвигРазме|] (MoveSize). Изменение размеров текущего окна и/или его поло-
жения на экране.
Макрокоманды для импорта и экспорта данных
ВывестиВФормате (OutputTo). Вывод объекта базы данных в формате XLS
(файл Excel), RTF (форматированныйтекст). TXT (текст MS-DOS) нт. д.
ОтправитьОбъект (SendObject). Отправка объекта по электронной почте.
ПреобразоватьБазуДанных (TransfcrDatabase) Импорт, экспорт или установ-
ка связи с базой данных из другого приложения. Поддерживаются стандарты
dBASE, FoxPro, Paradox и другие.
ПреобразоватьТекст(Тгапз1?егТех1) Импорт из текстового файла. Допускается
использование заранее разработанной спецификации.
ПреобразовагьЭлектроинуюТаблицу (TransferSpreadsheet). Импорт данных
из электронной таблицы Microsoft Excel или Lotus 1-2-3 Поддерживаются раз-
личные версии этих программных продуктов.
Макрокоманды для решения задач программирования
ВыводНаЭкраи (Echo). Управление выводом на экран результатов выполне-
ния операций и/или вывод сообщения в строке статуса.
ДобавитьМеню (AddMenu) Создание меню для формы или отчета.
ЗадатьКомапдуМеню (SctMcnuItem). Определение команды меню.
КомандыКлавнатуры (SendKeys). Генерация нажатий клавиш. Позволяет
имитировать клавиатуру.
ПесочныеЧасы (Hourglass). Придание указателю мыши вида песочных часов.
Эго обеспечивает «фирменный внешний вид» приложения, когда компьютер
слишком долго думает.
Сигнал (Веер). Подача звукового сигнала.
Сообщение (MsgBox). Вывод окна с произвольным сообщением.
УстановитьСообщеиия (SetWarnings). Включение или отключение вывода
системных сообщений.
9-870
242
Глава 10
10.9. События базы данных
Поскольку макросы часто требуется «привязывать» к событиям, разработчик
базы данных должен иметь представление о том, какие события вообще сущест-
вуют. Это позволит составить план разработки приложения и выбрать верный
путь решения пользовательских задач - запрограммировать реакцию СУБД
на действия пользователя и обеспечить доступ оператора к инструментам и под-
программам. Для удобства разобьем события на группы так, как это было сделано
с макрокомандами.
События, связанные с клавиатурой и мышью
Нажатие кнопки (Click). Нажатие кнопки мыши. Подразумевается, что поль-
зователь нажимает и отпускает левую кнопку мыши. Одно из наиболее частых
событий, если компьютер оборудован мышью. Объект для первоапрельской
шутки - подбросить коллеге макрос, обрабатывающий это событие и выводя-
щий на экран сообщение: «Не трогай мышь!»
Двойное нажатие кнопки (мыши) (DblClick). Название говорит само за себя.
Кнопка вниз (MouseDown). Нажатие пользователем кнопки мыши. Эго собы-
тие фиксируется уже тогда, когда пользователь еще не успел отпустить кнопку
мыши.
Кнопка вверх (MouseUp). Момент отпускания кнопки мыши. Обратите вни-
мание: большинство команд в современных приложениях начинают выпол-
няться после того, как пользователь отпустит кнопку мыши, а не тогда, когда
он ее нажимает. Эго дает пользователю последний шанс передумать и перемес-
тить указатель мыши с позиции меню или элемента управления, не отпуская
кнопку мыши («Ой, да зачем я это делаю’»). Кроме того, такой метод позволяет
избежать путаницы команд в тех случаях, когда ^сколько меню перекрывают
Друг друга.
Перемещение указателя (MouseMove). Перемещение указателя мыши поль-
зователем.
Нажатие клавиши (KeyPress). Нажатие любой клавиши на клавиатуре с точки
зрения пользователя (нажал и отпустил).
Клавиша вниз (KeyDown). Момент нажатия клавиши на клавиатуре.
Клавиша вверх (KeyUp). Момент, когда нажатая клавиша отпущена.
Программирование 243
События данных
До обновления (BeforeUpdate). Это событие возникает, когда пользователь
внес изменения в элемент управления или запись, но обновление данных еще
не успело произойти. Обработка этого события - последняя возможность отме-
нить изменение.
После обновления (AfterUpdate). Это событие возникает после обновления
данных в элементе управления или записи.
Удаление (Delete). Момент удаления записи пользователем, но до подтвержде-
ния и фактического удаления записи.
До подтверждения Del (BeforeDelConfirm). После того как пользователь уда-
ляет одну или несколько записей, программа открывает окно диалога для за-
проса подтверждения. Это событие соответствует моменту, когда записи поль-
зователем уже удалены, но окно диалога еще не открыто. Данному событию
предшествует событие Удаление.
После подтверждения Del (AfterDelConfirm). Событие фиксируется после то-
го, как пользователь подтвердил удаление записей или отменил его.
До вставки (Beforeinsert). Ввод первого символа в новую запись, но до добав-
ления записи в базу данных.
После вставки (AfterInsert). Добавление новой записи в базу данных.
Изменение (Change). Изменение содержимого поля. Это событие не зо шика-
ет, если пользователь только установил курсор в поле и нажал клавишу Enter.
Текущая запись (Current). Выбор записи или выполнение повторного запроса
к источнику данных формы.
Отсутствие в списке (NotlnList). Ввод в поле со списком значения, отсутст-
вующего в списке. Такое событие всегда возникает «по вине» пользователя, и его
(события) обработка может повысить степень «дружественности» приложения.
При обновлении (Updated). Изменение данных в объекте OLE.
События фокуса
Включение (Activate). Активизация окна формы или отчета.
Вход (Enter). Момент перед получением фокуса элементом управления или
формой.
Получение фокуса (GotFocus). Получение фокуса элементом управления или
формой. С точки зрения пользователя - выбор объекта.
Выход (Exit). Момент перед переводом фокуса на другой элемент управления.
Это событие возникает перед событием Потеря фокуса.
е
244
Глава
Потеря фокуса (LostFocus). Потеря фокуса элементом управления или
формой.
Отключение (Deactivate). Закрытие окна формы или отчета.
События окна формы или отчета
Открытие (Open). Начальный момент открытия формы или отчета.
Загрузка (Load). Открытие формы. Соответствует моменту вывода данных
в форме, но после возникновения события Открытие.
Изменение размера (Resize). Изменение размера формы.
Выгрузка (Unload). Момент закрытия формы до ее удаления с экрана. После
следует событие Закрытие.
Закрытие (Close). Закрытие формы или отчета.
События фильтра
Применение фильтра (ApplyFilter). Пользователь использовал или отменил
фильтр.
Фильтрация (Filter). Создание пользователем фильтра при помощи команд
меню Изменить фильтр или Расширенный фильтр.
События ошибки и таймера
Ошибка (Error). Ошибка при работе с формой или отчетом.
Таймер (Timer), Истечение промежутка времени, указанного в свойстве
Интервал таймера формы.
События печати
Форматирование (Format). Начальный момент подготовки (открытия) отчета,
Данные еще не сформированы программой для просмотра или печати.
Отсутствие данных (NoData). Это событие возникает, если в результате
форматирования не были выбраны данные для отчета.
Страница (Page). Страница отчета сформатирована для печати, но еще не вы-
ведена на печать.
Печать (Print). Сформатирован раздел отчетадля печати, но еще не выведен на
печать.
Возврат (Retreat). Переход назад по разделам отчета.
Гпава 11
Пример базы данных рассылки почты
Во многих организациях возникает необходимость в рассылке писем по электрон-
ной почте большому количеству корреспондентов. Прошу не путать это со спамом.
Коммерческие организации рассылают письма своим клиентам - например. с ком-
мерческими предложениями, информацией о скидках или просто с необходимой
информацией. На праздники принято рассылать поздравления. Подобных причин
достаточно много. Access - это как раз такая система, которая позволяет облегчить
такую работу. Но для этого потребуется специальная база данных. В данной главе
будет рассказано о ее разработке.
11.1. Таблица для сбора электронных адресов
Создадим новый файл базы данных и назовем его pochta.fndb.
В первую очередь надо создать таблицу (с именем ТаблицаАдреса), в которой
будут храниться электронные адреса. В ней мы предусмотрим такие поля:
Имя поля Формат поля
Номер Счетчик, ключевое поле повторы значений не разрешены
Email Текстовое, длина 40, повторы не разрешены
Да Логическое, формат «Вкл/Выкл» по умолчанию Вкл»
flag Целое
Организация Мето
Подразделение Мето
ФИО Мето
Результат Текстовое, длина 20
Поле Номер является обычным полем счетчика. Одновременно оно выполняет
функции графы «номер по порядку».
246
Глава 11
Поле Email хранит адреса электронных почтовых ящиков. В этом поле надо за-
претить повторяемость значений, иначе может получиться так, что один коррес-
пондент получит несколько одинаковых писем. Размер этого поля определяется
длиной электронного адреса, а среди адресов попадаются довольно длинные, так
что длина в 40 символов является оптимальной.
Поле Да имеет логический тип и, значит, может иметь только два значения:
«Да» или «Нет». Формат «Вкл/Выкл» («Оп/Off») подразумевает, что в таблице
или форме это поле будет представлено в виде колонки флажков («галочек»), что
достаточно удобно для пользователей. Колонка получится узкая, и для поля целе-
сообразно подобрать короткое имя, чтобы не тратить попусту место на экране.
Если же ваши пользователи не любят сокращении или начальство против, то
можно дать такому полю имя, к примеру, Отправлять. Эго поле необходимо для
блокирования отправки определенных писем.
Поле flag не обязательно должно быть видно пользователю и нужно для целей
программирования. Его тоже можно было бы сделать логическим, но числовой
тип обеспечивает больше возможностей для программиста.
Для полей Да и flag надо установить параметр «Обязательное поле» и значение
по умолчанию, потому что отсутствие данных в этих полях будет приводить
к ошибкам в работе подпрограмм.
Организация, Подразделение и ФИО - поля для ввода информации о получателе.
В эти поля может быть введена любая информация разного объема, так что тип
Мето вполне оправдан.
Поле Результат - текстовое и может заполняться произвольным текстом. Оно
необходимо для записи примечаний. Например, один из корреспондентов при-
слал письмо с отказом от рассылки (мы, как вежливые люди, конечно, припишем
в конце письма фразу, предлагающую отказаться от дальнейших писем?). Тогда
при обработке почты надо сбросить галочку поля Да, а в поле Результат записать
для памяти, почему она сброшена. Например: «отказ» - отказ от рассылки; «нет
адреса» - такой электронный адрес уже не существует. Удалять записи нельзя,
так как данные электронные адреса могут снова появиться в таблице при сле-
дующем пополнении базы данных. Поэтому и нужна система, которая позволит
хранить все адреса, но в то же время не позволит отправлять письма по неко-
торым из них.
Пример базыданныхрассылки почты
247
11.2. Таблица и форма для написания писем
Создание таблицы
Письма (которых, по всей видимости, будет несколько) тоже удобно хранить
в отдельной таблице. Назовем ее Таблица Письма Поля у нее будут такие:
Имя поля Формат поля
N1 Счетчик, ключевое юле, повторы не разрешены
Тема Текстовое, длина 50
Письмо Мето
Допфайл Текстовое, длин 50
Дата Дата, короткий формат даты
Первое поле, как всегда, счетчик, но в форме оно вряд ли потребуется.
Далее следуют поля, которые позволят составить письм' так, как это принято
в почтовых программах. Поле Тема необходимо, так как письма ie: темы отправ-
ляются с трудом: почтовые программы этого «не любят». Для текста послания
предусмотрено поле Письмо. Тип этого поля, разумеется, Мето - текста может
быть много.
Поле Дата мы используем для автоматической записи даты: полезно знать,
когда были созданы письма. Свойство Значение по умолчанию надо определить
как Date(), тогда пользователю не потребуется вводить дату. Можно, конечно,
включать дату и в текст письма, но это не обязательно, так как почтовая програм-
ма всегда покажет получателю, когда пришло письмо. При создании этого поля
целесообразно сразу выбрать короткий формат даты. Кроме этого, надо опреде-
лить маску ввода. С помощью кнопки с тремя точками надо запустить мастер
и тоже выбрать короткий формат даты. После работы мастера в этой строке долж-
но быть записано: 00.00.0000;0;_
В этом случае дата будет выведена, например, так: 25.12.2003.
На основе таблицы сделаем запрос. В нем должны быть такие же поля, но для
поля Дата зададим сортировку по убыванию. Эго избавит пользователя от необхо-
димости управлять записями таблицы. Каждое новое письмо, которое он напи-
шет (или вариант предыдущего), будет автоматически становиться доступным по
умолчанию: в форме мы будем видеть запись, сделанную последней.
248
Глава 11
Создание запроса
На вкладке Запросы используем режим Создание запроса с помощью
мастера, то есть откроем мастер запросов. Для запроса выберем все поля табли-
цы. Дадим имя новому запросу: ЗапросПисьма Эго делается очень быстро, вся
работа укладывается в два шага мастера.
Затем запрос надо открыть в режиме конструктора и для поля счетчика N1 уста-
новить режим сортировки по убыванию. Это означает, что сортировка по значению
этого поля будет проводиться в обратном порядке.
Похожий принцип сортировки принят и в обычных почтовых программах: по
дате в обратном порядке.
Созданный запрос послужит основой для создания формы. В данной базе эта
форма будет основным объектом, с которым станет взаимодействовать пользова-
тель.
Создание формы
Для создания формы выберем режим Создание формы в режиме
конструктора. Нам сразу предстоит решить, будут ли в этой форме вкладки. Для
начала предусмотрим четыре вкладки в дальнейшем их количество можно будет
увеличить): для письма, для таблицы с электронными адресами, для инструкции
и дополнительных инструментов и настроек.
В окне конструктора форм надо сразу установить размер формы (например,
16 см в ширину и 9 см в высоту) перетаскиванием угла серой рабочей области.
Затем, убедившись, что кнопка Мастера нажата, нажмем кнопку Вкладка
и нарисуем контур вкладки. Вкладка должна занимать все рабочее пространство
формы, но во время рисования можно отступить примерно на 3 мм от краев
формы. Если количество полученных вкладок не то, которое нам нужно, сразу
раскроем контекстное меню вкладки и изменим число вкладок. Для добавления
новой вкладки используется команда Добавить вкладку. Раскроем окно свойств
вкладки и запишем туда новые заголовки (параметр Подпись) для вкладок:
Письмо, Адреса, Инструкция, Дополнительно. Имя каждой вкладки можно выбирать из
списка в окне свойств.
Можно было бы поступить по-другому. Заменить имена вкладок Pagel, Page2,
Page3, Page4 (параметр Имя) необходимыми нам словами. Поскольку подписи
состоят из одного слова, они вполне могут играть роль имен. В любом случае
результат будет одинаковый.
Пример базы данных рассылки почты 249
Создание элементов управления
Для пользователя, который начинает работу с новой программой, подсказки
никогда не бывают лишними. В верхней части вкладки Письмо можно
сформировать краткое руководство к действию. Нажмем кнопку Надпись, нари-
суем прямоугольную зону надписи и введем текст: «Заполните письмо и нажмите
кнопку "Отправить письма"».
Для создания и просмотра письма предусмотрим несколько полей. Поскольку
они будут использовать данные из ЗаиросПисьма. то надо указать этот запрос
в качестве источника данных для всей формы. Откроем окно свойств формы
и в строке Источник записей выберем из списка название этого запроса.
Нажмем кнопку Поле и нарисуем первую строку - это будет тема письма.
Строка должна быть достаточно длинной. Помните, мы установили длину этого
поля равной 50 символам? Отредактируем подпись для этого поля: «Тема».
В окне свойств поля выберем источник записей (параметр Данные): Тема. Поле
автоматически выбирается из таблицы или запроса, связанного с формой.
Сделаем еще одно такое же поле ниже, но в качестве источника записей вы-
берем поле ДопФаЙл.
Рядом с этим полем полезно разместить кнопку (необходимый для этою ин-
струмент называется так же) для выбора файла в режиме диалога. Название этой
кнопки конечно же Обзор. В окне свойств кнопки запрограммируем событие
«Нажатие кнопки». Процедура должна быть такая:
Private Sub Command56_Click()
Dim fd As FileDialog ' Объект - окно диалога
' Определяем диалог выбора файла
Set fd = Application.FileDialog(msoFileDialogFilePicker)
Dim vrtSelectedltem As Variant ' Путь к файлу
With fd ' Главный цикл
If .Show = -1 Then
For Each vrtSelectedltem In .Selectedltems
Me! Texts = vrtSelectedltem
Next vrtSelectedltem
Else
End If
End With
Set fd Nothing ' Очистка объектной переменной
End Sub
250
Глава 11
Здесь }onmand56 - имя кнопки, a Text9 - имя поля формы, соответствующего
полю таблицы ДопФайл. Пользователю не придется набирать путь к файлу
вручную, а информация из формы будет записываться и в таблицу.
Третье поле создадим в виде прямоугольной области. Подпись этого поля
можно удалить (выделить мышью только этот элемент и нажать клавишу Delete):
пользователь и так понимает, для чего нужен этот текст. Источник данных - поле
Письмо. Для того чтобы пользователь мог набирать в этой области многострочный
текст, свойство поля Поведение по Enter нужно установить в режим «Перевод
строки».
Еще необходимо создать кнопку и флажок. Нажмем инструмент Кнопка
и нарисуем мышью контур кнопки. Если запустится мастер кнопок, отключим его.
В свойствах кнопки необходимо заполнить пока только свойство Подпись: ввести
текст «Отправить письма». С этой кнопкой должна быть связана процедура отправ-
ки писем (рассмотренная ниже). Имя кнопки Otpravit.
Рядом создадим флажок. На панели Панель элементов за него отвечает кнопка
Флажок. В свойствах нового элемента (а он состоит из трех частей: галочки, подписи
и самого элемента) нужно изменить подпись: ввести фразу «МОЖНО РАБОТАТЬ».
Параметр Значение по умолчанию должен быть равен «Истина» - галочка по
умолчанию установлена. Для того чтобы остановить процесс рассылки, пользовате-
лю достаточно будет снять флажок.
Но пока программа работает, полезно выводить на экран какую-нибудь ин-
формацию. Эго могут быть номера обработанных записей (почтовых адресов).
Создадим поле и сделаем для него подпись «Обработано адресов». Дадим полю
имя Obrab - оно пригодится при написании программы.
Чтобы различать режимы останова программы и рассылки, придется сделать
еще одно поле-индикатор. Подпись его будет, к примеру, «Статус:» а имя оста-
вим то, которое дала программа, Поле93. Это имя тоже потребуется при состав-
лении программы.
Теперь можно задать свойства самой формы. Нам не подойдет стандартная
строка выбора записей из таблицы, потому что кнопки навигации будут нужны
только на первой вкладке. Поэтому параметр Кнопки перехода нужно устано-
вить как «Нет». При сохранении макета формы зададим ее имя: Рассылка.
Форма в режиме конструктора показана на рис. 11.1.
На этом этапе можно переключиться в режим просмотра формы и убедиться,
что работает связь с таблицей ТаблицаПисьма. Для этой цели надо предвари-
тельно занести в таблицу две-три тестовые записи.
Примербазыданныхрассылкипочты
251
Рис. 11,1 Вкладка для рассылки писем
После редактирования формы в режиме конструктора (желательно
NB закрывать окно формы, чтобы сохранит, сделанные изменения, а по-
том открывать ее в режиме просмотра.
С помощью команды Сервис Параметры запуска зададим автоматиче-
ский вывод формы на экран после открытия файла базы данных.
Панель перехода по записям
Кнопки перехода по записям пришлось исключить, потому что они необходи-
мы только для первой вкладки, а на остальных они не нужны.
Но пользователям наверняка захочется просматривать ранее написанные пись-
ма, так что им потребуются кнопки для управления соответствующим запросом.
Раз уж мы удалили кнопки навигации для всей формы, создадим их отдельно для
вкладки Письмо.
Надо снова включить режим конструктора и продолжить работу с формой.
Вначале разместим в нижней части формы надпись «ПИСЬМА:». Потом нам по-
требуется мастер кнопок, с помощью которого мы создадим несколько кнопок.
252
Глава 1f
Мастер кнопок запускается, если на панели элементов нажата кнопка
Мастера, а разработчик создает новую кнопку. В окне мастера можно выбрать
одну из стандартных кнопок. Вначале нам потребуется кнопка Переход к первой
записи, а затем Переход к предыдущей записи. С помощью окна свойств можно
установить размер кнопок 0,6x0,6 см.
Затем надо создать поле для показа номера записи. Достаточно создать
обычное поле и задать его свойства:
Данные - Nl.
Доступ - Нет.
Блокировка - Да.
Комбинация последних двух свойств позволяет, с одной стороны, запретить
пользователю изменение данных в этом поле, а, с другой стороны, не делать это
поле «серым», чтобы цифры были хорошо видны. Подпись этого поля: «Письмо:».
В качестве номера записи можно использовать поле счетчика, у которого задан
режим последовательной авто нумерации. Правда, с помощью запроса мы «пере-
вернули» таблицу, но это не страшно: пользователь легко разберется, где находят-
ся новые письма, а где старые.
Рядом можно создать поле, в котором будет показано общее количество соз-
данных писем, то есть количество записей в ЗапросПисьма и соответственно
вТаблицэПнсьмэ. Поле будет такое же, каки предыдущее, но с двумя отличия-
ми. Во-первых, надо задать его подпись: «Всего:». Во-вторых, надо иначе опреде-
лить параметр Данные. Создадим функцию, которая будет подсчитывать число
записей в запросе. Командой Сервис щ Макрос =! Редактор Visual Basic откро-
ем окно редактора программ (рис. II.2).
Убедимся, что в левой панели выбрана наша форма Рассылка. Слово «Gener-
al» (Общий) в верхней части редактора говорит нам о том, что мы находимся
в разделе подпрограмм общего назначения, которые обслуживают форму.
Обычно здесь помещаются подпрограммы для обеспечения работы элементов
управления формы. Например, при нажатии на одну из кнопок должна выпол-
няться определенная подпрограмма.
Мы можем добавить в эту область свою программу-функцию для вычисления
количества записей. Дадим ей имя <Pisem»:
Public Function Piseir)(’ As Long
Pisem = DCount("*", "ЗапросПисьма")
End Function
Пример базыданныхрассылки очты
253
Gfriwi dl|
Тее Сисяпш
ЙздЛох Err,Descripts оз
Rsjurae Exit Cowrr-and2S Click
Private Sub Cofttrend2 ВjC 1 1. I
On Error GoTo Eh ^orauandze (
public Function P19em(J Аз Long
I i3Eiti = DCounu ("*"r "ЗапросПисьма"
End FuDctien
DoCrnd. I’cKenuTteni ncForitTBar, acEdltMenu , pcnenuVer7C
DoCmd.DcHenuItero acFotzrnB&r, acEdltMenu, 6, , ecMenuVer’C
, S*Wc«>wftViiW4J Bum - pachte-(F$/7n_PnccW’iM*(Cod»Jl
• «S' E** if11''* [rtun Bw* Iй** S** 1 In* IVofavy !J|*P
I IS
л м
ccw?toul(A£Yr/i|Jin )
pochta (pochta)
1 *4 WtrosoftCFF ice Access1
И For If J^ecCN-TKA
। Рассыпка Fcim_PatcMiiKa
! Ajphdbatic jcategtjrUed I
|ft4ww)
Af^er^eJCprfiTi
, After HnalPendt
After Insert
Arte» Layout
AFterRender
Aftertipd^e
1
Ale ^Datasheet'
j AlowDdetfons
]
Е
Рис. 11.3 Создание lyjjKUH для формы
Оператор «Public» позволяет функции быть доступной во всей базе данных.
Процесс вычисления значения функции состоит из одной строки, в которой ис-
пользована стандартная функция Visual Basic - DCount(). У нее два аргумента.
Аргумент «звездочка» говорит о том, что надо подсчитать все записи, а н горой
аргумент указывает, где именно.
Теперь можно закрыть окно редактора Visual Basic и задать свойство Данные
дня нашего нового поля. Проще всего написать вручную: - Pisem().
Продолжим создание стандартных кнопок навигации. Опять с помощью мас-
тера создадим кнопки Переход к следующей записи, Переход к последней
записи. Добавить новую запись, Удалить запись. Расположение их такое же,
как на стандартной панели, так что у пользователя не будет проблем с их и поль-
зованием.
Последним в нашей панели навигации создается поле дня вывода даты создания
письма. Подпись у этого поля должна быть, к примеру, «Дата». Параметры такие:
Данные — Дата.
Доступ - Нет.
Блокировка - Да.
254
Глава //
Теперь с помошьк окна свойств элементов, изменяя значение параметра
(который можно сделать одинаковым у всех элементов), нужно подровнять эле-
менты по горизонтали. Потом, изменяя значение параметра От левого края,
надо добиться, чтобы все элементы находились на равном расстоянии друг от
друга. Разумеется, размеры всех кнопок должны быть одинаковыми.
Окно свойств элемента предоставляет широкие возможности по
форматированию текста который должен быть показан в элемен-
те. Здесь разнообразие опций не уступает хорошему текстовому
редактору. Можно задавать вид, размер и цвет шрифта, способ
выравнивания текста, цвета рамки и фона, визуальные эффекты
(например, тень, и другие параметры.
Использование элемента группы как рамки вокруг кнопок
Для того чтобы наш пользователь не запутался в обилии кнопок, элементы на-
вигации целесообразно оформить в виде группы. Нажмем кнопку Группа
переключателей на панели элементов и нарисуем прямоугольную область так,
чтобы внутрь нее попали все элементы навигации. Скорее всего, в подобной
ситуации запустится мастер групп, и мы отключим его кнопкой Отменить. Заме-
ним название группы: вместо слова «Frame» наберем фразу «Выбор письма».
На этом дизайн вкладки Писыш заканчивается. Готовая вкладка показана на
рис. 11.3.
11.3. Создание подчиненной формы с адресами
Для второй вкладки надо создать таблицу с адресами, чтобы пользователь мог
составить представление о том, по каким адресам рассылаются письма и при необ-
ходимости мог отключить некоторые адреса. Такую таблицу надо выполнить в виде
подчиненной формы, потому что с основной формой уже связан запрос (формально
больше одного источника данных у формы быть не может). Для создания подчи-
ненной формы удобнее всего использовать мастер. Раскроем вкладку Адреса в ре-
жиме конструктора и выберем инструмент Подчиненная форма/отчет.
Прямоугольник надо нарисовать большой, чтобы захватить все пространство
вкладки. На первом шаге мастера надо выбрать вариант «Имеющиеся таблицы и за-
Пример базыданныхрассылки почты
255
_2 Ршхьпкп: форма
► Полз Адрес з l4ic гругиля ДГ,г™ итвяькэ
Ззгалнн-в- гтлнс. и -йро-нте / 'Отграе^ть т*-^з"
Truiar
rt-коедннешьй файп;
Отправите- пнсога j 0 МОЖНО РА&ОТДТЬ
выбор исьиа
Письме: Всего;
ПИСЬМА; ES- -- . 3 В®Е1® 02.12.2003
Статус;
ОСТАНОВ
Рис. 11.3. На первой вкладке созданы основные элементы управления
просы» (как источник данных) и перейти к следующему шагу. На втором шаге
(рис. ] 1.4) надо выбрать поля из таблицы адресов. Все поля выбирать не обязатель-
но, потому что пространство формы ограничено (для работы с этой таблицей мы
создадим отдельную форму).
Мм тер поденно иных форм
| не псп₽ Птлчу-п ть в тсДМтче |-эрну чгн с гч>*т^
I Допуогает™ еьбор пол из имколькнх-*блк; и запросов.
Г-вбш* и -тросы
Табллю: Таблица Адреса V
поля: Выбр'5Н|-ыв поля
Подраад*ления । 1 H»iEp
I
О’н-tia ] | > [ртсвд |
Рис. 11.4 Шаг мастера подчиненных форм, на котором
определяется источник данных
256
Глава 11
На последнем шаге можно только задать имя подчиненной формы, что не име-
ет принципиального значения. В конструкторе основной формы можно изменить
подпись подчиненной формы и записать туда полезную для пользователя ин-
формацию; размеры вкладки позволяют ввести целую строку текста. Кнопки на-
вигации создаются в подчиненной форме автоматически, так что задача почти
выполнена. Еще можно посмотреть подчиненную форму в обычном виде и отре-
гулировать ширину колонок (рис. 11.5). Параметры макета будут сохранены авто-
матически.
Л Рассылка: скорма
1 "чсьмй Адреса Допопнгтгв-гЛ"'
~ Номер । Да j _ Email___________ ' flag
► i E sp$F®spspsp ru
2 В sekarf^sekam.rij
3 О vmr рос com 1
J О S5ss@mail.ru 1
Б П InfoUgvirus.m 1
Б E ru 1
7 О Fiarf<eting@ddd.ru 1
1
9 mls@w/V ru 1
10 snabjen@xnku 1
11 E afs@»zz.ru 1
12 E plus@minus.nj 1
13 о ml23m@rusnail ni 1
14 О pnp@gtfmail.Tu 1
__ 15 O riyuuhh@corn-ru 1
। __ 1Б E ZZZ@Z2ZFU
Запись: r<\J f ГГТ Д
^vbt । Органил
государственное унитарное
ООО СЕКАМ
ООО Винни Пук*
ОАО
От злись ООО ВИРУС» располствг} гс едре
ЗАО
СтрОЙТрЕСГ
Суперпласт
Не pali ОАО
ТОО
ОАО
ОАО
ОАО
ОАО
ОАО
Рис. 11.5. На подчиненной форме оказана только основная информация об адресах
11.4. Создание встроенной инструкции
пользователя
Одна из вкладок (Инструкция) предназначена для размещения инструкции
для пользователя. Среди элементов управления нет достаточно удобного для раз-
мещения большого объема текста. После ряда экспериментов я пришел к выводу,
что дня инструкции надо создать отдельную таблицу с двумя полями: заголовок
раздела (текстовый) и текст раздела (Мето). В базе данных была создана таблица
Инструкция с полями Тема и Инструкция.
Пример базыданныхрассылки почты
257
Рис. 11.6. Подчиненная форма с двумя полями
В результате мы получаем дополнительное удобство: инструкцию можно будет
разбить на разделы. Для инструкции создается подчиненная форма, как и в 1реды-
дущем разделе (рис. 11.6).
После того как на поле вкладки обрисован контур, надо выбрать в мастере
поля (первый шаг мастера следует пройти без выбора параметров). Потом надо
максимально увеличить размеры подчиненной формы в таком порядке: внешняя
граница формы, положение нижней линейки, которая отделяет примечание
формы, поле формы (серая область в клетку), размеры полей.
Подписи Тема и Инструкция надо удалить (их надо аккуратно выделить, что-
бы не удалить заодно и поля). Размеры полей необходимо увеличить. После этого
можно закрыть режим конструктора, не забыв сохранить макет подчиненной
формы.
Изменить размеры двух полей так. чтобы их левые или правые грани-
цы оставались на одном уровне, проще, если одновременно менять
размеры полей. Для этого их надо выделить мышью, нарисовав прямо-
угольник в который попадут оба юля.
258
Глава 11
Поскольку элементы управления таблицей позволяют создавать новые записи,
такой метод имеет еще одно преимущество: администратор базы данных может
добавлять новые разделы, а пользователь может вести в отдельных записях свои
заметки.
Тема
Создание
письма
FaccMWe: форма
W| Пнсьпо Адреса Инструкция Дополнительно
подчиненная фсриа ___________________________________________________
_И| 1
Подготовьте текст письма в теистсвом редакторе (Word) Скопируйте
теист в 'фер обмена Установите курсор на пол письма (вкладка
«I |исы1л.11« бстаеы - текст из t .-фера обмена. Заполни строку
<Тема> При I-добавить к пнсыг • * айг нажмите кнопку
и файл; имя должна появиться в строке
еПрисовдннэньын файл*
Работа с
письмами
Про~?аым । осуществляет отправку письма текс которого показан на
вкладке <Письмо>.. Используй г кнопки в нижней чтобы
создавать новые письма, удалять ненужные или возвращаться к ранее
написанным Сдвланнь е письмах изменения программа запоминает
автоматически.
Эшигаь. ITT) < | Г (7~И jf*) « 6
Рис. 11.7 Подчиненная форма с инструкцией
При составлении инструкции можно, например, учесть, что использовать
вкладку Письмо для составления текста письма не всегда удобно. Например,
нажатие клавиши Enter приводит не к образованию нового абзаца, а к переходу
на новую строку. Поэтому гораздо удобнее написать текст в одном из текстовых
редакторов, проверить правописание, разбить на абзацы, а затем скопировать го-
товое письмо с помощью буфера обмена в текстовое поле. Эта особенность рабо-
ты с базой данных должна найти свое отражение и в составляемом руководстве.
Степень подробности руководства должна зависеть от конкретной задачи
и уровня подготовки пользователей. Например, нужно ли объяснять в руково-
дстве назначение поля flag? Теоретически пользователь может открыть таблицу
и работать с этим полем (например, посмотреть, сколько писем уже отослано, или
исключить некоторые письма из текущей рассылки), но неизвестно, будет ли он
это делать в действительности.
Ниже приведен текст инструкции для этой базы данных.
Пример базыданных рассылки почты
Текст инструкции пользователя
259
Создание письма. Подготовьте текст письма в текстовом редакторе (Word).
Скопируйте текст в буфер обмена. Установите курсор на поле письма (вкладка
«Письмо») и вставьте текст из уфсра обмена. Заполните строку «Тема». При не-
обходимости добавить к письму файл нажмите кнопку «Обзор» и выберите файл;
его имя должно появиться в строке «Присоединенный файл»,
Работа с письмами. Программа осуществляет отправку письма, текст которого
показан на вкладке «Письмо». Используйте кнопки в нижней части вкладки, чтобы
создавать новые письма, удалять ненужные или возвращаться к ранее написанным,
Сделанные в письмах изменения программа запоминает автоматически.
Новая рассылка. Для того чтобы начать новую рассылку писем, надо нажать
кнопку «Подготовить список адресов к новой отправке» на вкладке «Дополни-
тельно» и нажать кнопку «Да» в появившемся окне.
Работа с адресами. Список адресов находится на вкладке «Адреса».
Если письмо надо исключить из всех рассылок (например, если адресат отка-
зался от рассылки), снимите галочку в этой строке таблицы.
Если письмо надо исключить из текущей рассылки, установите в колонке
«flag» значение
Для перехода к известному адресу установите курсор на один из адресов, на-
жмите кнопку «Найти» на главной панели инструментов (или комбинацию клавиш
Ctrl + F), введите адрес или его часть в открывшемся окне «Поиск и замена», уста-
новите при необходимости параметры поиска и нажмите кнопку «Найти далее».
Для работы с дополнительной информацией, связанной с адресами, и для добав-
ления новых адресов нажмите кнопку «Просмотр и правка адресов» на вкладке
«Дополнительно».
Рассылка писем. Программа MS Outlook должна быть настроена заранее для
осуществления физической отправки писем. В зависимости от настроек письма
могут отправляться немедленно по мере формирования, если активно подключе-
ние к Интернету. В другом случае письма накапливаются в папке «Исходящие»
Outlook, а затем отправляются во время сеансового доступа к Интернету. Для
началг новой рассылки или продолжения текущей рассылки нажмите кнопку'
«Отправить письма» на вкладке «Письмо». Галочка «МОЖНО РАБОТАТЬ»
должна быть установлена. Для остановки рассылки снимите указанную галочку.
260
Глава 11
Примечание Во время формирования писем Outlook ыводи' на экран преду-
преждающие сообщения о том, что сторонняя программа пытается отправить
письмо (это сделано с целью защиты от компьютерных вирусов). Вы должны
дать разрешение на отправку писем.
Выбор параметров рассылки. На вкладке «Дополнительно» можно установить
дополнительные параметры: количество адресов, указанных в одном письме
(минимальное значение 1), и временной интервал в секундах между отправкой
писем.
11.5. Создание дополнительных элементов
управления
На вкладке Дополнительно сосредоточены элементы управления, которые не
уместились на первой вкладке. Кроме того, лишняя вкладка позволяет сделать ос-
новную более простой, чтобы пользователь не запутался в обилии полей и кнопок.
Логика работы программы требует использования еще двух параметров.
Во-первых, надо указывать, сколько адресов можно размещать в одном письме.
Во-вторых, письма могут отправляться с определенным временным интервалом.
Многие почтовые серверы (в целях борьбы со спамом) настроены так, что при
большом количестве исходящих писем в единицу времени приостанавливают
обслуживаниеклиента.
На нашу вкладку поместим два поля. Первое будет называться Kopii (значе-
ние по умолчанию 5), а второе — Interval (значение по умолчанию 30). Оба поля
будут использоваться программой для считывания параметров.
Для работы с таблицей адресов полезно сделать отдельную форму. Ее можно
сформировать при помощи мастера, выбрав все поля и параметры по умолчанию,
или сделать автоформу. Назовем ее Адреса. Пример формы показан на рис. 11.8.
Главное здесь - выделить достаточно места для полей типа Мето.
Теперь нам потребуется кнопка с надписью «Просмотр и правка адресов». Она
должна открывать форму, и эту кнопку удобнее всего сделать при помощи мас-
тера. В мастере кнопок на первом шаге выбрать категорию «Работа с формой»
и кнопку «Открыть форму» (рис. 11.9). На вторЬм шаге выберем форму Адреса.
Третий шаг мастера пройдем без изменения параметров. На следующем шаге
надо выбрать опцию «Текст» и задать надпись на кнопке. Теперь можно нажать
кнопку Готово, так как последний шаг мастера не имеет смысла.
Пример базыданныхрассылки почты
261
Л Алреса
Ловегр
Да
ФИО Винни Иванович Пух-
F.iwaW
PejyjTbiir ’
С’рихнзщчя
|-1пГ torn
[ОСО "Винни Г|эГ
1Ъхц> иделгинг
Руководитель отдела
iararas К f« I
Рис. 11.8. Форма для работы с адресами электронной почты
Перязздыао мгнсгп
'ч». ь»5отке зелием
Еыб д в которое будет при
нажатии кнопки.
Каждая категория содержит собственный набор действии.
PatuidC п^еточ
гунледенме
Реякем
Действия;
Закрыть фирну
вменить фильтр формы
Обносить данные форме!
Открыть В JHMUy
PC^37Q||
Пег-а’. - текущей форны
Пена формы
Примы*- = нпьтр форны
Рис. 11.9. Мастер стандартных кнопок
0
J
Последняя кнопка имеет надпись «Подготовить список адресов к новой рас-
сылке». Когда программа отправляет письма, то для каждого обработанного адре-
са значение поля flag устанавливается как 1. Эго позволяет прервать рассылку
в любой момент, а потом продолжить с нужной записи. Но перед началом новой
рассылки поле flag надо обнулить. Эго делает связанная с кнопкой процедура:
Private Sub Кнопка58_С11ск()
’ Сброс поля flag
Dim dbs As Database База данных
Dim rst As Recordset ’Источник email-адресов
Dim i As Integer ’Счетчик
262
Глава 11
Dim г As Integer 'Счетчикобработанных записей
If (МвдВохС'Вы действительно хотите начать новую рассылку?_
Данные о предыдущей рассылке будут уничтожены.", 4)) = vbYes Then
Set dbs = CurrentDb 'Выбор базы данных
'Открываем таблицу с почтовыми адресами
Set rst = dbs. OpenRecordsetf "SELECT * FROM [ТаблицаАдреса];")
If rst.RecordCount о 0 Then 'Проверяем записи
rst.MoveLast 'Последняя запись
rst.MoveFirst 'Первая запись
г = О
For i = 1 To rst.RecordCount 'Просматриваем адреса
rst.Edit
rst!flag = 0 ‘Изменяем значение
rst.Update
r = r + 1
rst.HoveNext ’Следующий адрес
Next
HsgBox "Обработано записей: & г
End If
Else
End
End If
End Sub
В этой процедуре с помощью функции MsgBoxf) создается окно с контрольным
вопросом к пользователю. Если последний отвечает «Да», то поле обнуляется.
Вкладка с дополнительными параметрами показана на рис. 11.10. На ней есть
свободное место, что неплохо на тот случай, когда базу данных потребуется усо-
вершенствовать.
11.6. Программа для отправки писем
Мы уже создали кнопку с надписью «Отправить письма», а теперь создадим
программу, которая будет заниматься отправкой. В режиме конструктора форм
надо открыть окно свойств кнопки и выбрать параметр Нажатие кнопки
(щелчок мышью). С помощью кнопки с тремя точками надо выбрать опцию
«Программа». Тогда будет создана заготовка процедуры, которая будет выпол-
няться при нажатии кнопки:
Пример базыданныхрассылки почты
263
i .2 Р<гссмлк« : форма
Письго Адреса Инструкция - Доголннтьлы-ю
Количество копий: 5
Интервал, сек. 30
Г(хсмот| и адресов
Рис. 11.10 Вкладка дополнительных параметров
Private Sub ]tpravit_Click()
End Sub
При разработке формы эта кнопка получила имя Otpravit. Теперь можно до-
полнить процедуру стандартными операторами обработки ошибок. В случае воз-
никновения ошибки будет выведено сообщение на экран. Теперь код программы
станет таким:
Private Sub 3tpravit_Click()
On Error GoTo Err Otpravit Click
' место для кода
Exit_Otpravit_Click:
Exit Sub
ErrJ)tpravit_Click:
MsgBox Err.Description
Resume Exit_Otpravlt_Click
End Sub
264 Глава 11
Смысл этой конструкции таков. При возникновении ошибки управление
должно передаваться на метку Err_Otpravit_Click, а затем выполнение про-
цедуры прекращается после перехода на метку Exit_Otpravit_Click. В этом
случае обработку ошибки выполняет сам Access. Этот код универсален, и его
можно использовать в качестве шаблона при создании самых разных программ.
Имена меток, разумеется, можно придумать свои, данные имена сгенерированы
автоматически, и поэтому они такие длинные и неудобочитаемые. На время от-
ладки программ бывает полезно отключать команду On Error для того, чтобы при
возникновении ошибки можно было сразу перейти в редактор Visual Basic и отла-
дить код. Приведенный выше листинг можно использовать как заготовку для соз-
дания любых процедур обработки событий.
Отправкой писем в нашем случае будет заниматься программа MS Outlook 2003.
Для того чтобы работать с объектами Outlook, в редакторе Visual Basic надо под-
ключить дополнительную библиотеку. С помощью команды Tools References
надо выбрать компонент «Microsoft Outiook 11.С Object Library». Н рис. 11.11 вид-
но, какие библиотеки необходимы для работы этой базы данных.
I References - pochld
(Available -cleroocos:
For Applications
V t Access 1 Object j
** OLE ‘•ixorriMKFi
w Microsoft Dau 3 COtijec: Library
!*'= Microsoft ActiveX Data Ovi^ ' 2.5 Lt гагу
Windows Media Player
MorW* ^‘fceWeb Ccmpawts 1 z ll
^Истоки Office XPWco ftwonews
* MaoScft. •. ffic* IL fl t hiEjt l ti
- OJjtxO' 11 p Lfciaiv
acwzirwn
Mcrnsai ActiveX Data Objects 2 . Library
JA5Hsi™.- COM Cor jjcnerJ-1 1 Typt Ubrvy
IAS PAi >; К Errvn 'I I Tv - I wj/v
i< i t >
Microsoft Outlook ll.DObfs t Lbiaiy-
Locauon О:\ргс75гп FfestQfh:e2CC131b(^r'CEllWDud.Ci|j
Language. Standard
Рис. 11.11. Список необходимых объектных библиотек
Полный текст процедуры выглядит так:
Private Sub Otpravit_Click()
On Error GoTo Err_Otpravit Click
Отправка писем
Dim prog As Outlook. Application ' Объект - программа Outlook
Dim baza As Database ' Объект - база данных
Пример базыданныхрассылки почты
265
Dim tallica As Recor'lset ' ТоС'ЛТЩа ТаС'ЛПцаПП'Сы:а
Dim i As Integer ' Счетчик цикла
Dim portion As Integer ' Считчик порций
Dim zapis As Integer ' Номер записи
Dim lismo As Mailltem ' объект - почтовой 'сообщение
Dim 'lopfail As String ' Присоединяемый файл
Dim Copies As Integer ' Число' копий письма
Dim pauzi As Integer ' Величина интервала отпданич
Dim PauseTre, Strct ' "еро"-нн”э длч тгг'ора
Ptm Donee As E- :.l-.an ' Ео”ец тоблгры
Dim myNamespace As Outlook.NameSpace
' Создание объектов для письма
Set prog = Dew Outlook.Application
Set myllaiiiespacej = prog.GetNamespace("MAPI”)
' Начальные значения переменны::
dopfile = ” ”
If Len(Trim(Me!Texts)) - 0 Then 'lopfail = MelTentH
lopfile = Trim('lopfile)
pauza - Me! Interval
Donee = False
If pauza 0 Then pauza = 1
Copies. = Me! Kopii
If Copies 0 Then Copies = 1
П'ОДКЛБ ченпе таблицы
Set baza = CurrentDb ' Работаем с этой же БД
Set tallica = baza.Openfiecordset("SELECT * FRoM [ТаС'ЛпцаАдреса] WHERE
([Да]=Тгие);")
' ОСНОВНОЙ цикл
Ею Chile Me!Check34 Ari'l hot Eonec
Me,Refresh ' Пересчет данный формы
If tablica. RecordCount : 0 Then ' Таблица не должна Сыть, пустой
tablica.MoveLast ' Последняя шпись
tablica-MoveFirst ' Первая запись,
zapis = 1
'Ищем новые записи
Ню While tallica! flag = 1 Ainl zapis tablica.RecordCount
tablica,MoveNext ' Вы1'op сп'дуыцэй заппс::
zapis = z.p'is + 1
p, „ ,p
266
Глава 11
If tablica.RecordCount - zapis >= Copies Then
Определение количества адресов
portion = Copies
Else
portion = tablica.RecordCount - zapis + 1
End If
' Формирование письма в формате Outlook
Set pismo = prog.Createltem(olMailltem) ' Создание объекта
pismo.Subject = Mel Теша ' Тема сообщения
pismo.Body = Me!Tekst ' Текст сообщения
If dopfall <> Then pismo.Attachments Add dopfail ' Дополнительный файл
For i = 1 To portion ' Перебор очередной порции адресов
If tablica! Да And Not Konec Then
If tablica!flat <> 1 Then
pismo.Recipients.Add tablica!Email ' Еще один адрес
tablica.Edit
tablica!flag = 1 ' Адрес использован
tablica.Update
End If
End If
If zapis < tablica.RecordCount Then
tablica.MoveNext ' Выбор следующего адреса
zapis = zapis + 1
Else
Konec = True
End If
Next
MelObrab = zapis ' Индикация номера записи в форме
1 pismo. Display ' Показ письма в окне. Для отладки
pismo.Send ' Отправка письма
Не!Поле93 - "РАССЫЛКА"
Me!ПолеЭЭ.BackColor = RGB(O, 250, 0)
End If
' Интервал ожидания
PauseTime = pauza ' Установка величины паузы
Start = Timer ' Текущее значение таймера
Do While Timer < Start + PauseTime And Me! Check34 ' Цикл ожиданиа
DoEvents ' Позволяется работать другим процессам
Loop
Loop
Пример базыданныхрассылки почты 267
Не!Поле93 = "ОСТАНОВ"
Me!ПолеЭЗ. BackColor = RGB(200, 200, 200)
tablica.Close ’Закрыли таблицы
Обработка ошибки
ExitOtpravltClick:
prog.Quit
Exit Sub
Er r_0tp r avit_Click;
HsgBox Err. Description ' Сообщение об ошибке
Resume Exit J)tpravit_Click
End Sub
После определения имен и типов переменных (оператор Dim) происходит счи-
тывание параметров из формы.
dopfih — путь к присоединенному файлу,
pauza — величина задержки для таймера.
Copies - количество адресов получателей в одном письме.
С помощью функции OpenRecordsetf) из таблицы Таблиц а Адреса выбираются
только те записи, где установлено поле Да.
Основной цикл работает, пока в форме установлен флажок «Можно работать»
и переменная Колес имеет значение False. Это позволяет использовать цикл типа
Do While и выполнять в нем любые команды Visual Basic. Это, на мой взгляд,
хорошая альтернатива рекомендуемому в руководствах циклу For Each (который
хорош только в тех случаях, когда внутри цикла находится небольшое число
стандартных операторов).
Но в этом случае программа плохо обрабатывает конец таблицы. Когда выбра-
на последняя запись и используется метод MoveNext, Access не детектирует ошиб-
ку, а последняя запись остается текущей (свойство RecordCount не изменяет свое
значение и не позволяет отследить этот момент). Для того чтобы в программе не
возникала ошибка, необходимо установить специальный флаг, когда выбирается
последняя запись. В данной процедуре это сделано с использованием логической
переменной Колес. Роль счетчика записей в этом случае выполняет переменная
zapis.
Электронное послание формируется как объектная переменная ismo. Из формы
в нее копируется (с помощью соответствующих свойств) текст письма (pismo. Body),
тема письма (pismo. Subject) и присоединенный файл (pismo. Attachments Add). С по-
мощью метода Display электронное письмо можно даже открыть в отдельном окне
для просмотра, но я рекомендую делать это только на этапе отладки.
268
Глава Л
Для того чтобы в одном письме укачат! несколько получателей, используется
цикл For i = 1 То portion.
Когда очередной электронный адрес использован, в текущей записи с помо-
щью методов Edit и Update в поле flag записывается единица.
Объект формы ПолеЭЗ служит индикатором работы программы. В него записы-
вается слово «РАССЫЛКА» и с помощью свойства iackColor создается зеленый
цвет(ВСВ(0, 250, 0)) фона.
Программа Outlook представлена в виде объектной переменной prog. В конце
рассылки связь с Outlook прерывается с помощью метода Quit.
11.7. Настройка Microsoft Outlook для отправки
писем
Для того чтобы программа Outlook могла отсылать письма, надо настроить
учетную запись электронной почты. Для этого надо.
1. Выбрать команду Сервис => Учетные записи электронной почты.
2. В окне выбрать «Добавить новую учетную запись» и нажать кнопку Далее.
3. Выбрать тип сервера и нажать кнопку Далее.
4. Заполнить поля, как показано на рис. 11.12 (для адреса firma_info@x20! ru).
Для проверки качества соединения надо нажать кнопку Проверка учетной
записи. После этого в окне «Проверка настройки учетной записи» наблюдать
прохождение тестовых задач (рис. 11.13). Если работа с почтовым сервером ока-
залась успешной, в окне появляются зеленые галочки, а потом выводится
надпись «Поздравляем! Все проверки выполнены успешно. Нажмите кнопку
Закрыть», Для нас главным тестом является отправка специального тестового со-
общения; если оно отправлено успешно, наша программа тоже будет работать.
Теперь надо настроить режим отправки почты. Outlook может сразу отправ-
лять письма, по мере их формирования, а может накапливать их в папке
Исходящие, а отправлять по команде Доставить. Какой вариант выбрать, зави-
сит от конкретных условий, например наличия постоянного соединения с Ин-
тернетом.
Можно выбрать команду Сервис => Параметры, открыть вкладку Настройка
почты и установить или сбросить флажок «Немедленная отправка при наличии
подключения».
Пример базыданныхрассылки очгы
269
Учетные записи электронной почты
Настроннм злектр ннпй почты ^терцета (POP3)
Каждый । < । этих лграме»хе явлчется обя’атепы-ь-jH для правнпьн . работы учетной
мпи:й эле трон .. > почты,
I Сведр-ния о пользователе
Введите мня: FIP.MA
Айрес электронной fb-maJnfcgtxJ03.ru
почты:
| Ькод в систему
Пользователь: firmajnfo
| Пароль:
О Запомнить пароль
Входе защищенном
(SPA)
Сведения о сервере
Сервер входящей почты (POP3): jp' e2Q3.ru
Сервер исходящей почты'”МТР): ._сз.г,
Параметры проверки
После заполнения сведении е даннс*. окне
запись, г . а
кнопку снизу (требуется подклочение к сети).
учетной
ДрНьуна. гА^г и .. |
Рис. 1.1! Настройка учетной записи
Проверка настроим: учетной писи
Поздравляв •' Все проверки Нажмите
"Закрыть”
Задачи ; Ошибки
Зздачи
ч/Ьстаноека сетевого подключения
ч/Лсис .сервера исходящей почты (SMTP]
-✓ Поиск сервера входящей почты (POP3]
v' Вход на сервер в <адящ< i почты (POP3]
> Отправка тестового печтренного хищения
Состояние
Завершена
Завер.сна
Завершена
Завершена
ЗавЕ-Р.. сна
Рис. 11.13. Проверка соединения с почтовым сервером
Можно самостоятельно создать тестовое письмо и нажать кнопку Отправить,
В папке Исходящие должно появиться новое письмо (это обычно видно на пане-
ли слева), a Outlook должен начать процедуру отправки. Если появится окно
с приглашением ввести пароль, то надо ввести пароль и заодно можно установить
флажок «Сохранить пароль» (когда отправляемых писем много, вводить пароль
каждый раз неудобно).
210
Глава 11
11.8. Рассылка почты
После нажатия кнопки Отправить письма в форме Access начинается про-
цедура рассылки. В Outlook встроена защита от вирусов, которую невозможно
отключить (ее нет только в Outlook 97), поэтому, котда Access пытается отправить
письмо, на экран вначале выводится окно с запросом разрешения работы
(рис. 11.14). Максимальный перио, на который дается разрешение, составляет
десять минут, но этого достаточно для многих задач. Например, если в каждом
письме указано 10 адресатов, а интервал ожидания в процедуре Access составляет
30 секунд, то за десять минут можно разослать 200 писем.
1 Microsol Office if look
А Программа аетсяпогтучитьдост>г. квдресам
’"ектр ннон почты, ураняцимся е Outlook.
Разрешить 'D действие’
I
Возможно, это -„.тдет*- - t о алнчиивируса, и
следует няорэтьстЕе । "Нет”.
р] Разрешить доступ на 10 ми-гут v
Да f | Нет j | Спраек.
Рис. 11.14. Окно для разрешения рассылки
После этого выводится еще одно окно, в котором создается задержка на пять
секунд, после чего пользователь должен нажать кнопку Да, чтобы разрешить от-
правку.
Microsoft Office Outlook
/А Программа пытается евтснатически отг^оэвить
,• Х\. м*шеине от Башвго имащ,
Разрешить это действие?
Возможно, это сьидетел^твувт о вируса, и
следует пыбЬат» ответ "Нет”
Цет j I 1
Рис. 11,15 В этом окне надо нажать кнопку
Да, когда полоска дойдет до конца
Теперь все «формальности» улажены и Outlook может начать рассылку писем.
Значит, самое время откинуться в кресле и насладиться работой базы данных.
ПРИГЛАШАЕМ
АВТОРОВ КНИГ ПО КОМПЬЮТЕРНОЙ
ПЕРЕВОДЧИКОВ И НАУЧНЫХ РЕДАКТОРОВ
ВОЗМОЖНО ВАС ЗАИНТЕРЕСУЮТ ДРУГИЕ НАШИ ИЗДАНИ5
LU. Шекхар, С. Чаула
Основы пространственных баз
данных
ISBN 5-93378-091-X
Б. Виллариал
Программирование Access 2002
в примерах
ISBN 5-93378-059-6
I wiiJbl'Rtm*
П. Кролл. Ф. Крачтен
Rational Unified Process - это
легко
ISBN 5-9579-0019-2
О. В. Спиридонов
Excel 2003
ISBN 5-9579-0022-2
К. С. Маллинс
Администрирование баз данных.
Полное справочное руководство
по методам и процедурам
ISBN 5-93378-083-9
Д. Афанасьев, С. Баричев,
0. Плотников
Office ХР
ISBN 5-93378-043-Х
НАУКА
ОТЛАДКИ
Тэллес, Ю. Хсих
Наука отладки
ISBN 5-93378-063-4
Б. Проффит
Windows ХР Professional
ISBN 5-93378-055-3
По вопросу приобретения книгобращайтесьв издательство потел.: 333-82-11
с И00до 17м. Наш адрес: Профсоюзная 84/32, под. б, эт. 11, из лифта налево
КУДИЦ-ОБРАЗ
Тел./факс: (095) 333-82-11,333-65-67
E-mail: ok@kudits.ru; http://books.kudits.ru
121354, Москва, а/я 18, "КУДИЦ-ОБРАЗ"