This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
ACCESS 2003 Рассмотрены примеры создания реальных баз данных
со
2Ш
О
5
А. Ю. Гончаров
ACCESS 2003 Сам,оуч.ител,ь с
КУДИЦ-ОБРАЗ Москва • 2004
БЕК 32.973-018.2 Гончаров А. Ю. ACCESS 2003. Самоучитель с примерами - М.: КУДИЦ-ОБРАЗ, 2004. - 272 с. Книга посвящена созданию баз данных в широко используемом приложении Microsoft Office Access 2003. Приведены необходимые сведения об этой системе управления базами данных и особенностях ее работы. Рассказывается о том, как создавать таблицы, запросы, формы, отчеты, страницы доступа к данным, программы на Visual Basic. Обсуждаются приемы обработки данных. В качестве примеров рассмотрена последовательность создания нескольких баз данных, готовые файлы которых можно загрузить из Интернета. Книга предназначена для начинающих разработчиков баз данных, преподавателей, студентов, пользователей Access. ISBN 5-9579-002I-4 Алексей Юрьевич Гончаров ACCESS 2003. Самоучитель с примерами Учебно-справочное издание Корректор С. Красильникова Макет В. Клименко "ИД КУДИЦ-ОБРАЗ" 119049, Москва, Ленинский проспект, д. 4, стр. 1 А. Тел.: 333-82-11; E-mail: [email protected]; http://books.kudits.ru Подписано в печать 06.04.2004. Формат 70x90/16. Бум. газ. Печать офс. Усл. печ. л. 19,9. Тираж 3000. Заказ 870 Отпечатано в ОАО «Щербинская типография». 117623, г. Москва, ул. Типографская, д. 10
1.1. Область применения Access 1.2. Профессии, связанные с Access 1.3. Термины, применяемые в Access 1.4. Структура базы данных 1.5. Разработка баз данных и психология пользователей 1.6. Начало работы с Access 1.7. Использование мыши 1.8. Справочная информация о программе
Глава 2. Таблицы 2.1. Конструктор таблиц и форматы данных Текстовый формат Поле MEMO Числовой формат Счетчик Денежный формат Формат «Дата/время» Логический формат Поле объекта OLE Поле гиперссылок Мастер подстановок Создание масок ввода 2.2. Режим таблицы 2.3. Мастер таблиц 2.4. Связывание таблиц Схема данных Формирование связи Связь «один-ко-многим» Связь «один-к-одному» Связь «многие-ко-многим» ..
Содержание Глава 3. Пример простейшей базы данных 3.1. Постановка задачи 3.2. Создание таблицы 3.3. Ввод данных в таблицу 3.4. Быстрое создание формы 3.5. Работа с базой данных Команда Автонабор Сортировка Использование фильтров Печать объекта базы данных
....63 63 64 66 69 72 72 72 73 76
Глава 4. Компьютеризация данных (пример)
78
4.1. Организация ввода данных. Первая таблица 4.2. Запрос с вычисляемым полем 4.3. Создание второй таблицы 4.4. Связывание таблиц 4.5. Быстрое создание формы 4.6. Мастер по анализу таблиц 4.7. Анализ данных
78 80 82 83 84 86 93
Глава 5. Запросы
95
5.1. Мастер запросов 5.2. Конструктор запросов 5.3. Построитель выражений. Создание вычисляемого поля 5.4. Перекрестный запрос 5.5. Выборка повторяющихся записей 5.6. Другие способы группировки записей 5.7. Редактирование данных с помощью запросов Запрос на добавление Запрос на обновление Запрос на удаление Запрос на создание таблицы
Глава 6. Формы 6.1. Автоформы 6.2. Мастер форм 6.3. Конструктор форм 6.4. Элементы управления Надпись Флажок..
96 99 101 105 110 115 117 117 120 122 122
124
,
124 127 130 133 133 ...135
Содержание Поле. Пример вычисляемого поля Списки Рамки объектов Кнопки Мастер кнопок Группа переключателей Подчиненная форма Вкладки 6.5. Диспетчер кнопочных форм
137 141 145 146 147 149 152 154 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. Отчеты 8.1. Быстрое создание автоотчета 8.2. Печать отчета 8.3. Конструктор отчетов 8.4. Сортировка и группировка в отчете 8.5. Мастер отчетов 8.6. Анализ данных с помощью отчетов 8.7. Построение диаграмм
Глава 9. Подготовка данных для Интернета 9.1. Статические файлы в формате HTML 9.2. Динамические файлы в формате HTML (ASP) 9.3. Создание страницы доступа к данным 9.4. Публикация данных в Интернете
182 182 183 185 187 190 194 196
202 202 206 212 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. Пример базы данных рассылки почты 11.1. Таблица,для сбора электронных адресов 11.2. Таблица и форма для написания писем Создание таблицы Создание запроса Создание формы Создание элементов управления Панель перехода по записям Использование элемента группы как рамки вокруг кнопок 11.3. Создание подчиненной формы с адресами 11.4. Создание встроенной инструкции пользователя Текст инструкции пользователя 11.5. Создание дополнительных элементов управления 11.6. Программа для отправки писем 11.7. Настройка Microsoft Outlook для отправки писем 11.8. Рассылка почты ..
Предисловие MS Access - одна из самых популярных систем управления базами данных (СУБД), а ее новая версия Microsoft Office Access 2003 не может не вызывать интереса у пользователей. Система Microsoft Office установлена .на огромном количестве компьютеров (в том числе и в офисах), поэтому для пользователей бывает очень полезно получить базу данных, интегрированную с другими «офисными» продуктами. Но в отличие от Word или Excel, которые позволяют быстро и просто создавать пользовательские документы. Access требует для создания базы данных определенного набора знаний. В то же время круг разработчиков баз данных очень широк: от профессионалов, создающих базы на заказ, до тех, кому надо сделать базу, скажем, на работе, для решения конкретных задач. Эта книга написана для начинающих разработчиков баз данных - т,:х. кто хочет научиться создавать собственные проекты и стать профессионалом. Поэтому, помимо описания самого Access, в книгу включены четыре примера разработки баз - от самой простой, которую можно сделать за один день, до сравнительно сложной, на создание которой уходит не менее месяца. Файлы баз данных выложены на моем сайте по адресу http://goncharov.freeservers.com/access2003: organizacii.mdb - пример «телефонной» БД из главы 3; delo.mdb - пример коммерческой БД из главы 4; testl .mdb - примеры форм и процедур из глав 6 и ] 0; knigi.mdb - пример библиографической БД из главы 7; pochta.mdb - пример БД рассылки из главы 1 1 . Access - довольно «хитрая» система разработки, поэтому я постарался как можно более понятно рассказать о тех навыках, которые требуются разработчику в первую очередь. Важно освоить основные приемы, узнать, «где что лежит», и тогда дело двинется вперед, а опыт приходит с работой. Не надо пытаться запомнить все сразу: в конце концов, у программы есть встроенный справочник, многие проблемы обсуждаются на форумах в Интернете. Зато у книги есть свои преимущества: ее можно читать там, где нет компьютера (и поэтому в книге большое количество иллюстраций), в ней есть расписанные по шагам приемы работы
8
Предисловие
и, конечно, готовые примеры. Я старался сделать книгу как можно более понятной - без манипуляции сложными терминами и ожидания, что пользователь будет иметь специальную подготовку. Книга была закончена только после выхода русифицированной версии Microsoft Office System, потому что многие пользователи не знают английский язык - это тоже надо было учитывать. Я надеюсь, что книга принесет вам реальную пользу и поможет решить ваши задачи. Желаю удачи! Алексей Гончаров
Глава 1 Введение в Microsoft Access 2003 Сейчас даже неспециалисты в области разработки баз данных смело берутся за создание собственных проектов. С одной стороны, программные продукты совершенствуются и становятся все более удобными, для достижения цели требуется все меньше программирования и больше работы с готовыми объектами. С другой стороны, труд разработчиков ценится по-прежнему высоко, и не всегда можно нанять для создания базы данных профессионала. Естественной реакцией на эти факты является расширение армии непрограммирующих профессионалов людей, имеющих насущные интересы в области информационных технологий и достаточно смекалистых, чтобы обойтись без чужой помощи. «Помоги себе сам» - вот девиз таких разработчиков баз данных. Поэтому в этой главе мы начнем с самого начала.
1.1. Область применения Access СУБД-системы управления базами данных-довольно обширный класс программ. Появились они достаточно давно, еще в те далекие времена,, когда на экранах дисплеев можно было видеть только буквы и цифры, но никак не рисунки. Но тогда специалисты по вычислительной технике уже поняли, что компьютер является превосходным средством хранения информации и, что самое главное, средством обработки этой информации. Сейчас это очевидно, но раньше почему-то компьютер считали большим автоматизированным калькулятором, что, безусловно, сужало область его применения. Как бы там ни было, когда возникла необходимость хранить большие объемы данных, встал вопрос, как именно следует это делать. Создавались самые разные варианты, но потом все пришли к выводу, что наилучшим решением являются так называемые реляционные базы данных. В них вся информация распределяется по нескольким таблицам, а между таблицами устанавливается связь (от английского 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 System 2003. Если во многих организациях пользуются именно этим пакетом программ, то резонно предположить, что и СУБД используют из этого пакета, .даже если она по каким-то параметрам уступает другим продуктам. Во-первых, пользователям легче освоить работу с такой программой, потому что многие инструменты работают одинаково в разных приложениях (не говоря уже о том, что рисунки на кнопках одинаковые). Во-вторых, легче осуществляется обмен данными между приложениями - не надо переходить'от стандарта к станда|лу. Кроме того, надо учитывать, что по Access накоплено огромное количество различных материалов: книг, программ, баз данных, сайтов в Интернете. Получается, что преимущество Access заключается в первую очередь в минимизации затрат и времени на разработку пользовательского приложения. А это во многих случаях является решающим фактором выбора СУБД.
Введение в Microsoft Access 2003
//
1.2. Профессии, связанные с Access Да, в этом нет ничего удивительного. Уже появился ряд профессий, сутью которых является работа с СУБД Access. Убедиться в этом можно, полистав любую газету, публикующую объявления о найме на работу. Очень популярной является профессия «оператор базы данных». В крупных коммерческих организациях приходится выделять специальных, людей, чтобы они заносили текущую информацию в базу. Очень часто в качестве базы данных используется именно база данных Access. От оператора требуется, например, умение работать с Access как с приложением, конфигурировать окна для того, чтобы данные было вводить максимально удобно, проверять орфографию, находить ошибки набора, выполнять поиск по базе данных и фильтрацию. Каждодневный ввод больших объемов данных требует терпения, усидчивости и внимательности. Оператор базы данных-типично женская профессия. Не менее популярна профессия «разработчик баз данных». Ей, кстати, и посвящена данная книга. Эта профессия требует использования Access уже как средства разработки и отладки базы данных. Здесь, например, необходимо программирование на языке V i s u a l Basic, использование дизайнерских навыков для конструирования форм и отчетов, абстрактного мышления для создания схемы распределения данных по таблицам. С Access связана и профессия администратора сети предприятия. Часто базу данных размещают на сервере, чтобы обеспечить доступ к данным многих пользователей по сети. В этом случае приходится решать задачи обеспечения одновременного доступа к базе, определения прав пользователей, обеспечения безопасности данных (предотвращения краж информации и резервного копирования), Хотя формально не существует профессия «пользователь», для многих работников основная профессия тесно связана именно с пользовательской работой. Иными словами, человек в течение рабочего дня может часто обращаться к базе данных за информацией.
1.3. Термины, применяемые в Access Прежде чем приступить к изучению самой программы, полезно познакомиться с терминами, которые в ней используются. Базы данных - довольно специфичная область, и многие понятия в ней нигде больше не используются. Начнем, пожалуй, с английских терминов и аббревиатур, которые не переводятся на русский язык.
12
Глава 1
DBMS - database management system, то же самое, что и СУБД. HTML (HyperText Markup Language)-язык разметки гипертекста. Основа для создания веб-страниц. Состоит из ста с небольшим тегов, позволяющих отформатировать определенным образом текст, графику, таблицы, ссылки и т. д. MDB, МОЕ - расширения файлов баз данных Access. Первоначально создается база данных в формате MDB, После компиляции (скрытия текста программ и запрещения доступа к некоторым объектам), а также шифрования данных разработчик получает аналог базы данных в формате МОЕ. MEMO - тип данных, позволяющий хранить большое количество текстовых данных. Одно поле может содержать до 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) - меню, связанное с определенным объектом и содержащее команды только для этого объекта. Контекстное меню раскрывается щелчком правой кнопкой мыши.
Введение в Microsoft 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).
Введение в Microsoft Access 2003
15
Список (Combo box) - элемент управления для выбора одного варианта из нескольких. Подпись (Label) - поясняющий текст, расположенный рядом с элементом управления. Гиперссылка (Hyperlink) - часть текста или рисунок, которые реагируют на щелчок мышью и позволяют перейти к другой части документа, другому документу или веб-странице. В англоязычной документации этот объект называют по-разному, anchor, link или reference. Колонтитул - зона в верхней или нижней части страницы для размещения определенной информации (например, номера страницы). Колонтитулы в Access создаются в формах и отчетах. В английской версии программы верхний и нижний колонтитулы называются Page Header и Page Footer соответственно.
1.4. Структура базы данных Структура базы данных Access показана на рис. 1.1. Основной единицей хранения данных здесь является таблица. Ее колонки называются полями (field), а строки, применительно к базам данных, называются записями (record). Пользователь может создавать поля и записи, определять их свойства, заполнять данными и при необходимости удалять. Вообще говоря, можно представить базу данных, состоящую только из одной таблицы, хотя на практике таблиц бывает несколько. При конструировании базы данных должно соблюдаться правило: данные не должны повторяться. Это диктует необходимость размещения данных в разных таблицах. Чаще всего базы данных Access разрабатываются для коммерческих целей, и необходимые примеры есть во всех учебных пособиях, включая сам Access, который имеет в своем составе учебную базу данных «Борей» (northwind.mdb или Борей.mdb). Сохраняя эту традицию, рассмотрим небольшой классический пример: данные о заказах в коммерческой базе данных и таблица товаров. Заказ можно охарактеризовать определенным набором атрибутов: кто заказал, когда, какие товары и как произведена оплата. Каждый заказ является по-своему уникальным: все данные не могут совпасть. Даже если один и тот же покупатель два раза приобрел один и тот же набор товаров, то сделал он это, очевидно, в разные дни. И даже если ему пришла в голову мысль купить в одной организации в один день два одинаковых набора товаров, то и в этом случае заказы будут отличаться но-
•••'
Глава 1 Таблицы
Запросы
SQL
L ..
Формы
Отчеты
.
._ .*_. . Страницы дои у п а к данным
Модули V i s u a l Basic
Рис. 1 . 1 . Схема взаимодействия объектов базы данных
мерой заказа, по которому в торгующей организации всегда ведется учет таких документов. Поэтому в таблице для каждой характеристики заказа должно быть предусмотрено отдельное поле, а каждый заказ займет одну строку, то есть запись (рис. 1,2). В нашем примере такие записи находятся в таблице Заказы. Но в каждый заказ входит один или несколько товаров. Очевидно, что в этом случае информация о заказанных товарах должна находиться в отдельной таблице (в нашем случае Заказано), чтобы исключить дублирование данных. Запись из таблицы Заказы связана с несколькими записями таблицы Заказало по значению кодового поля, Мы видим, что информация о заказе занимает одну строку таблицы, а данные о товарах могу]1 занимать несколько строк - такая связь называется «один-ко-многим». Информация о том, как связаны таблицы, тоже хранится в файле базы данных и носит название схемы данных. Связывание таблиц.- довольно обширная тема, которая обсуждается в главе 2. Вид связи не может быть выбран произвольно - его определяет конкретная ситуация. Информацию из связанных таблиц можно объединить с помощью запросов форм или отчетов. Пользователь базы данных может и не догадываться о том, как именно хранятся данные, если он работает с формой. В сущности, организация структуры данных и направление информационных потоков и составляют предмет работы разработчика баз данных, и данная* книга в основном посвящена именно этому.
:
Введение в Microsoft Access 2003
':•
\ | г-.с.дзэк«а| <рылова, Анна Крылова, Анна Новиков. Павел Воронова, Дарья гарГ'нгвч. Дар^й Бабкина. Ольга ва Дарь?
Рис. 1.2. Схема простейшей коммерческой базы данных (фрагмент базы «Борей»)
Вернемся к рис. l . l . Для отбора данных из таблиц в Access предусмотрено такое средство, как запросы. Их тоже можно представлять себе в виде таблиц, но таблицы эти виртуальные. В них используются или данные из обычных таблиц, или создаются вычисляемые поля. Запросы позволяют фильтровать записи и выполнять сортировку данных. В основе запроса лежит инструкция на языке SQL, но визуально Access представляет запрос именно в виде таблицы, что достаточно удобно. Запросам посвящена глава 5. Самым употребительным средством отображения данных является форма. Как правило, формы создаются, чтобы облегчить пользователю ввод или поиск данных. Здесь действует другое правило разработчика баз данных: работа обычных пользователей должна быть максимально приближена к работе с существующими популярными программами. Иными словами, обычные работники не должны вникать в тонкости функционирования баз данных - это дело разработчика или программиста. Формы также удобны и для создания распечаток. Часто внешний вид форм повторяет вид документов, с которыми принято работать в данной организации. Созданию форм посвящена глава 6.
18
Глава 1
Часто создать форму невозможно без создания вспомогательных программ, В Access есть два пути для этого: создание макросов или написание процедур на V i s u a l Basic. Отчет - более сложное средство отображения информации, нежели форма. Обычно отчеты создаются как документы, предназначенные для вывода на печать, и состоят из нескольких страниц. Это, разумеется, определяет некоторые особенности конструирования отчетов. Об отчетах рассказывается в главе 8.
1.5. Разработка баз данных и психология пользователей Можно представить примерный сценарий разработки базы данных. Начинается все обычно с того, что заказчик (или начальство) приходит к мысли о необходимости создания базы данных! За фразой «Надо сделать базу данных» обычно следует выяснение того, что конкретно требуется сделать. Заказчик, как правило, не является специалистом по базам данных и свои требования формулирует в обычных терминах. Кому-то надо создать хранилище документов, кому-то базу данных для работы с клиентами, кому-то требуется автоматизировать рассылку электронных писем и т. д. На этом этапе от разработчика требуется увязать требования будущих пользователей с возможностями СУБД. Каждая задача должна найти свое воплощение в конкретных программных решениях. Это достаточно неформальный, этап и он в разных случаях проходит no-разному: где-то составляется техническое задание, где-то все ограничивается устными обсуждениями. Потом наступает этап разработки. Поскольку данная книга как раз этому и посвящена, нет смысла говорить об этом вкратце. Единственно, о чем хочется упомянуть заранее, - об учете психологии пользователей как на этапе разработки, так и на этапе эксплуатации базы данных. Самый интересный момент во взаимоотношениях разработчика и пользователей, на мой взгляд, наступает, когда в руки пользователя попадает первый вариант базы данных (обычно разработка включает несколько этапов с демонстрацией достигнутых результатов). Разумеется, нет необходимости прятать базу от заказчиков- когда уже что-то начинает работать, можно продемонстрировать «бета-версию». Возможно, пользователи увидят, что некоторые вещи они понимали не так, как они выглядят на самом деле, и скорректируют задачу. В этом нет ничего плохого, ведь база данных создается для них и должна обеспечивать максимальное удобство в работе.
Введение в Microsoft Access 2003
W
Есть, правда, «подводный камень», который подстерегает как разработчиков, так и заказчиков. Увидев большие возможности СУБД, пользователь может загореться желанием «сделать всего побольше». -Давайте, мол. и такие еще задачи будем решать, и такие. И опять-таки все бы ничего, но, как правило, расширение круга задач «оплачивается» необходимостью ввода дополнительного количества данных. Вот простой пример. Если мы ведем базу данных наших клиентов, то можем поместить в базу две даты: когда принят заказ и когда он выполнен. В принципе этого достаточно для ведения учета. Но представьте себе, какие еще сведения можно поместить в таблицу: например, когда выставлен счет; когда он оплачен, когда отгружен товар и т. д. С помощью этих данных можно создавать очень подробные отчеты и вести аналитическую обработку1, но, с другой стороны, необходимое количество вводимой информации увеличивается в несколько раз! Будут ли пользователи вводить эти данные? Базы данных чаще всего создаются для коммерческих организаций, а там очень напряженный ритм работы. Может получиться так, что из-за большого объема вводимых данных проект получится мертворожденным: какое-то время с базой будут работать, а потом забросят ее. Поэтому от разработчика требуется квалифицированно объяснить все это заказчику. «Да, это можно сделать, но вы готовы вводить такой объем данных? У сотрудников будет на это время?» При разработке объектов базы данных тоже следует учитывать психологию пользователей. Люди привыкают к определенному стилю работы с «любимыми» программами и автоматически пытаются действовать так же и во всех других приложениях. Кто-то использует главное меню, кто-то предпочитает контекстные меню, а кто-то любит перетаскивание объектов мышью. Поэтому в базе данных желательно создать пользовательский интерфейс, максимально приближенный к уже существующему. Практика показывает, что неспециалисты в компьютерном деле достаточно трудно осваивают новые программы. Так что инструментарий приложения (кнопки, переключатели, флажки и т. д.) должен быть максимально понятным и однозначным. Например, если есть возможность, создавайте кнопки с надписями, а не с пиктограммами. Где можно, вставляйте подписи и пояснения. Разработайте лаконичное и понятное руководство. Например, одной из особенностей Access является то, что данные сохраняются в файле автоматически. Большинство пользователей, работающих в Word или Excel, привыкли, что, пока не будет дана команда сохранения, изменения в документ внесены не будут, и при желании результаты работы можно не сохранять.
Глава 1
'О
А в Access не так: то, что вводится, например, в форму, автоматически записывается и в файл. Пользователей о таких особенностях работы программы, конечно, надо предупреждать.
1.6. Начало работы с Access Окно программы показано на рис. 1.3. В начале работы Access предлагает несколько способов открытия базы данных. И меню Файл, и панель Приступая к работе содержат имена файлов баз данных, «известных» в данный момент системе. Это могут быть файлы, с которыми пользователь работал в последнее время, или учебные базы данных, например Борей.mdb. ;. Microsoft Access *анл
Правка
Знд
Встаем
• :
J-f Ссвдать... j
Открыть...
•
Прпступаяк работе, ,
» X
^OfficeOnllne
-
J С05ЛЗГС ФвШ.
Рис. 1.3. Окно Access 2003 (открыт меню Файл)
Кроме этого, пользователю предлагается создать новую базу данных. Символ создания нового файла - белый листок - появляется сразу в нескольких местах: в меню и на панелях. При создании базы данных Access дает им имя db1. Лучше сразу придумать что-нибудь оригинальное, чтобы файл можно было легко найти.
Введение в Microsoft Access 2003
21
Создать базу данных можно несколькими способами. Можно начать разработку «с нуля», то есть с пустой базы данных, и заполнять ее данными и объектами, Можно использовать мастер для формирования готовой структуры, а затем приспосабливать ее для своих целей. Можно также использовать готовый шаблон БД. В дальнейшем мы познакомимся со всеми тремя способами. В любом случае, перед тем как приступать к работе с файлом БД, разработчик должен проделать некоторую предварительную работу. 1. Определить перечень задач, которые будут решаться с помощью базы данных. 2. Определить источники данных, необходимые для базы данных, и оценить объем этих данных. 3. Определить перечень полей {столбцов таблиц), которые необходимы для хранения данных. Определить перечень таблиц, которые будут содержать эти поля. Придумать имена для таблиц и полей. 4. Определить способ заполнения базы данными (сколько людей будут в этом участвовать, потребуется ли объединять данные разных пользователей и т. д.). Полезно также разработать примерный вид форм, в которые будут вводиться эти данные. 5.
Определить способ получения результата использования базы (это может быть, например, распечатка или вывод на экран).
Потом можно приступать и к созданию БД. Обычно разработка включает несколько этапов. 1. Создание таблиц. В частности, определение ключевых полей, выбор типов полей, выбор форматов данных. 2.
Установка связей между таблицами.
3. Создание запросов на основе таблиц. 4. Заполнение базы данных определенным количеством информации, позволяющим протестировать базу. 5.
Разработка форм и отчетов.
6. Создание программ для обработки данных. Отладка этих программ. 7. Решение вопросов безопасности данных и подготовка базы для передачи пользователям. После создания нового файла базы данных Access представляет его в виде окна, показанного на рис. 1.4.
Глава 1 J] knigi: база данных (формат Access 2002 - 2003) .j Открыть «,£1: Объекты __i
Таблицы
р
Запросы
1
Формы
I
Отчеты
У
Страницы
:'
Макросы
-'
Модули
-Создание тсйгида в реж! те комструктйра: Создание таблицы с помощью мастера Создание таЁпиць, путем ввода данных
Грунты Избранное
Рис. 1.4. Окно базы данных (открыт файл knigi.mdb)
То, что файл пользователя представлен в виде небольшого документа, - несколько необычно, потому что в других программах такой способ не используется. Но в Access это стандарт, и к этому надо привыкнуть. В окне показываются не только объекты базы данных (таблицы, запросы, формы и т. д.), но и инструменты, необходимые для их создания. В то же время инструменты доступны и через систему главного меню, и на панелях инструментов, и могут запускаться при помощи контекстных меню, В некоторых случаях набор инструментов является избыточным. Например, для создания новой таблицы достаточно щелкнуть кнопку Открыть, кнопку Конструктор или значок Создание таблицы в режиме конструктора. Все три действия приводят к открытию окна конструктора таблиц, в котором можно определить поля будущей таблицы. Кнопки Таблицы, Запросы, Формы, Отчеты, Страницы, Макросы, Модули позволяют выбирать вкладки с соответствующими объектами базы данных. Этим определяется стиль разработки базы данных: сначала создаем таблицы, потом запросы, потом переходим к конструированию форм и т. д. Объекты внутри окна можно выстроить так же, как и файлы в обычной папке: кому-то больше нравятся крупные значки, кому-то мелкие, а кому-то таблица.
Введение в Microsoft Access 2003
23
1.7. Использование мыши Для многих операций при разработке баз данных необходима мышь. Например, для изменения ширины столбцов и высоты строк. В этом случае указатель мыши надо поместить на серую зону заголовков столбцов и строк. Когда указатель превращается в жирный черный крестик со стрелками, границу между ячейками можно передвигать. Похожим образом выполняется и выделение строк и столбцов. Только в этом случае указатель должен принять вид одиночной черной стрелки. Для выбора группы записей необходимо, удерживая нажатой левую кнопку мыши, провести указателем по заголовкам требуемых записей. Для выделения группы смежных столбцов необходимо, удерживая нажатой левую кнопку мыши, провести указателем мыши по заголовкам нужных столбцов. Если столбец уже выделен, то повторное нажатие левой кнопки мыши позволит переместить столбец по горизонтали. Если же требуется выделить прямоугольный блок ячеек, то указатель мыши надо установить на угловую ячейку будущего прямоугольного фрагмента так, чтобы он превратился в толстый белый крестик, и, не отпуская левой кнопки, перетащить его на противоположную (по диагонали) угловую ячейку. Если вам нужно изменить форму уже выделенного прямоугольного фрагмента, вы можете, удерживая нажатой клавишу Shift, щелкнуть в другой ячейке, которая должна стать угловой в выделяемом фрагменте. Это удобно делать, если все ячейки видны на экране. Если же выделенный фрагмент должен быть таким, что его невозможно увидеть целиком, то в этом случае надо выделить одну из его угловых ячеек, а затем прокрутить лист к противоположной (по диагонали) угловой ячейке и, нажав Shift, щелкнуть в ней. Выделенную часть таблицы можно скопировать в буфер обмена, а потом вставить в другой таблице. Но это относится не только к данным. Выделять я ч е й к и и копировать их буфер можно не только для данных в табличной оорме, но и в других случаях, когда используется таблица (например, в режиме конструктора таблицы). Мышь необходима и в режиме конструирования форм. Выбрать необходимый элемент управления можно, только если точно навести на него указатель м ы ш и . Рамка, окружающая выделенный элемент, содержит много маркеров, которые позволяют модифицировать элемент управления. При наведении указателя на определенный маркер внешний вид указателя меняется: он может
24
Глава 1
представлять собой раскрытую ладонь, вытянутый указательный палец или стрелки. Все это требует практики, так как в каждом случае выполняется своя операция. В общем, хорошо работающая м ы ш ь - важный инструмент в арсенале разработчика баз данных.
1.8. Справочная информация о программе В любом встроенном справочнике есть три пути получения необходимой информации: оглавление, предметный указатель (индекс) и поиск по словам. В Access удобен еще четвертый способ: когда курсор находится на определенном поле окна диалога, можно нажать клавишу F1, тогда запустится статья справочника, связанная с данной темой. К сожалению, разработчики программ идут по пути усложнения встроенных справочников, что затрудняет поиск нужной информации. В последней версии Access справочник оформлен в виде панели, которая появляется в левой стороне окна программы после выбора команды из меню Справка. Трудность заключается в том, что команды доступа к справочнику могут быть не видны, Например, если компьютер имеет постоянное подключение, к Интернет)', то автоматически включается доступ к справочному сетевому ресурсу Microsoft. Это может быть полезно в определенных случаях, но иногда просто мешает. В таких случаях надо внимательно просмотреть ссылки и команды справочной панели и найти те, которые относятся именно к встроенному справочнику. Другой особенностью встроенной справки является то, что справочники по программированию находятся отдельно. На них есть только одиночные ссылки из основного справочника. Например, по V i s u a l Basic есть несколько справочников: непосредственно по языку, по V i s u a l Basic для Microsoft Office и по Visual Basic для Access. Все они необходимы, так как содержат разные сведения. Справочники по системам программирования часто не переведены на русский язык в русской версии программы, так что если вы недостаточно хорошо читаете английские технические тексты, установите заранее какую-нибудь программу-переводчик. Со справочниками по программированию удобнее работать в окне редактора Visual Basic (команда Сервис => Макрос =э Редактор Visual Basic), а не в основном окне программы. В Интернете, конечно, есть много источников справочных данных о программе.
Введение в Microsoft Access 2003
25
Общие сведения о пакете Microsoft Office System можно получить по адресу: hup://''office, microsoft, com/ Более подробная информация об Access находится в базе знаний Microsoft: hflp: //msdn.microsofl.com/office/understanding/access/ Многие вопросы, касающиеся разработки и использования баз данных, обсуждаются на форумах. Последние интересны еще и тем, что можно задать свой вопрос и получить ответы от разных людей. На мой взгляд, есть два интересных форума по Access: http://www.sql.ru/forum/ http://hiprog.com/forum/ Вот еще несколько ссылок на сайты, содержащие статьи по интересующей нас теме: 3 i-~**£• ' ,л http://msacce.ss- da. га/ hl(p://www. arimsoft. nt/msaccesfi/r index, him http://www. soobcha. ru/fdq/index. html? topic = 124
Глава 2 Таблицы Таблицы являются основой любой базы данных - главным хранилищем информации. От того, как организовано хранение данных в таблицах, во многом зависит успех всего проекта. В процессе работы разработчику приходится не раз возвращаться к конструированию таблиц и менять их структуру. Существует очень большое количество параметров, так или иначе связанных с таблицами или данными (например, форматы данных), о которых необходимо знать но время проектирования и разработки базы данных. В свою очередь, Access предоставляет много возможностей для работы с таблицами. Есть несколько режимов их создания, а во время просмотра данных можно пользоваться разнообразным инструментарием программы для выполнения полезных операций,
2.1. Конструктор таблиц и форматы данных Когда в Access создается новая база данных, пользователь начинает работу с окном, показанным на рис. 1.4. Программа автоматически дает новой базе данных безликое имя db1. Я рекомендую сразу выбирать для файла базы данных информативное имя. В новой базе данных целесообразно сразу создать хотя бы одну таблицу, и разработчику предлагается несколько вариантов создания. Самый простой способ - создание таблицы «путем ввода данных» (в окне есть такая команда). Таблица, которая открывается в этом случае, показана на рис. 2.1. Когда в поле вводятся данные, программа автоматически определяет их тип (текстовые, числовые и т. д.) и настраивает таблицу. Правда, потом обычно используют режим конструктора, чтобы изменить параметры полей. Для нас этот режим интересен еще и тем, что с его помощью можно понять, как организованы данные в таблице. Допустим, мы сразу выбрали команду Создание таблицы в режиме конструктора. В этом случае мы получим возможность определить все поля (столбцы) нашей будущей таблицы и задать их свойства. В первую очередь разработчик должен определить следующие параметры:
Таблицы
27
Запись. | И j
Рис. 2.1. Заттовка таб.шцы
1. Имя поля. По имени будет осуществляться доступ к данным. Имя можно набирать русскими буквами. Пробелы тоже можно использовать, но, основываясь на своем опыте, я не рекомендовал бы этого делать. 2. Тип данных. Принципиально важно, что будет находиться: текст, числа, календарные даты или что-то другое. 3. Длина поля. От этого зависит удобство работы с данными. 4. Является ли поле ключевым. По ключевым полям таблицы можно связывать друг с другом. Менее важными, но тоже часто используемыми являются такие параметры: 1. Формат поля, Форматы подробно обсуждаются ниже. 2. Подпись поля. Подпись может заменить имя поля в формах и таблицах, с которыми будет работать пользователь. Это особенно удобно, если имя поля недостаточно информативно. 3. Значение по умолчанию. Чаше всего такой параметр необходим для числовых или логических полей, когда обязательно наличие данных. 4.
Условие на значение. Разумеется, условие должно иметь смысл применительно к поставленной перед разработчиком задаче. Формирование этого параметра - часть алгоритма функционирования базы данных. Таким образом, можно решить некоторые проблемы, не прибегая к программированию.
5. Обязательное поле. Если эта опция выбрана, при заполнении новой записи пользователь обязательно должен ввести какие-нибудь данные. В противном случае программа будет выводить «ругательные» сообщения, пока пользователь не введет данные.
Глава 2
!
6. Индексированное поле. Эта опция позволяет ускорить поиск данных в этом поле. Кроме того, можно определить, будут ли разрешены в этом поле повторяющиеся значения. Многие строки бланка параметров имеют скрытые списки. Значки этих списков появляются, только когда выбрана данная строка, В этом случае значение надо выбрать из списка. Пример: параметр Формат поля. Окно конструктора таблиц показано на рис. 2.2. В нем для примера дана структура таблицы из базы данных knigi.mdb, о которой рассказывается в главе 7.
. Т«(мнцаКнигн : таблица Ин= поля stl
Жанр Страна 1 •
на^,*к>«-н Иматспьетво ГодВькоаа йннотэшвд
Т
яднн г
"
'
Счетчик екстоеый екставый ексттЯ
•кстати
Чпс повой lone MEMO
е га» Дм одовкм По иив~дн полей на* Индексированное поле Схзтпе Юннкод Pew™ 1МЕ Режим предложен™ IME
t*T Да Нет Нет
Кот тру STOP. F6 = переключен»» икон.
Рис. 2.2. Окно конструктора базы данных
Как видим, структура таблицы тоже представлена в виде таблицы - бланка. С бланком можно работать традиционным способом: менять ширину столбцов при помощи мыши, удалять и добавлять строки с помощью команд главного меню, Строки этой таблицы можно выделять и копировать в буфер обмена в том случае, если надо перенести их в структуру другой таблицы.
Таблицы
29
Это, кстати, удобный способ создания в одной базе данных нескольких таблиц со сходной структурой. В этом случае можно открыть существующую таблицу в режиме конструктора, выделить все строки с именами полей и скопировать их в буфер обмена. Затем окно конструктора можно закрыть, выбрать команду Создание таблицы в режиме конструктора и в открывшемся окне в пустой бланк вставить строки из буфера обмена. В этом случае все характеристики полей будут скопированы. -_
В окне базы данных в разделе Таблицы рядом располагаются как ярлыки команд для создания таблицы, так и ярлыки самих таблиц.
Графа Описание не является обязательной для заполнения, но она полезна, так как позволяет создать подсказку для пользователя. Эта подсказка (текст) появляется в нижней строке окна, когда пользователь устанавливает курсор на соответствующее поле. Одно из полей таблицы должно быть определено как ключевое. Чтобы создать его, установите курсор на строку бланка и нажмите кнопку Ключевое поле на панели инструментов или выберите команду Ключевое поле из контекстного меню, связанного с данной строкой. Есть и похожее понятие: первичный ключ. Он может включать несколько полей. Создавать такой составной ключ имеет смысл в том случае, когда только комбинация значений нескольких полей может однозначно идентифицировать запись в таблице. Для того чтобы создать такой составной ключ, надо выделить несколько строк в бланке, а затем использовать инструмент Ключевое поле. О том, что поле является ключевым, свидетельствует изображение ключика в области выделения строки, содержащей данные о поле. В таблице не может быть более одного ключа, поэтому если символом ключика помечены дне или более строки, то, значит, эта таблица имеет составной ключ. Параметров у поля достаточно много, но и справку по этим параметрам получить довольно-таки легко. Необходимо установить курсор на заданную строку и нажать клавишу F1. Будет открыт раздел справочника, посвященный именно этому параметру. К моменту работы с конструктором у вас уже должен быть хотя бы «эскизный проект» (а еще лучше - техническое задание) будущей базы данных, откуда было бы ясно, какие поля должны присутствовать в таблице. В первую очередь надо определить форматы полей. Разберемся, какие бывают форматы. Разумеется, при конструировании базы данных нет необходимости задавать все
30
Глава 2
свойства полей. Я бы даже сказал, что их не надо определять до тех пор, пока в этом не возникнет настоятельная необходимость. Но чтобы полностью использовать потенциал Access, вы должны при работе с программой держать «в уме» возможность применения того или иного свойства.
Текстовый формат Длина текстового поля может достигать 255 символов. От разработчика требуется правильно угадать размер поля. Сколько символов нужно, например, для хранения адреса электронной почты? А для фамилии, имени и отчества? Сразу и не скажешь. Если поле будет выбрано слишком коротким, то заполняющий базу данных оператор может столкнуться с тем, что длины поля не хватит. Если поле будет слишком длинным, то при большом количестве записей размеры базы данных будут неоправданно расти. Длину поля можно уменьшить и тогда, когда база данных уже создана, но это связано с риском потери данных. На рис. 2.3 показана вкладка параметров текстового поля. Здесь и далее на рисунках будут показаны параметры поля, принятые по умолчанию. Общие
Подавно i жа
Разиеа попя Формат поля Маска ввода Подпись Значение по угюпчанию Условие на значение Сообщение об ошибке Обязательное поле Пустые строки Индексированное попе Сжатие Юникод Режим IME Режим предложений IME Смарт-теги
50
Нет
Да
Нет
Да
Нет контроля
Нет
Рис. 2.3. Вкладка параметров текстового поля
Формат поля (формат отображения) используется для вывода данных в формах и запросах. Существует набор специальных символов формата, которые задают вид и размер выводимых строк. Кодовые символы формата текстовых полей представлены ниже. @ — обязательный текстовый символ или пробел; & - необязательный текстовый символ; < — преобразование символов в н и ж н и й регистр; > - преобразование символов в верхний регистр.
Таблицы
31
Формат поля может состоять из двух частей, разделенных знаком «точка с запятой». Первая часть является собственно форматом ввода, а вторая определяет значение поля, если данные в него не были введены. Маска ввода позволяет задать вид строки при наборе данных. О - обязательная цифра (0...9); 9 - цифра или пробел; ft - цифра, пробел, плюс или минус; L - обязательная буква (если используется русский алфавит, то A...Z и А.. Я); ? - необязательная буква; А - обязательная буква или цифра; а - обязательная буква или цифра; & - обязательное наличие символа или пробела; С - любой необязательный символ; Точка, запятая, двоеточие, точка с запятой, дефис, слэш - возможные разделители данных (они сохраняют свой вид в строке); ! - строка должна заполняться справа налево: \ -символ, введенный после обратного слэша, интерпретируется как символьная константа. Это позволяет использовать в маске вышеприведенные символы. Например, если какие-то данные должны быть разделены символом #, то в маске надо указать \#. Кроме обратного слэша можно использовать кавычки для добавления в маску произвольного фиксированного текста. Пароль - позволяет создать поле для ввода пароля, при этом набранные символы не отображаются. Знаки маски ввода О, A, L, & требуют обязательного ввода данных в поле. Поскольку некоторые виды данных (даты, время, телефонные номера) содержат стандартные разделители, то для упрощения ввода предусмотрено, что некоторые общепринятые символы-разделители воспринимаются в маске ввода «буквально», то есть записываются в поле наряду с введенными данными. Кроме этого, для определения символьных констант, состоящих из нескольких символов, допускается использовать двойные кавычки. В отличие от символов формата, символы маски ввода являются общими для всех типов полей, в которых разрешено применение маски. В качестве примера напишем маску для ввода семизначного номера телефона: .000-00-00
32
Глава2
Масками надо пользоваться с осторожностью. Еще один пример — маска ввода для заполнения анкеты. В справочнике Access приводится пример для имени человека: Это действительно так, но только в том случае, когда поле содержит только имя и ничего больше. . А как быть в случае поля «Фамилия Имя Отчество»? Может быть, подойдет такая маска? ~>!_??' ? ???'????'??? >\ '???? г ??'''?'??'?7? .'|_ 7???? 9 ?'- 1 ??? 9 ?
Увы, нет. Например, при попытке ввести в это поле данные «Гарин Афанасий Иммануилович» мы получим в результате: «Гаринафанасийим Мануилович». Получается, что ари необходимости использования маски это поле придется разбить на три. Кроме того, указанная в справочнике Access маска подойдет только для имени или отчества, а для фамилии - нет. Бывают, к примеру, двойные фамилии (Гарин-Задунайский), и получается, что обязательным элементом формата фамилии является только заглавная первая буква, но такой вариант маски не предусмотрен. Скорее всего, создать подходящую маску для фамилии не удастся. ,—,
Если в поле, для которого создана маска, вводятся данные не по формату, то программа выводит на экран предупреждающее сообщение, в котором приводится текст маски. Это сообщение может оказаться непонятным для пользователя.
Подпись. Это второе имя поля, которое можно использовать в таблицах и формах. Подпись может состоять из нескольких слов и быть более понятной. нежели обычное и м я ноля. У меня, правда, был один случай. В базе данных были заданы подписи для полей. и часть полей были обязательными для заполнения. Пока данные в них присутствовали, все было нормально, но как-то раз во время заполнения таблицы при переходе на новую запись одно поле оказалось пустым. Access вывел на экран сообщение, но поле назвал по имени, а не по подписи. Понять, что это за поле, можно было, только открыв режим конструктора, но именно это Access делать не позволял, постоянно выводя окна с сообщением об ошибке. Пришлось потратить достаточно много времени, чтобы разобраться, в чем дело, и ликвидировать ошибку. Такой вот казус.
Таблицы
33
Значение по умолчанию. В некоторых случаях (чаще всего это числовые поля) требуется, чтобы в поле изначально присутствовало какое-то значение. Например, если эта величина используется в вычислениях: для расчетов или создания вычисляемых полей. Тогда этот параметр оказывается очень кстати. Условие на значение и Сообщение об ошибке, С помощью инструмента Построителя выражений можно сформировать ограничения на значения поля, Это должно быть выражение логического типа. Например, для ввода числа градусов (величины угла) можно предусмотреть такое ограничение: >1 And <360
Если пользователь введет число, не удовлетворяющее этим условиям,, программа выведет на экран сообщение об ошибке. Для этого сообщения надо задать строку в параметре Сообщение об ошибке. В нашем примере это может быть такая фраза: «Введите число от 1 до 360». Обязательное поле. Если выбрана опция «Да», пользователь обязательно должен ввести данные в это поле. Пустые строки. Для текстовых полей это строки, не содержащие ни одного символа. Они обозначаются двойными кавычками: "". Если эта опция не выбрана. Access использует для отсутствующих данных стандартную константу Null. Индексированное поле. Этот параметр может иметь одно из трех значений: 1. Поле не индексировано. 2. Поле индексировано, допускаются повторяющиеся значения. 3. Поле индексировано, не допускаются повторения значений поля. Чаще всего это свойство используют для запрета повторяющихся значений. Например, если создается база данных для почтовой рассылки, то необходимо запретить повтор значений в поле «Электронный адрес», иначе один адресат может получить несколько одинаковых писем. Сжатие Юн и код. Тестовые данные записываются в Access 2003 по системе Unicode, то есть для каждого символа отводится два байта. При использовании некоторых алфавитов первый байт всегда равен 0. и представляется возможность «сжать» информацию. В целом это позволяет уменьшить объем базы данных. Обратите внимание, что по умолчанию этот режим выбран. Режим 1МЕ и Режим предложений IME. Аббревиатура расшифровывается так: Input Method Editor - редактор способа ввода. Это надстройка для обеспечения ввода данных на восточноазиатских языках. К русскому языку это не имеет никакого отношения.
2-870
34
Глава 2
Смарт-теги. Это дополнительные инструменты, которые встраиваются в поле и позволяют открыть какое-либо приложение Office (например, календарь встреч из Outlook). i
Поле MEMO Это тоже текстовое поле, с той разницей, что поле MEMO может содержать до 65 535 символов. Набор свойств поля MEMO такой же, как у обычного текстового. Такие поля могут выполнять разные функции. Во-первых, они обеспечивают совместимость с базами данных других СУБД, поддерживающих формат MEMO (например, dBASE или FoxPro). Это может оказаться важным при выполнении операций импорта или экспорта баз данных. Во-вторых, поле MEMO может служить хранилищем текста. Но увидеть такой текст можно будет только в форме или отчете, если для поля MEMO будет создан элемент управления «поле». Лучше всего создавать его при помощи мастера. Область для вывода текста может иметь размеры, позволяющие увидеть сразу несколько строк, а если весь текст не уместится в границах элемента управления, то будет создана полоса вертикальной прокрутки.
Числовой формат Вкладка числового формата показана на рис. 2.4. Числовые поля обладают в основном теми же свойствами, что и текстовые, с некоторыми отличиями. Их мы сейчас и рассмотрим. Общие
Подстановка
Pasnep поля Формат поля Числа десятичных знаков Маска ввода Подпись Значение по умолчанию Условие назначение Сообщение об ошибке Обязательное попе Индексированное поле Смарт-теги
Длиннее целив Дето
О
Нет Нет
Рис. 2.4. Вкладка параметров числового поля
Размер поля. Он может принимать значения из следующего списка: Байт - целые числа в пределах от 0 до 255.
Таблицы
35
Целое - целые числа от-32 768 до 32 767. Длинное целое-целые числа от-2 147 483 648 до 2 147483 647. Одинарное с плавающей точкой (4 байта)-числа в пределах от-3.402823Е38 до -01298Е -45 для отрицательных значений и положительные числа от 1.40I298E - 45 до 3.402823Е38. Двойное с плавающей точкой (8 байт)-отрицательные числа в пределах от -1.79769313486231Е308 до - 4.94065645841247Е-324 и положительные числа в пределах от 4.94065645841247Е - 324 до 1.79769313486231Е308. Действительное (12 байт) - формат, обеспечивающий наибольшую точность представления данных. Можно использовать до 28 знаков после запятой. Диапазон значений от- 10Е28- 1 до 10Е28- 1. Код р е п л и к а ц и и - GUID, Globally unique identifier (уникальный глобальный идентификатор) длиной 16 байт. Формат поля. Может определяться следующими кодовыми символами: . - точка используется как десятичный разделитель; , - запятая применяется как разделитель групп разрядов; О - вывод цифры или нуля, если разряд незначащий; и -вывод цифры; $ - вывод знака доллара; к - вывод числа в процентном формате; Е или е - вывод числа в экспоненциальной форме (например, 0.370Е + 06). При создании числового формата могут быть заданы четыре группы кодов: первая для вывода положительных чисел, вторая - для отрицательных значений, третья - для представления нулевого значения и четвертая - для пустых полей. Группы разделяются знаком «точка с запятой». В формате можно задавать и цвет выводимых символов. Допустим, надо представить значения температуры так. чтобы величины больше нуля были красного цвета, а меньше нуля - синего. В этом случае формат может быть таким: й[Красный]; -3[Синий]; 0[Зеленый]; ''Неизвестно''
Замечу, что, хотя нам в данном случае не важно, как будет представлено нулевое значение, мы все равно должны создать для него группу формата (в любом виде). Иначе ноль не будет выводиться на экран. А так, например, может выглядеть формат для денежных значений: Й ЯЯО.ОСГр.",-и й«0.00"р. "[Красный];\ 0[3еленый];" Нет данных"
36
Глава 2 Основой для числового формата может служить следующая конструкция: # fijfO 00
В этом формате указано не только расположение обязательных и факультативных разрядов, но и отмечено, что в числе должно проводиться разделение групп разрядов пробелами. Так, например, число 123456,789 в этом формате выглядело бы следующим образом: 123 455,79
NB
Вид десятичного разделителя выбирается в Windows- Например, в Windows ХР надо раскрыть Панель управления, выбрать компоцент Язык и региональные стандарты, а в нем - вкладку Региональные параметры По умолчанию в русской версии Windows в качестве разделителя используется запятая.
Последнюю, четвертую группу формата можно использовать как фразу-напоминание (Введи число!), которая покажет, что в некоторой ячейке отсутствуют данные, которые на самом деле должны там быть. Кроме того, используя четвертую группу формата, можно из числового поля сделать «как бы текстовое», то есть, позволить программе заполнять ячейку неким текстом при отсутствии числовых данных. Соответствующий пример был показан выше, в формате для значений температуры.
Счетчик Как правило, в таблице требуется поле, значения которого были бы уникальны для каждой записи. Например, жителя страны может идентифицировать номер паспорта, а книгу номер ISDN. Полю, которое может выполнять такие функции, можно придать свойство ключевого. На практике далеко не каждая таблица обладает таким полем, потому что ключевое поле должно обладать определенными свойствами, например, в нем не должно быть двух одинаковых значений. Если такого поля изначально нет, то функции ключевого поля может выполнять поле счетчика. Это разновидность числового поля. При создании новых записей в это поле автоматически записываются числа. Вкладка параметров счетчика показана на рис. 2.5.
Таблицы
37 Эбшие
Подстановка
Размер поля Новые значения Форинт поля Подпись Индексированное гтле Смарт-тегп
Длинное ц.епо.е Поспелова тельные
Нет
Рис. 2.5. Вкладка параметров счетчика
Еще одна полезная функция счетчика - автоматическая нумерация записей таблицы. Access предлагает два варианта изменения счетчика: последовательный и случайный. Первый вариант удобен тем, что позволяет нумеровать записи по порядку. Назначение второго варианта не так очевидно; Его можно использовать, если надо создать систему кодирования записей в таблице, защищенную от неосторожных действий оператора. Если нумеровать записи последовательно (1. 2, 3 и т. д.), то опечатка при вводе может легко превратить один код в другой, и обнаружить такую ошибку будет трудно. Иначе обстоит дело, если коды выбираются случайным образом (например, 1193517479, 442230790, 1742918387 и т. д.). Поскольку случайные значения счетчика представляют собой многоразрядные числа, то вероятность того, что один код будет введен вместо другого, меньше, чем в первом случае. Кроме того, имея список всех кодов, легко проверить сколь угодно большую таблицу на наличие опечаток. Остается добавить, что использовать этот прием можно, если заменить в дальнейшем тип «счетчик» на другой, потому что изменять данные в поле счетчика оператор не может. Обратите внимание на параметры счетчика, заданные по умолчанию. Это поле не является индексированным. То есть возможности сортировки и поиска в этом поле по умолчанию не оптимизированы. Это понятно: если создать много индексов, то результат будет обратным: работа с базой данных не ускорится, а замедлится. Поэтому разработчик должен сам решить, какие поля должны быть проиндексированы. При разработке таблиц счетчик очень часто создается именно как ключевое поле. Тогда он автоматически становится индексированным, а повторы значений в поле счетчика не допускаются в любом случае. Я рекомендую начинать создание структуры каждой таблицы с поля счетчика, хотя делать его ключевым не обязательно.
38
Глава2
Денежный формат По умолчанию денежный формат для русской версии программы представляет собой числа, записанные с двумя знаками после запятой, с разделением групп разрядов и обозначением «р.» в конце. Обозначения денежных единиц определяются настройками Windows. Вкладка со свойствами поля, имеющего денежный формат, показана на рис. 2.6. Слово «Денежный» определяет формат по умолчанию, то есть для национальной валюты. Для других задач предусмотрены дополнительные форматы, Есть в новой версии Access и формат для евро. Это удобно, тем более что ввести с клавиатуры знак «евро» не всегда удается. Еще один полезный шаблон денежного формата - процентный. Остальные свойства денежных полей не отличаются от обычных числовых. Общие
Подстановка .
Формат поля Дене;кный Число десятичны": таков Авто Маска ББСД а . Подпись Значение по умолчанию ,0 Условие на значение Сообщение об ошибке Обязательное поле Нет Индексированное поле Нет Смарт-теги
Рис. 2.6. Вкладка параметров «денежного» поля
Пользователь может записать в строке Формат поля шаблон для своего формата. Допустим, необходимо вводить суммы в долларах. Тогда надо установить курсор на слово «Денежный» в указанной строке и заменить его, например, таким шаблоном формата:
и Ш$ Этот формат предполагает, что сумма записана как целое число, с разделением групп из трех разрядов пробелами (чтобы легче было отличать единицы от тысяч, а тысячи от миллионов) и знаком доллара в конце числа, как принято в России, но не в США. Но когда пользователь вводит данные в поле, знак доллара исчезает, но появляются два числовых разряда. Это позволяет проверить введенное значение с точностью до цента.
Таблицы
39
Формат «Дата/время» Дата и время представлены в компьютере одним числом, которое показывает число компьютерных «тиков» с определенного момента времени. С помощью встроенного календаря программа может представлять эти данные в разных видах: или как время, или как дату, или то и другое вместе. Разумеется, это зависит от того, как пользователь настроит формат поля. Вкладка свойств этого поля показана на рис. 2.7, Обшие
Подстановка
Фо&мат поля Ma «и ввода !•'..! I . I
Значение по умолчанию Условие на значение Сообщение об ошибке Обязательное попе Индексированное none Режим 1МЕ Режим предложений IME Спзрт-тегц
Нбт hsi Нет контроля Нет
Рис. 2.7. Вкладка параметров поля формата «Дата/время»
На вид данных в этом поле сильно влияет формат. Программа предлагает несколько стандартных шаблонов (параметр Формат поля).
Название формата
Пример
Полный формат даты
12.09.2004 18:35:58
Средний формат даты
12 сентября 20041.
Краткий форшт даты
12.09.2004
Длинный формат времени
18:35:58
Средний формат времени
6:35
Краткий формат времени
18:35
В исходном состоянии, когда поле только что создано, параметры отображения данных на экране не заданы. Возникает закономерный вопрос: какой формат для поля Access изберет по умолчанию? Самое интересное, что в данном случае СУБД вообще не использует никакой формат. Точнее, она допускает наличие сразу нескольких форматов. Например, если в поле ввести значение времени 18:3S, то программа автоматически преобразует его в «длинный формат времени»: 18:35:00.
40
Глава 2
Вели ввести дату, например 12 сент 2004, то к данному полю будет применен «краткий формат даты», и информация будет представлена так: 12,09.2004. Если лотом в режиме конструктора выбрать, для этого поля один из форматов, например длинный формат даты, то в первом случае данные будут выведены неправильно, а во втором - правильно. В этом нет ничего удивительного, так как в первом случае информация о дате отсутствует. Но это не значит, что информация в поле будет потеряна. Если вернуться в режим конструктора и стереть текст в строке Формат поля, то данные снова будут отображаться правильно. Отсюда надо сделать вывод, что поле типа «Дата/время» надо или вообще оставить без формата, или задать подходящий формат до начала ввода данных в таблицу. Если пи один из готовых форматов не подходит, можно написать свой. Существует ряд кодовых символов для определения формата дат и времени. ; - двоеточие используется как разделитель часов, минут и секунд; / - по аналогии, слэш используется как разделитель в датах; с - комбинированный формат. Для времени используется «длинный формат», а для дат - «краткий формат»; d - дата (от I до 3!); dd - дата с ведущим нулем (от 0! до 31); ddd - день недели двумя буквами (от Пн до Вс). В английской версии день недели обозначается тремя буквами (от Sun до Sat); dddd - полное название дня недели; ddddd - «короткий формат даты»; d d d d d d - «длинный формат даты»: w - номер дня в неделе (от 1 до 7); ww - номер недели в году (от 1 до 53); m - номер месяца (от 1 до 12); mm - номер месяца с ведущими нулями (от 01 до 12); mrnm - обозначение месяца тремя буквами (от янв до дек); mmmm - полное название месяца; q - номер квартала (от 1 до 4); у - номер дня в году (от I до 366); уу - обозначение года двумя цифрами (от 01 до 99); уууу - обозначение года четырьмя цифрами (от 0100 до 9999); h - обозначение часа от 0 до 23; hh - обозначение часа двумя цифрами от 00 до 23; п - обозначение минут от 0 до 59;
Таблицы
41
nn - обозначение минут двумя цифрами от 00 до 59; s - обозначение секунд от 0 до 59; ss - обозначение секунд двумя цифрами от 00 до 59; ttttt - «длинный формат времени»; АМ/РМ - использование аббревиатур «AM» и «РМ» для обозначения времени до полудня и после полудня соответственно; am/pm - использование аббревиатур «am» и «рт» для обозначения времени до полудня и после полудня соответственно; А / Р - использование символов «А» и «Р» для обозначения времени до полудня и после полудня соответственно; а/р - использование символов «а» и «р» для обозначения времени до полудня и после полудня соответственно; АМРМ - обозначение времени до полудня и после полудня в соответствии с настройками Windows. Например, если использовать формат поля d d d d " , "dd.mmmm.yyyy, то данные будут представлены в таком виде: пятница, 12.сентября.2004
-_
В форматах даты и времени нельзя использовать коды формата для текстовых полей, например символ «угловая скобка» для преобразования регистра букв, но другие параметры поля типа «Дата/время» такие лее, как у текстового поля.
Логический формат Ячейка в поле логического типа может содержать только одно из двух значений: Да или Нет. Access предлагает еще два варианта названий логического типа: Истина/Ложь и включено/выключено. Вид формулировки можно выбрать из списка в строке Формат поля на вкладке свойств, показанной на рис. 2.8. Использование логических полей может быть самым различным (например, в анкетах или для создания элементов управления). Самым ценным качеством логических полей, на мой взгляд, является способ их представления в таблице. Вне зависимости от того, какой формат поля вы изберете, в таблице логическое поле будет представлено в виде набора флажков. Когда вы щелкаете флажок мышью, это приводит к тому, что в квадрате появляется изображение пилочки, что соответствует логическому значению ДА. Сброс флажка означает прис воение ячейке поля логического значения НЕТ.
Глава 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. ;-i
Microsoft Office Access Тип об-ьекта; (;j Создать новый О Создать из файла
Wave Sound WordPad Document Диаграмма Microsoft Excel Диаграмма Microsoft Graph Документ Microsoft Word Захват экрана Paint Shop Pro 6 Изображение Paint Shop Pro 6 Лист Microsoft Excel
-т
. trig
d en
OK
Отмена
.де значка
Добавление в документ ноеого объекта типа 'ACDSee BMP
Рис. 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. Использовать форматы для этого поля теоретически возможно, но на самом деле они не определены. Скорее всего, в реальной задаче будет необходимо, чтобы это поле допускало произвольный формат, поскольку ссылки на файлы могут быть самыми разными. Общие
Поде тана зка
Формат поля Подпись Знамение по умолчанию Условие на значение Сообщение об ошибке Обязательное л one Пустые строки Индексированное попе Сжатие Юникод Режим JME Режим предложений IME LMafT-тегн
Нет Да 'Нет
Да
Нет контроле Нет
Рис. 2.10. Вкладка параметров поля гиперссылки
Для создания гиперссылки надо выбрать команду из главного меню Вставка => Гиперссылка или команду из контекстного меню Гиперссылка ~=з Изменить гиперссылку. Поиск адреса документа производится в окне, показанном на
Таблицы
45
рис. 2.11. Доступ к данным- осуществляется по такому же принципу, как и в случае с объектами OLE: путем запуска приложения, позволяющего просмотреть указанный файл. Добавление гиперссылки Связать с:
Текст:
.Д Папка. файлом веб- , страницей , текущая
_
]
Подскз
___: My Document; :
4j My Data Sources ^ j^. цесдае[| Ffes Is, Моя |«.у5ыкг
J
" „ ;т?аницеи
просмотрен-, >у ные
страницы
J г.бкт^онгюм почтой
последние файг.ы
Рис. 2.11. Окно для выбора гиперссылки
Мастер подстановок Несмотря на то что мы можем увидеть фразу «Мастер подстановок» в описке полей, это не тип данных, а название мастера. Очень часто возникают ситуации, когда в поле можно вводить не любое значение, а только одно из определенного набора. Например, название города, способ оплаты товара, формат видеозаписи. Если оператор базы данных будет каждый раз вводить значение вручную, он, вопервых, может допустить опечатку, а во-вторых, одно и то же название ввести поразному. Кроме того, выбор из числа фиксированных значений помогает сэкономить время при вводе данных. Поэтому удобно, когда поле оформлено в виде раскрывающегося списка. Задать параметры такого списка помогает Мастер подстановок. Единственное, что требуется от разработчика, - заранее сформировать перечень возможных значений. Тут возможны два варианта: создать отдельную таблицу с полем такого же типа и со всеми необходимыми данными или сразу определить набор возможных значений поля.
46
Глава 2
Создадим для примера поле со значениями вариантов оплаты заказа и назовем это поле Оплата. После того как из списка Тип данных (в режиме конструктора) выбрано значение «Мастер подстановок», на экране появляется первое окно мастера (рис. 2.12). Выберем опцию «Будет введен фиксированный набор значений» и нажмем кнопку Далее. Создание подстановки Мастер создает столбец подстановки, е котором отображается список значений для выбора. Каким способом столбец подстановки будет получать эти значения' С; Объект "столбец подстановки" будет использовать значения и; таблицы или запроса, Отбудет введен фиксированный набор )начений,
Рис. 2.12. Окно первого шага мастера подстановок
На втором шаге мастера (рис. 2.13) можно ввести значения поля. Размер колонки можно изменить. Кроме того, при необходимости можно сделать список из нескольких колонок. В окне есть подсказка, как выполнить автоматическую подгонку ширины столбца (дважды щелкнуть на границе колонки). Самое главное - щелкать надо, когда указатель мыши примет вид черного крестика с двумя стрелками. Последний шаг мастера (рис. 2.14) можно узнать по характерному клетчатому флажку. В нашем примере это окно позволяет только задать подпись для нового поля. После этого можно нажать кнопку Готово, чтобы мастер закончил свою работу. Фрагмент таблицы с полем подстановок показан на рис. 2.15. Когда в ячейке таблицы устанавливается курсор, появляется значок раскрывающегося списка. Как видим, это существенно облегчает ввод данных.
Таблицы Ссчдание подс-кшовни .
Выберите значения, которые будет содержать столбец подстановки. Введите числе столбцов списка и значения для каждой ячейки. :
. Пеозтащите правую границ/ заголовка стопина на нужную ширим/ или дважды • щелкните ее для автоматического подбора ширины. f Числа столбцов:
i
Столбец! Наличными Предоплата по счету По еетселан С отсрочкой платежа Лизинг
Рис. 2.13. Окно второго шага мастера подстановок
Создание подстановки Задапте подпись, которую содержит столбец подстановки. Способ оплаты Указаны все сведения, необходимые мастеру, чтобы создать столбец подстановки.
[_.} Вувестп справку, после того как мастер создаст столбец подстановки.
Отмена
< Назад
Далее >
i
Гстоео
Рис. 2.14, Окно третьего шага мастера подстановок
Если пользователь захочет ввести свои вариант, то это будет ему позволено. 'А если надо сделать так, чтобы данные можно было вводить только путем выбора из списка? Для разрешения таких проблем надо обратиться к параметрам поля. Если посмотрим в режиме конструктора на характеристики созданного нами поля, то увидим, что Access создал обычное текстовое поле, поскольку данные в списке были текстовые.
Глава 2 .... ,
Способ оплаты Наличными Наличными Предоплата по счету Наличными Предоплата по счету По векселем С oTcpi:i4
t
Рис. 2.15. Ilcue со списком
Но теперь задействована вкладка Подстановка, которую мы до сих пор оставляли без внимания. Она показана на рис. 2.16. С ее помощью легко разобраться, как создается поле подстановки. Например, если мы хотим запретить пользователю вводить любые данные, то должны установить опцию Ограничиться списком как Да. Параметры Тип элемента управления и Тип источника строк определяют разновидность поля подстановки: существует достаточно много вариантов. Для того чтобы правильно выбрать значения этих параметров, и надо было запускать мастер. Остальные свойства очевидны. Сам список значений находится в строке Источник строк, и вы можете редактировать его вручную, только соблюдайте правила синтаксиса: используйте кавычки и разделитель «точка с запятой». Мы определили в мастере, что список будет содержать одну колонку, и здесь параметр Число столбцов имеет значение 1. Только один столбец списка может служить источником данных для одного поля, и здесь, естественно, параметр Присоединенный столбец указывает на первый (и единственный в нашем примере) столбец списка. Остальные параметры относятся к форматированию списка. При желании вы можете создавать поля подстановки и без помощи мастера, вручную заполняя вкладку Подстановка. Любое поле можно усовершенствовать таким способом.
NB
Поле подстановок (и соответствующий мастер) можно использовать как для таблиц, так и для форм.
Вариант с созданием дополнительной таблицы в качестве источника данных более сложен, но интересен тем, что в таблице можно хранить любое число значений, а при необходимости их удобно редактировать обычным способом (как вручную, так и программно). Последовательность действий для этого варианта разбирается в примере базы данных, в разделе 4.4.
Таблицы
. Общие
Подстановка
Тип элемента управления Попе со списком Список значений Тип источника строк Источник строк "Наличными";'Предел л эта по сче-у";'Пэ вексел ПрИ'Юйдиненныг столбе. 1 1 Число столбаое Нет Заглавия столбцов Ширина столбцов 3,228см Числе строк списка 8 3j228см Ширина списка O'f .Eil-l-'-HTb-ill LI1I1CKUM
Нет
Рис. 2.16. Вкладка парамегров поля со списком
Создание масок ввода Выше мы познакомились с шаблонами для создания масок ввода. Существует большое количество вариантов масок, но для облегчения работы по их созданию применяют специальный мастер. Он используется только для текстовых полей и полей типа «Дата/время». Запускается мастер кнопкой, расположенной в строке Маска ввода. Его первое окно показано на рис. 2.17. Создание масок ввода Которая и; масок ввода обеспечивает НУЖНЕЙ вид данных?
Проверить работу выбранной маски можно Б поле "Прова". Для изменения списка масок ввода наймите кнопку "Список". Маска евоаа: Длинный формат времени Краткий формат даты Краткий форпат времени Средний фермат времени Сое дни и формат даты
Проба:
Вил. данных: 0:00;00 27.09.1969 00:00 12:00
12-Сен-20СМ
Рис. 2.17. Первый шаг мастера масок ввода
Например, для поля типа «Дата/время» можно выбрать один из готовых шаблонов, а с помощью кнопки Список можно сформировать даже несколько шаблонов для одного поля. Обратите внимание, что в образце для «среднего формата даты»
50
Главз2
название месяца написано с маленькой буквы (сен), а в строке Проба - с большой (Сен). Это определяется форматом маски, который можно отредактировать на втором шаге мастера: 00->L
NB
Надо заметить, что разделы встроенного справочника (которые открываются после нажатия клавиши F l j , посвященные шаблонам масок ввода, не очень удобны. Многие из этих разделов относятся к программированию на Visual Basic и содержат описания переменных для создания масок. Кроме того, эти разделы не всегда переводят на русский язык в русской версии Office. В общем, разобраться в них под силу только подготовленному специалисту. Мастер гораздо удобнее.
2.2. Режим таблицы «Режим таблицы» - это не только один из способов вывода таблицы на экран, точно так же называется инструмент для создания новой таблицы. Он называется Создание таблицы путем ввода данных. Выбрав его, мы получим доступ к заготовке таблицы, как показано на рис. 2.18. Программа еще не знает, что нам нужно, поэтому она создает абстрактную, но готовую к использованию таблицу. Совершенствуя ее. пользователь определяет необходимые свойства и заполняет ее информацией. Например, поля таблицы вначале имеют имена, данные по умолчанию (Поле1, Поле2 и т. д.), но вы можете присвоить полям новые имена, которые будут нести смысловую нагрузку. В данном примере, очевидно, полям можно присвоить имена: Автор, Серия, Издательство, Год, Аннотация. Тип полей будет определяться программой автоматически, по мере заполнения их данными. t Таблица!* : таблица
-т f_
• '• А.Азимов
ПолеЗ Избранное
i. Мир
•
Поле* 1989
Поле5 В сборник классика американской
Полеб
запись: [14 J
Рис. 2.18. Режим формирования структуры таблицы путем ввода ланных
Строку таблицы можно заполнить и при помощи копирования через буфер обмена. Для этого надо выполнить такую последовательность действий:
Таблицы
51
1. Открыть базу данных, содержащую образцовую запись. 2. Выделить мышью нужные поля в одной строке и скопировать данные в буфер обмена. 3. 4. 5. 6.
Открыть базу данных, в которой надо создать новую таблицу. Выбрать команду Создание таблицы путем ввода данных. Выделить в заготовке таблицы такое же количество полей в одной строке. Выполнить вставку из буфера.
После ввода данных и определения имен полей целесообразно закрыть окно таблицы, чтобы программа сохранила новый объект базы данных. Access выведет вопрос: «Сохранить изменения макета или структуры объекта?» На этом этапе таблице можно присвоить требуемое имя. Программа в этом случае еще выводит окно с сообщением: «Ключевые поля не заданы». Оно показано на рис. 2.19. Microsoft Office Access Ключевые пиля не заданы. Хотя наличие таких попей не является обязательным, рекомендуется их задать. Таблица должна иметь ключевое попе для установления связей с другими таблицами базы данных. Создать ключевое поче сейчас?
Рис. 2.19. Программа предлагает создать ключевое поле
Как известно, ключевые поля в таблицах следует создавать. Можно, конечно, придумать ситуацию, когда ключевое поле не потребуется. Если разработчик решил включить в состав своей базы данных инструкцию для пользователя и поместил ее в единственное поле типа Memo в одной записи таблицы (такой пример еще будет в нашей книге), то тут ключевое поле точно не нужно. Но это довольно редкий пример. Так что, скорее всего, ключевое поле потребуется. Если нажать кнопку Да в этом окне, то программа автоматически создаст поле счетчика с последовательной нумерацией строк и придаст ему статус ключевого. Обычно именно такие поля и требуются, потому что однозначно идентифицируют каждую запись таблицы и не требуют ручного ввода данных. Кроме того, с помощью такого поля легко отслеживать, сколько записей было введено в таблицу с момента ее создания, даже если часть записей уже удалена, Но если вам, скажем, потребуется поле счетчика со случайным присвоением кодов, то вы можете исправить это свойство в :>ежиме конструктора.
52
Глава 2
Если вы отвечаете Нет, то потом, опять же в режиме конструктора, вы сможете выбрать поле, которое будет ключевым, или создать новое поле, чтобы оно выполняло функции ключевого. Другой вариант «режима таблицы» - обычная работа с таблицей для ввода, редактирования и поиска данных. Забегая вперед, скажу, что в табличной форме могут функционировать также запросы и формы. Как правило, окно таблицы снабжается панелью навигации по записям (см. рис. 2.18). Символ «звездочка» в Access обозначает новую запись. Так, после нажатия кнопки с изображением черной стрелки и звездочки в конце таблицы создается новая запись, и курсор переходит на нее. В заголовке новой записи также присутствует символ «звездочка». Другие кнопки позволяют сдвигаться по записям вперед и назад, а также переходить к первой и последней записям. Окошечко с номером записи тоже можно использовать; если ввести в него номер записи, то указатель переместится на соответствующую запись. Сам указатель записи выглядит как черная стрелка в области выделения записи (слева от первого поля). В каждый момент времени пользователь может редактировать только одну запись. Во время работы с таблицей указатель «перепрыгивает» с записи на запись, в зависимости от того, на какой ячейке щелкнет мышью пользователь. Иногда пиктограмма указателя записи принимает вид карандаша.
NB
Не путайте номер записи и значение, записанное в поле счетчика. Это два независимых способа нумерации записей. Номера записей всегда начинаются с единицы и идут последовательно до конца таблицы. Если запись удаляется, программа автоматически перестраивает нумерацию записей. В поле счетчика числа не меняются. Значения номеров записей и чисел в поле счетчика могут совпадать только в одном случае: если счетчик имеет последовательную нумерацию и с момента создания таблицы не была удалена ни одна запись. Но это, разумеется, совершенно не обязательно.
На первый взгляд, данная структура похожа на электронную таблицу, например рабочий лист Excel, но это сходство только внешнее. Одна из немногих общих черт заключается в легкости, с которой в таблице Access и на рабочем листе Excel можно изменить ширину столбца или высоту строки. Достаточно поместить указатель мыши на линию разделения строк (или столбцов) в серой области выделения записи (или поля) и переместить его в нужном направлении, удерживая кнопку мыши нажатой. Кстати, эта возможность реализована не только в Access и Excel, но и в других
Таблицы
53
продуктах Microsoft, где выполняется работа с таблицами, а значки указателей мыши унифицированы. К режиму таблицы всегда можно будет вернуться, активизировав окно базы данных и нажав кнопку Открыть на вкладке Таблицы. Работая непосредственно со строками таблицы, можно выполнять не слишком много действий: добавлять и удалять записи, изменять высоту' строк и выполнять стандартные операции перемещения и копирования данных с использованием буфера обмена. Например, с его помощью можно переместить или скопировать одну или несколько строк в другую таблицу или даже в другое приложение. Намного более эффективно использование инструментов, которые Access выводит на экран, а также контекстных меню, связанных с элементами таблицы (см. рис. 2.20). Назначение большинства команд из контекстных меню ясно из названия. Только некоторые требуют пояснения. Выбрав команду Скрыть столбцы, вы уберете выбранные столбцы с экрана, а для того, чтобы вернуть их обратно, надо вызвать команду Отобразить столбцы из другого контекстного меню, которое связано с заголовком окна. Кроме того, последняя команда открывает список полей, в котором можно указать, какие поля должны быть видимы, а какие нет. Так что эта команда служит не только для «показа», полей, как подразумевает ее название, но и для их скрытия. Многие команды контекстных меню продублированы в главном меню. Например, две вышеупомянутые команды можно найти в меню Формат. Команда Закрепить столбцы не только «приморозит» (в английской версии эта команда называется Freeze Columns) выбранный столбец к экрану так, что при прокрутке он всегда будет виден, но и переместит его в левую сторону таблицы. Команда Столбец подстановок запускает уже известный нам мастер подстановок. Команда Шрифт обеспечивает доступ к обычной для Windows-приложений процедуре выбора шрифтов, их начертания, размера и цвета. Изменить, параметры шрифта можно сразу для всей таблицы. Обратите внимание, как распределены команды по контекстным меню. Команды фильтрации находятся в меню ячейки таблицы и в меню для всей таблицы. Команды сортировки находятся в разных меню, связанных как с ячейкой, так и со столбцом. Команды для работы с буфером обмена тоже имеются в нескольких меню. Команды, расположенные в разных меню, работают по-разному, так как они применяются к принципиально разным объектам. Существует два вида сортировки: «по возрастанию» и «по убыванию);. Соответствующие команды производят сортировку всей таблицы по значениям выбранного поля, независимо от того, какой фрагмент столбца выделен.
Сортировка по убыванию используется достаточно часто. В первую очередь это связано с датами. Для того чтобы видеть записи (или документы), созданные последними, нужна сортировка по дате создания в обратном порядке. Так, например, сортируется список писем в почтовых программах. В Access можно также применять обратную сортировку к полю счетчика с последовательной нумерацией, чтобы увидеть записи, созданные последними. В этом случае они попадут в верхнюю часть таблицы и номера записей для этих строк будут минимальными. Естественно, что пользователь увидит их в первую очередь.
Таблицы
N23
55
С точки зрения проектировщика баз-данных существует более продвинутый способ сортировки — с помощью запросов. В этом случае процесс сортировки скрывается от пользователей.
Проектируя таблицы, обязательно предусматривайте возможность восстановления первоначального порядка записей. Тут опять может пригодиться поле счетчика с последовательной нумерацией. Сортировку очень легко выполнить - достаточно нажать соответствующую кнопку, но отменить действие команд сортировки невозможно. Несколько последовательно выполненных операций сортировки разных полей могут безнадежно перепутать записи в таблице. Команда Добавить объект доступна только в том случае, когда поле таблицы имеет тип «Поле объекта OLE». Если в таблице имеется поле типа «Гиперссылка», пункт Гиперссылка позволит вставлять в базу данных ссылки на самые различные документы и файлы, Для других полей эта команда не работает.
2.3. Мастер таблиц Еще одним способом создания таблицы является использование заготовок, которые доступны в мастере таблиц. Первый шаг этого мастера показан на рис. 2.21. Все заготовки разбиты на две большие группы: для делового и для личного применения. Из существующих полей надо отобрать те, которые должны входить в новую таблицу. Если предлагаемое поле не в полной мере соответствует предъявляемым требованиям, то его свойства можно будет изменить позднее,, в режиме конструктора. Access предлагает здесь много вариантов, но я думаю, что они интересны в первую очередь для изучения. Ниоткуда не следует, что с помощью этого мастера можно будет построить именно такую таблицу, какая вам нужна. Но для понимания того, какие бывают поля, этот мастер достаточно интересен. Вот, например, поле СотовыйТелефон. Мастер делает его текстовым, длиной 30 символов. Действительно, номера сотовых телефонов бывают достаточно длинные, а формат разный. Поэтому нужно универсальное поле. Если попытаться создать маску для «облегчения» труда оператора, то. скорее всего, операторы будут жаловаться, что какие-то номера,не смогут ввести. Имя поля не имеет пробелов, но для поля предусмотрена подпись с пробелом: «Сотовый телефон».
Глава 2
Создание таблиц Выберите образцы таблиц для применения при создании собственней таблицы. Выберите категорию и образец таблицы, а затеи нужные образцы полей. Допускается выбор попей из нескольких таблиц. Если заранее неясно, будет ли использоваться пог.е 1 или нет, лучше добавить это поле е таблиц '. Его несложно будет удалить позднее,
0Деловые iQ Личные Образцы таблиц; Контакты Клиенты Сотрудники Товары Заказы
Образцы полей:
Поля новей таблицы:
Город Регион Область ПочтовыйИндекс Страна/регион ДомашнийТелефон Сотовый Телефон Ллпл пнит Р льны и Т*лв
Рис. 2.21. Мастер таблиц
На втором шаге мастера можно изменить имя таблицы, присвоенное по умолчанию, и определить ключевое поле в новой таблице. Можно выбрать режим автоматического определения ключа. Если в новую таблицу включено поле-счетчик, оно автоматически выбирается программой в качестве ключевого. Если в список полей не было добавлено поле-счетчик, то программа создает еще одно поле в таблице, для того чтобы использовать его в качестве ключевого. Тип создаваемого поля счетчик, а его имя программа изобретает сама. Обычно она создает имя нового поля как комбинацию слова «код» и имени таблицы, удалив все пробелы, Можно выбрать вариант «Пользователь определяет ключ самостоятельно» и определить ключевое поле в отдельном окне диалога. Программа предложит выбрать одно из имеющихся в таблице полей. Необходимо также установить переключатель в этом окне, который определяет, какие данные могут находиться в этом поле. На третьем шаге мастера таблиц разработчику предоставляется возможность связать ее с другими таблицами базы данных. Список существующих в базе данных таблиц выводится в окне, и его стоит просмотреть перед тем, как нажать кнопку Далее. Во вновь создаваемой таблице одно из полей является ключевым. На этом шаге программа анализирует ключевые поля всех таблиц базы данных и если находит среди них поля с такими же именами, то предлагает связать эти таблицы с новой. Если пользователь ничего сам не изменит, то эти связи будут определены автоматически. Это относится, разумеется, к другим таблицам, созданным с помощью мастера, потому что в противном случае вероятность совпа-
Таблицы
57
дения имен невелика. Если же подходящих таблиц не найдено, то перед именами всех таблиц в списке будет стоять «не связана». Связь может определить и сам разработчик, если выберет таблицу в списке и воспользуется кнопкой Связи. На последнем шаге мастера таблиц можно определить режим, который будет активизирован после завершения работы мастера. Опция «Изменить структуру таблицы» означает переход в режим конструктора для новой таблицы. Выберите ее, если необходимо доделать то. что не смог выполнить мастер: ввести новые поля, придать им необходимые свойства, переопределить ключ, создать описания полей и т. д. Установка переключателя в положение «Ввести данные непосредственно в таблицу» приведет к тому, что таблица будет открыта для просмотра и редактирования. Обычно в этот режим переходят, нажимая кнопку Открыть в окне базы данных. Позиция переключателя «Ввести данные в таблицу с помощью формы, создаваемой мастером» говорит сама за себя: мастер создаст фирму для новой таблицы. Вид формы будет очень простым - все поля выстроятся одно под другим. При необходимости форму можно будет сохранить, и ее значок появится на своем обычном месте — на вкладке Формы.
2.4. Связывание таблиц Чаще всего причиной размещения данных в двух и более таблицах в одной БД является дублирование данных (наличие в таблице повторяющихся фрагментов). Для того чтобы сэкономить место на диске и в памяти, были разработаны принципы нормализации, которые позволили исключить дублирование. Большинство пользователей, работающих с базой данных на своем компьютере (размещение базы на сервере - отдельная тема), не сталкивается с необходимостью экономии места на диске, и нормализация выполняется ради соблюдения другого принципа: данные должны быть организованы таким образом, чтобы в случае их редактирования каждое исправление или дополнение делалось только в одном месте базы данных. Третья важная причина разнесения информации по таблицам - необходимость группировки данных по их содержанию. Каждая таблица может отвечать определенной тематике. Четвертая причина - принцип модульности, который предполагает, что база данных должна быть разбита на несколько унифицированных блоков, которые можно модернизировать и заменять по отдельности, а таблицы, подготовленные для одной базы данных, можно было бы использовать и в других.
-
Глава 2
Схема данных Для связывания таблиц используется схема данных, которая запускается одноименной кнопкой, расположенной на главной панели инструментов.' На схеме каждая таблица представлена панелью со списком полей. Этого достаточно, чтобы создать нужную связь. Для примера рассмотрим, как организованы связи между таблицами в базе данных «Борей» (рис. 2.22).
L^feS
,„..,;.-
'•;-. Схема данных Поставщики , :
Товары 1
> Название С iff сщатьсяК : Дол*.нос"ь [!Ддрес '. Горел ( .Область | Индекс j Страна I Телефон 1 Факс Дг !•• .3 шня я ; границ а
КодТсвврэ V ю Марка ~ КодПостаещика "• |КодТила , Единицам змеремия ^Ценз ^НаСкладе / Ожидается ! Минина льныйЗапа с I ПсставкиПрекрашены |
1
Типы
1
КодТиги .Категория 'Описание Изображение
11
Заказано ™"\оо КодЗрказа КодТовара
л
.
л
Заказы
оо
————^— '£пяЗ»(жа ^ КддКпиемтв
Клиенты
— КодКтснта На5Е аннг Обращать^: яК Должность 'ДатаНаэн ачения Адрес Датаисполнения „ Горел .Доставка Область Стоимоств Доставки Индекс -КазбаниеПолучателя Страна .Ддрес Получателя Телефон ]ГородПолучателв ;<Ьакс юбластьПолучателя .ИндексПопучателя {СтранаПолучателя Доставка ^
^ |КодСотрудпика / :датаРа смещения
Количество v / Сотрудники / . ! / 1 КодСотрудаи *• Фамипия Имя Должность Обращение ДатаРождени ДатаКаймл Адрес Город 1"Йлапь Индекс Страна
•* КодДосганин | Название :Теле'1)оп
. -.„=,,, LJUii^ftn
Добавочный Фотография
v
V
|<
А
Рис. 2.22. Схема данных базы «Борей»
Основу этой базы данных составляют две таблицы: Товары и Заказы. Действительно, коммерческая фирма оперирует заказами: менеджер формирует заказ, за него получают оплату, заказ отгружается покупателю. Поэтому в таблице находятся все характеристики заказа, а названия полей говорят сами за себя. В базе данных ведется также учет клиентов. Поскольку в таблице Клиенты для каждого клиента отведена одна запись, то эта таблица связана с таблицей Заказы отношением типа «один-ко-многим» (одному клиенту соответствуют несколько заказов).
Таблицы
59
«Многие» в данном случае обозначаются знаком бесконечности. Обратите внимание, что такая же связь существует и с таблицей Доставка, но тут ее назначение другое: она необходима для создания поля подстановки Доставка в таблице Заказы. Пример по созданию такого поля есть в главе 4. Таблица Доставка - вспомогательная. Она содержит мало записей и может не изменяться в процессе эксплуатации базы данных. О том. как связана таблица Заказы с таблицей Заказано, я рассказывал в главе 1 (см. рис. 1.2). Здесь же мы видим только схематическое обозначение связи: одному заказу может соответствовать несколько товаров. Данные о сотрудниках фирмы собраны в отдельной таблице. Поскольку один менеджер обрабатывает много заказов, с таблицей Заказы установлена связь «один-ко-многим». Другим центром формирования данных является таблица Товары. Обычно в подобной таблице хранится информация о товарах, которые есть на складе. Поскольку товар может временно отсутствовать, в таблице должно быть предусмотрено поле для отображения этого факта. В данном примере мы видим также поле МинимальныйЗапас. Его назначение очевидно. Записи о поставщиках не должны повторяться, поэтому для хранения информации о поставщиках создана отдельная таблица Поставщики. Она тоже использует связь «один-ко-многим» (один поставщик может продать несколько товаров). В реальной жизни все, конечно, сложнее: одни и те же товары могут различаться по цене, приходить от разных поставщиков, иметь разные сроки хранения и т. д. Все это должно находить свое отражение в дополнительных полях таблиц. Таблица Типы хранит информацию о категориях товаров. Это тоже вспомогательная таблица, которая нужна для создания поля подстановки. В таблице Товары тип (фрукты, мясо, напитки и т.д.) закодирован в числовой форме, а в таблице Типы помещены словесные расшифровки. На первый взгляд может показаться странным, почему все товары собраны в одной таблице (наверняка ими занимаются разные менеджеры), но на самом деле именно так и надо: при формировании заказа покупатель может затребовать любой набор продуктов, и соответствующие позиции удобнее выбирать из одной таблицы. К тому же покупатель наверняка должен получить определенные документы (накладную, счет-фактуру), и их тоже легче создавать как формы^ сделанные на основе одной таблицы. Зато, если надо отобрать товары одного типа (например, рыбопродукты;), это несложно сделать с помощью запроса или фильтра. В базах данных, создание которых рассматривается в этой книге, тоже используется связывание таблиц. Практические-примеры есть в главах 4 и 7,
Глава 2
Формирование связи Итак, для того чтобы связать две таблицы, нужно в первую очередь предусмотреть поля в таблицах, значения которых пригодны для связи. Чаще всего это поля счетчиков или числовые поля. Необходимо также точно знать, могут ли быть в поле повторяющиеся значения. Если есть - значит «многие», если нетзначит «один» (подробно варианты связей разбираются ниже). После этого надо включить таблицы в схему данных; для этого используется команда Добавить таблицу. Установка связи производится перетаскиванием имени одного поля на имя другого. Указатель мыши в момент завершения перетаскивания должен принять вид прямоугольника. После этого программа открывает окно, показанное на рис. 2.23. Здесь мы видим характеристики одной связи базы «Борей». Удобно, когда в обеих таблицах связанные поля имеют одинаковые имена. Зато другие характеристики полей могут не совпадать. В данном случае поле КодСотрудника в таблице Сотрудники является ключевым, и каждое его значение уникально. А поле с таким же именем в таблице Заказы - обычное числовое, и в нем может быть много одинаковых значений. Так создается связь «один-ко-многим». •вменение связен Табпица/гапрос: Сотрудники
Сб«анная таблица/запрос: Заказы
v
i i каскадное обновление :вязамны.< попей I i каскадное удаление связанных записей
Рис. 2.23. Окно с параметрами связи
Второе окно, содержащее параметры связи, показано на рис. 2.24. Оно открывается кнопкой Объединение. Я рекомендую всегда проверять, какой из трех вариантов объединения выбран, и в случае необходимости использовать другой вариант. Здесь, по сути, решается вопрос, как поступить с записями, для которых не нашлось адекватного значения поля в другой таблице: делать их доступными или нет. Выбор варианта определяется только по смыслу. В нашем примере задействовано самое жесткое из всех условий.
С ) 2. Объединение ВСЕХ записей из "Сотрудники" и только тех записей из "Заказы", в которых связанные лоля совпадают.
I О Э..
Объединение ВСЕХ записей из "Заказы" и только тех записей из "Сотрудники", в которых связанные поля совпадают.
Рис. 2.24. Дополнительное окно позволяет точно выбрать параметры сиязи
Связь «один-ко-многим» Об этой связи было рассказано достаточно много, и добавить почти нечего. Подчеркну лишь, что это самый распространенный вид связи. Нельзя сказать, что какая-то таблица в данном случае является главной, а другая подчиненной: выборка данных может идти в обоих направлениях. В предыдущем примере можно, задав код сотрудника, получить информацию обо всех заказах, с которыми он имел дело; и наоборот, выбрав заказ, можно определить имя менеджера.
Связь «один-к-одному» Эта связь подразумевает, что в обеих таблицах в связанных полях имеются только уникальные записи. На первый взгляд это кажется абсурдным: не шроще ли было создать одну таблицу вместо двух? Действительно, в некоторых случаях разницы нет. Но давайте предположим обратное. Допустим, у нас есть таблица. состоящая из десяти полей, и мы хотим разделить ее на две. Пять полей в одну таблицу, пять в другую. В этом случае, чтобы сохранить целостность записей, таблицы надо связать по принципу «один-к-одному». С точки зрения быстродействия и экономии места мы вряд ли что-нибудь выиграем. Даже наоборот,, придется создавать дополнительные кодовые поля.. Зато теперь мы можем при необходимости заменять эти таблицы другими независимо друг от другл. Так обеспечивается принцип модульности данных: каждая таблица хранит данные из
62
Глава2
определенной предметной области, и в этом случае таблицы легче редактировать. Связь «один-к-одному» можно представить и наглядно. Допустим, у вас есть лист бумаги, на котором изображена большая таблица. Его можно разрезать по вертикали так, чтобы часть колонок попала на одну половину листа, а часть - на другую. Вы можете использовать половинки листа по отдельности. С ними могут работать одновременно два человека. Но в любой момент две части листа можно соединить, и таблица вновь станет целой.
Связь «многие-ко-многим» Необходимость создания такой связи возникает, когда в обеих таблицах кодовые поля содержат повторяющиеся значения. Access не создает связи такого типа, и ее приходится делать, используя две связи «один-ко-многим» и вспомогательную таблицу, в которой есть два кодовых поля и собраны только уникальные значения кодовых полей основных таблиц. Пример создания такой связи подробно рассмотрен в главе 7.
Глава 3 Пример простейшей базы данных Рассмотрим в качестве примера базу данных, состоящую из одной таблицы. Такую базу данных нетрудно создать за полчаса и сравнительно нетрудно заполнить данными. Нам не придется определять связи между таблицами, создавать сложные формы и заниматься программированием. Зато мы сможем разобраться, какие инструменты предлагает Access для работы с базой данных.
Сформулируем задачу следующим образом: создать несложную базу данных для хранения списка организаций и последующей связи с этими организациями по телефону. Такая задача часто возникает в коммерции - сообщить о. новых товарах, предложить услуги и т. д. Создать список организаций можно в разных программах: в Word, в Excel, в Access. Все эти способы будут обладать своими преимуществами и недостатками. Нам важно, что можно получить в этом плане от Access. Для того чтобы не усложнять работу оператора, целесообразно сосредоточить все данные в одной таблице. Попробуем определить, какие поля потребуются. Представим себе, как оператор снимает трубку телефона и набирает номер: «Алло, это фирма Тип-Ton? Мы хотим предложить вам канцелярские товары». Ответы могут быть самые разные: «Нам это не интересно», «Позвоните Ивану Ивановичу по телефону 11-22-33», «Позвоните через месяц», «Отправьте прайс-лист по факсу» и т. д, Оператор должен быстро записать результат и звонить в следующую организацию. А если телефон занят? Тогда надо переходить к следующему, а к этому вернуться чуть позже. При сборе телефонов надо предусмотреть другие особенности: по понятным причинам один и тот же телефон не должен попадать в таблицу дважды. Создадим новый файл базы данных и назовем его organizacii.mdb. Создадим в нем таблицу Организации.
64
Глава 3
3.2. Создание таблицы Таблицу удобнее создавать в режиме конструктора. В ней можно преду смотреть такие поля: Формат поля
Имя поля
st
Счетчик с последовагельной нумерацией, ключ
Телефон
Текстовое, 30 символов, совпадения не допускаются
ОК
Логическое
Название
Текстовое. 50 символов, совпадения не допускаются, верхний регистр
ФИО
Текстовое, 50 символов
Результат
Текстовое, 30 символов
Адрес
Текстовое, 50 символов
Примечание
MEMO
Поле st представляет собой счетчик с последовательной нумерацией. Мы сделаем это поле ключевым, хотя на эту роль в нашем примере подошли бы и другие поля: Телефон или Название. . Для хранения номеров телефонов используется текстовое поле. Мы уже убедились в предыдущей главе, что тридцати символов достаточно для хранения даже номеров сотовых телефонов. Это поле должно быть определено как индексированное, потому что требуется запретить повторы значений. Незачем ставить оператора в неловкое положение, вынуждая его звонить в одну и ту же организацию по нескольку раз. Рядом следует поместить поле с «галочками». После звонка можно будет отметить эту запись. «Галочки» позволят вернуться к тем номерам, где было занято. Имя ОК вполне подойдет для такого поля. Имя не должно быть длинным, потому что само узкое, а место на экране надо экономить. После набора номера следует вопрос: «Это фирма такая-то?...» Поэтому следующим полем будет название организации. Видимо, пятидесяти символов будет достаточно. Я предлагаю сделать так: проиндексировать это поле, запретив совпадения. Бывает, что несколько организаций имеют одинаковые названия, но в базе данных их все равно надо как-то различать (хотя бы по номерам). Кроме того, для облегчения работы можно сделать так, что все символы будут автоматически переводиться в верхний регистр. Для этого надо в строке Формат ноля записать соответствующий символ маски. Вкладка параметров поля Название показана на рис. 3.1.
Пример простейшей базы данных .г
Организации : таблн1V»
.
st
И(1Я ПОЛЯ
-
>
Телефон ОК he зван» 16
ФИО
- Результат
Адрес Примечание
Ра;иев поля Форпат поля Маска ввоаз Подписв Значение по умолчанию Условие нэ значение Сообщение об ошибке Обязательное пале { П/стые строки Индексированное поле Сжатие ю никол 1 Режим IME ;• Режим предложений 1МЁ Смарт-теги ;• •: ,
,"_,.'.
Тип данных Счетчик Текстовый Логический Текстовый Текстовый Текстовый Текстовый Поле MEMO
1
Описание
-JQii
1 л
V
50 >
Нет
Нет Да (Совпадения не л опус каюте: а)
Имя пс.гз может состоять из 1,4 знаков с учет он пробелов Дня справки г ю шле-нам полейнажмите
клавир. F1.
Нет Нет контроля rtet
~~~=™.::
__
Рис. 3.1. Структура таблицы Организации
Следующим, по логике, должно идти поле с фамилией, именем и отчеством человека, которого следует позвать к телефону. Длина этого поля должна быть достаточно большой (50 символов). Каких-либо дополнительных свойств давать полю не обязательно. После этого следует предусмотреть поле, в которое оператор запишет результат переговоров. Оно тоже должно быть достаточно длинным. Поле Адрес создается на тот случай, если потребуется сохранить адрес организации. Я рекомендую во всех случаях, когда дело касается каких-либо координат (почтовых адресов, адресов сайтов, адресов электронной почты, номеров факсов и т. д.), создавать для них отдельные поля. Это как раз тот случай, когда создание базы данных полностью оправдано. На всякий случай предусмотрим и поле большого объема (типа MEMO). Не будем оригинальными и назовем его Примечание. На этом создание таблицы заканчивается, можно переключаться в режим просмотра данных (команда Режим таблицы) и заполнять таблицу данными.
3-870
66
Глава 3
3.3. Ввод данных в таблицу Ввод данных - достаточно простой процесс, но существуют некоторые особенности, которые можно отразить в руководстве пользователя, если такое руководство будет создаваться. Например, если при вводе в поле Телефон данные будут повторены, то программа выведет предупреждающее сообщение (рис. 3.2). Microsoft Office Access Изменения не были успешно внесены из-за повторяющихся значений в индексе, ключевых поля/ или с&язя*. Измените данные в попе или паля/., содержащие повторяющиеся значения, удалите индекс или переопределите его, чтобы разрешить псвтсряющиесй значения, и повторите попытку.
Рис. 3.2. Предупреждение о недопустимости ввода повторяющихся значений
Оператор, который вводит данные, должен знать, что в этом случае надо закрыть это окно и сразу исправить значение поля. В противном случае Access не отступится и будет «бомбардировать» пользователя предупреждающими сообщениями. То, что для поля Название был предусмотрен специальный формат, отражается на работе таблицы. Дело в том, что формат влияет только на визуальное представление данных, не затрагивая самих данных. Так, в нашем случае не будет выполняться физическое переформатирование данных. Перевод всех букв в верхний регистр будет выполняться только для вывода на экран. Когда оператор устанавливает курсор в одной из ячеек поля Название, буквы предстают в том формате, как были введены. К таблице можно применить команду Формат => Шрифт. Для всей таблицы можно изменить шрифт, его размер и цвет. На функционировании базы данных это никак не сказывается. Для вставки новой записи служит соответствующая кнопка, команда в главном меню или комбинация клавиш Ctrl и «плюс». Новая запись всегда вставляется в конец таблицы. Но если пользователь видит последнюю строку таблицы, то ему нет необходимости создавать новую запись, так как это делается автоматически. Надо просто начать ввод новых данных. Информация в таблице сохраняется программой автоматически, хотя в Access существует специальная кнопка и команда Сохранить запись. Если оператор хочет ненадолго отойти от рабочего места, достаточно щелкнуть кнопку Сохранить и свернуть (или закрыть) открытую таблицу.
Пример простейшей базы данных
67
Для удаления записи существует специальная команда. Можно также удалить несколько смежных записей, если выделить их одновременно. Для -этого надо провести мышью по областям выделения записей или щелкнуть первую запись из числа удаляемых, а потом, при нажатой клавише Shift, последнюю. В отличие от многих программ, Access не поддерживает выделение несмежных записей при помощи клавиши Ctrl. Для сравнения: Excel позволяет выделять несмежные строки таблицы, если щелкать на их заголовках, удерживая клавишу Ctrl. Перед удалением записей Access выводит предупреждающее сообщение, показанное на рис. 3.3. Обратите внимание, что отменить удаление записей невозможно. Microsoft Office Access Предпринимается попытка удалить следующее число записей: 1. t \ Дпя удаления записей нажмите кнопку "Да". Отмена изменений будет '"* 'I невозможна, Удалить записи'
Рис. 3.3. Окно для разрешения удаления записей
Когда объем вводимых данных не очень большой, для работы с таблицей достаточно мыши. Но когда текста много, сэкономить время позволяют «горячие клавиши». Иногда проще держать в памяти нужную комбинацию и испольювать ее, чем выполнять лишние движения мышью. Кроме того, это позволяет работать двумя руками: левая нажимает клавиши, правая на мыши. Для перемещения внутри таблицы пригодны такие «горячие клавиши»: Tab (ShifHTab) - переход и выделение следующего (предыдущего) поля; Home (Ctrl+Home) — перемещение в начало поля; End (Ctrl+End) - перемещение в конец поля; F5 - переход в поле номера записи. Для редактирования данных в ячейках таблицы пригодны такие сочетания клавиш: Shift+F2 - открытие окна для ввода данных в поле (если поле целиком Fie видно на экране); С1г1+«стрелка влево» и С1т1+«стрелка вправо» - переход на одно слово влево и вправо соответственно; Shift+Home - выделение текста от позиции курсора до начала поля;
68
Глава 3 Shifb-End - выделение текста от позиции курсора до конца поля; Ctrl+C - копирование выделенного фрагмента в буфер обмена; Ctrl-X - удаление выделенного фрагмента в буфер обмена; Ctrl-i-V - вставка содержимого буфера обмена в позицию курсора; Backspace - удаление выделенного фрагмента или символа слева от позиции курсора; Delete - удаление выделенного фрагмента или символа справа от позиции курсора. Отмена выполненных операций производится следующим образом: Ctrl+Z - отмена последней операции; Esc - отмена изменения текущего поля.
Если выделена часть данных, можно использовать следующие комбинации клавиш: 5Ый+«кдавиша со стрелкой» - смещение границы выделения; Ctrl+Shift+кстрелка влево» - выделение или снятие выделения с одного слова слева; Ctrl+Shift+кстрелка вправо» - выделение или снятие выделения с одного слова справа. Клавиша F2 используется для выделения поля и снятия выделения. Если поле выделено, то одна из клавиш со стрелками позволяет переместиться на соседнее поле и выделить его. Комбинации клавиш Ctrl+A (Ф) или Ctrl+Shift+пробел позволяют выделить всю таблицу. Клавиша F8 позволяет переключиться в так называемый режим выделения. В этом случае выбор выделенных ячеек осуществляется с помощью клавиш со стрелками. Так удобно выбирать прямоугольные блоки ячеек. Отмена режима выделения осуществляется при помощи клавиши Esc. Для смещения записей «на один экран» вниз или вверх используются клавиши Page Down или Page Up соответственно. Эти функциональные клавиши работают так во всех программах. Но в Access их можно использовать вместе с клавишей Ctrl, если таблица достаточно широкая и не помещается на экране. Комбинации клавиш Ctrl+Page Down и Ctrl+Page Up позволяют сдвигать таблицу «на один экран» вправо и влево соответственно.
Пример простейшей базы данных
69
Для управления размерами окна используется комбинация клавиш CtrI-rF8. В этом случае границы окна можно передвигать с помощью клавиш со стрелками. Для выхода из этого режима служит клавиша Esc. Есть несколько полезных команд для ввода новых данных. Единственное неудобство заключается в том, что должен быть включен английский регистр; С1т1+«точка с запятой» - вставка текущей даты; Ctrl+Shift+«T04Ka с запятой» - вставка текущего времени; Ctrl+Alt+пробел - вставка в поле значения по умолчанию; Ctrl+аапостроф» - вставка в ячейку значения этого поля в предыдущей записи. Могут пригодиться и такие команды: Ctrl+нплюс» - добавление новой записи; СЧгНчшинус» - удаление текущей записи; Shift+Enter - сохранение изменений текущей записи; Пробел - переключение состояния флажка или переключателя: Ctrl+Enter - вставка новой строки; F9 - пересчет вычисляемых полей в активном окне. Если в процессе работы в макет таблицы были внесены изменения (например, изменена ширина столбца), то при закрытии таблицы программа выводит на экран сообщение с предложением сохранить изменения макета (рис. 3.4). -
,<}
'
. ,*.
ч
-
..
, •
-ъ • ",;
'-"•*;..-
•*.*.-.
-•--'.....'
—^
..
•£-•
Microsoft Office Access
Г Г" Т\
Сохранить изменения макета или структуры объекта "таблицы 'Организации'"?
Рис. 3.4. Окно для сохранения макета таблицы
3.4. Быстрое создание формы Пример готовой таблицы показан на рис. 3.5. Поскольку в ней имеются довольно длинные текстовые поля и поле MEMO, желательно создать форму. Мы сделаем это самым простым способом - при помощи мастера - и выберем параметры по умолчанию-
] ТИП-ТОП 0 БУТИК "SECOND HAND" . D СЕВЕРНАЯ БИРЖА LJ РУССКОЕ ДЕЛО D ОКСПРЕСС ДИАГНОЗ D РОСБУМТРАНСЛЕС D ФЕМИДА-СЕРВИС D KATYA & KOL080K D СКУЧНИСТЫ ] КРУТЫЕ ИНТЕРНЕТЧИКИ C1 КАРАСИК
14
П ЕЕЕ
15 20 21 22 23
D D D D П
СМИТ И ИВАНОВ ШАРИКОВ И КОМПАНИЯ КМЫБ ХАХАНЬКО АРЕНДА
^ь: ОЩ1П .... Л^ЖШ^-^ .
Результат^J^-i ЕСТЬ Отослать факс ДУМАЮТ НЕ ХОТЯТ см примечание НЕ ХОТЯТ НЕ ХОТЯТ ЕСТЬ СКУЧАЮТ прайс no e-mail это сами продают ЕСТЬ ДУМАЮТ
звонить 1В мая
_£J_
i
;
>
Рис. 3.5. Таблица базы данных (указатель мыши в виде крестика позволяет выделить ячейку)
На вкладке Формы выберем команду Создание формы при помощи мастера. На первом шаге (рис. 3.6} надо выбрать все поля с помощью кнопки с двойной стрелкой. Даже если какое-нибудь поле окажется ненужным, его нетрудно будет удалить. Создание форм Рыберите поля для формы, Допускается выбор нескольких таблиц или запросов, Таблицы к запросы Таблица: Организации Доступные поля:
дачные по ля;
шяш Телефон ОК
Название ФИО
Результат Адрес Примечание
Рис. 3.6. Первый шаг мастера форм
Пример простейшей базы данных
71
Второй шаг мастера - самый ответственный - позволяет выбрать вид формы (рис. 3.7). В нашем случае целесообразно использовать вариант «выровненный». В этом случае поля будут размещены на поле формы в соответствии с их реальн ы м и размерами. Это удобно как для просмотра, так и для ввода данныч, но мы увидим только одну запись. Создание форм Выберите энешпий вид ф
Рис. 3.7. Второй шаг мастера форм
Теперь можно нажать кнопку Готово. Последующие шаги мастера мы не будем использовать, потому что ничего принципиально важного они не содержат. Программа создаст форму с именем организации, потому что так называется исходная таблица. Форма изображена на рис. 3.8. Как видим, работать с полем MEMO в такой форме удобнее. Если же размеры полей не соответствуют требуемым, форму легко доработать в режиме конструктора. Организации Т елбФон 111-22-33 Результат
ФИО
1
ОК Назвали*
В тип-топ
Дцрес
ЕСТЬ Примечание
1 Запись: QT^
\
1 fTjfTQ^l
Рис. 3.8. Готовая форма
ra зг
72
Глава 3
3.5. Работа с базой данных Работать можно как с исходной таблицей, так и с формой. Конечно, с формой работать удобнее. На панели инструментов имеется кнопка-список Вид, которая позволяет при необходимости выполнить переключение в режим таблицы - получается такая же таблица, как и была в начале. В любом случае существует ряд инструментов, которые можно использовать пользователю.
Команда Автонабор Если в базу данных внесены телефонные номера, а сама база предназначена для обзвона организаций, то весьма полезной может оказаться команда для автоматического набора номера. Для того чтобы воспользоваться этой возможностью, компьютер должен быть оборудован модемом, подключенным к телефонной линии. Если модем имеет голосовые функции (voice modem), то к нему можно подключить гарнитуру (наушники с микрофоном), чтобы оператор мог работать комфортно. Это совсем несложно, и рабочее место можно организовать не хуже, чем на телефонных или пейджинговых станциях. Для того чтобы программа набрала номер, достаточно выделить номер в ячейке таблицы и нажать кнопку Автонабор. Access выведет окно, изображенное на рис. 3.9. В этом окне надо нажать кнопку ОК. Обратите внимание на кнопку Настройка. Она потребуется системному администратору, чтобы настроить параметры набора номера. После этого можно начинать работу, ради которой создавалась база данных: «Алло, это фирма такая-то?...» Автонабор
Рис. 3.9. Окно для набора телефонного номера
Сортировка Для выполнения сортировки существуют две команды: Сортировка по возрастанию и Сортировка по убыванию. Когда надо найти название фирмы, а в таблице сотни или тысячи записей, то проще отсортировать названия и искать среди тех, что начинаются на одну букву. Сортировка облегчает поиск данных
Пример простейшей базы данных
73
в таблицах, а также бывает полезной при печати. Перед тем как их использовать, необходимо установить курсор на соответствующее поле таблицы или формы. Сортировке можно подвергать текстовые, числовые поля и поля «Дата/время». В отличие от других программ (Excel), в таблице меняются местами только строки целиком. Это не позволяет испортить данные в таблице, отсортировав только ее часть. При закрытии базы данных программа автоматически запоминает новый порядок следования записей. Для восстановления исходного порядка строк (записей) необходимо выполнить сортировку по возрастанию поля счетчика с последовательной нумерацией.
Использование фильтров Фильтр - это способ поиска и отбора необходимых записей. Существует несколько разновидностей фильтров. 1. Фильтр «по выделенному». 2. Обычный фильтр (или поле «Фильтр для»). 3. Расширенный фильтр. Как уже упоминалось, контекстные меню, связанные с заголовком окиа и с ячейками таблицы, имеют несколько команд для выполнения фильтрации данных в таблице (рис. 2.20). Первая из них - Фильтр по выделенному - обеспечивает запуск самого простого фильтра, который только можно вообразить. Критерием фильтрации служит одна или несколько выделенных ячеек в таблице или запросе. Или просто та ячейка, в которой находится курсор. Или только одно слово в ячейке. Представим себе, к примеру, что оператору надо найти фирму. Он помнит, что в ее названии присутствует слово «Media», но как точно фирма называется - <• Media Entertainment», «Media International», «Integrated Media» или как-то еще, - оператор не помнит. В этом случае самое разумное - создать новую запись и набрать в соответствующем поле слово «Media», выделить его и применить команду Фильтр по выделенному. Если в таблице будут записи, содержащие искомое слово, то только они останутся доступными, и нужную запись нетрудно будет найти. Для отключения фильтра используется команда (кнопка) Удалить фильтр.
Глава 3 Фильтрацию можно осуществлять и по блоку выделенных ячеек. При этом он не обязательно должен находиться в пределах одного поля, но может включать несколько смежных полей - в этом случае фильтрация будет проводиться к соответствии со значениями этих полей. Необходимо только, чтобы типы данных в полях совпадали. Команда Исключить выделенное также обеспечивает фильтрацию записей, но в данном случае критерий фильтрации обратный - скрываются записи, значения полей которых совпадают со значениями выделенных полей (ячеек). Команда Удалить фильтр не удаляет сам использованный критерий отбора из памяти, как можно подумать, а только отменяет действие фильтра, то есть все записи становятся доступными. Параметры фильтрации сохраняются, и снова включить режим фильтрации можно командой Применить фильтр. На панели инструментов по умолчанию и в соответствующих режимах выводится кнопка, которая меняет свое имя в зависимости от ситуации: «Применение фильтра» или «Удалить фильтр». Команда Изменить фильтр позволяет отредактировать условие отбора записей в окне обычного фильтра. По этой команде открывается окно, в котором критерий фильтрации по каждому полю представлен в виде списка. Его можно открыть и изменить набор значений полей или создать дополнительные списки для тех полей., которые первоначально не использовались для задания критерия фильтрации. Пример такого окна показан на рис, 3.10. Выражение, введенное для поля Телефон, позволяет отобрать все строки таблицы, где в номере телефона присутствует хотя бы одна единица. Это выражение сформировано автоматически при помощи фильтра «по выделенному» (была выделена цифра 1). Критерий фильтрации можно определить и для любого другого поля, использовав список. Например, список для поля Название содержит значения всех названий организаций, записанных в исходную таблицу. Вкладки Или позволяют создавать дополнительные критерии. Объединение по ИЛИ в данном случае означает, что после фильтрации будут показаны совместно все записи, которые были отобраны по критериям на каждой из вкладок. Организации: фильтр st
Телефон
Рис. 3.10. Окно редактирования фильтра
Пример простейшей базы данных
75
В некоторых случаях невозможно реализовать преимущества фильтра по выделенному или обычного фильтра. Допустим, нам надо выполнить фильтрацию по номерам записей (значению счетчика). Фильтр по выделенному нам не поможет: если значение кода можно выделить мышью, то искать его уже не надо. Преимущество обычного фильтра заключается в возможности использовать список значений поля. Но для поля счетчика список получится таким же длинным, как и таблица: повторяющихся значений поля нет. В подобной ситуации разумнее всего использовать поле «Фильтр для» в контекстном меню, потому что это не требует сложных манипуляций с командами и окнами программы. Достаточно установить курсор на нужное поле и нажать правую кнопку мыши. В поле Фильтр для надо ввести нужное значение и нажать клавишу Enter. После этого фильтр сразу же приводится в действие. Отменить фильтрацию можно, как и в предыдущих случаях, командой Удалить фильтр. NB
В отличие от фильтра «по выделенному», «фильтр для» не может работать по фрагменту поля и требует ввода полного значения. Например, полного названия организации.
Расширенный фильтр запускается командой Записи => Фильтр => Расширенный фильтр. Его окно показано на рис. З . П . В данном случае для фильтрации была автоматически выбрана единственная таблица базы данных. Это окно очень похоже на окно запроса в режиме конструктора (см. главу 4). Действительно, у запроса и расширенного фильтра очень много общего. Условие отбора в этом фильтре задается точно так же, как и в запросе: при помощи бланка — специальной таблицы. Как и в окне редактирования фильтра, здесь можно задать критерии для нескольких полей. Например, можно отменить режим сортировки по значениям счетчика и отсортировать таблицу по полю Название. Режим сортировки также может быть задан в бланке: путем выбора из списка. Преимущество расширенного фильтра - наглядность. Расширенные фильтры похожи на запросы, но между ними есть определенная разница. Фильтр - это свойство объекта базы данных, которое может храниться в памяти компьютера. Запрос - это объект базы данных, который создается с использованием таблиц и других запросов. Он может служить, в свою очередь, основой для создания форм или отчетов. Наконец, запрос формулируется при помощи языка программирования (SQL), а это предполагает высокий уровень стандартиза-
Глава 3 Органиэ.1цннФи.ч|.тр1 : фильтр
[ Телефон JOK
! Название
v
V
Попе; Л Сортировка: Условие отбора: или:
Телефон
Название по возрастание
Л
,
Like "*!*" V
-
Рис. 3.11. Окно расширенного фильтра
ции и классические подходы к использованию приложения. Расширенный фильтр представляет собой более «легковесную» конструкцию. Например, в бланке фильтра отсутствует строка «Вывод на экран», которая есть в бланке запроса, и мы не можем скрывать поля таким способом. Контекстное меню расширенного фильтра содержит команды, позволяющие преобразовывать расширенные фильтры в запросы и наоборот. Использование фильтра в сочетании с печатью - хороший способ для представления результатов своей работы. Например, в нашем примере оператор после обзвона всех фирм может задать соответствующее условие фильтрации по полю Результат, чтобы отобрать только те организации, которые заинтересовались коммерческим предложением, и вывести результаты на печать.
Печать объекта базы данных Дня создания распечатки в Access используются три основных инструмента, как и в других программах Office: Параметры страницы, Предварительный просмотр и Печать. Назначение первой и последней команд хорошо известно пользователям, с помощью этих команд выбираются параметры распечатки. Вторая команда заслуживает некоторого обсуждения. Основная задача предварительного просмотра - выяснить, как будут располагаться данные на листе бумаги. Поэтому возникает необходимость посмотреть на распечатку в разных масштабах. Мелкий масштаб покажет, насколько плотно заполняются листы, где расположены заголовки (нехорошо, если они будут в нижней части страницы) и т. д.
Пример простейшей базы данных
77
Крупный масштаб позволяет проверить, не выходят ли данные за край листа. Программа не выводит никаких предупреждающих сообщений, просто обрезает данные. В этом плане достаточно интересным представляется опция масштаба Окно. Размер страницы автоматически изменяется в зависимости от размера окна так, чтобы пользователь видел страницу целиком. Меняя размеры окна (перетаскивая край), можно быстро просмотреть страницу в разных масштабах. Другой особенностью печати является распечатка формы. Последняя, как известно, может выводиться на экран в двух режимах: в режиме формы и в табличном представлении. Распечатку тоже можно сделать в двух форматах. На рис. 3.12 показаны оба варианта. Вид распечатки зависит от того, в каком режиме находится форма перед использованием команд печати. _о! Организации
Страница: М
1 ТЕЛЕФОН 1 ОК 111-22-зэ И 2 <№-665-еве 0 3111-222-333 D 4 D s П в О 7 D
Рис. 3.12. Варианты предварительного просмотра формы перед печатью
Глава 4 Компьютеризация данных (пример) Очень часто бывает - работает коммерческая фирма или индивидуальный предприниматель, и со временем накапливается большое количество финансовых документов. Когда груда бумаг достигает внушительных размеров, возникает идея «ввести все это в компьютер». Действительно, такая работа может оказаться полезной: в бумагах находятся данные о поставщиках и покупателях, о проданных товарах. Провести анализ проделанной работы невозможно, не внеся все данные в компьютер. Даже при успешном ведении бизнеса остаются открытыми самые простые вопросы, например: какие были обороты в позапрошлом году? как изменяются объемы продаж во времени и по различным товарам? кто самый активный поставщик? и т. д. Кстати, учебная база данных «Борей», неоднократно упоминавшаяся на страницах этой книги, посвящена именно такой проблеме. В этой главе мы рассмотрим создание такой базы данных «с нуля» (назовем ее файл delo.mdb).
4.1. Организация ввода данных. Первая таблица Итак, мы берем, в руки документ, который является типичным образцом - носителем интересующей нас информации. Первым делом надо организовать занесение всех данных в файл базы данных. Скорее всего, такую работу будет выполнять оператор, так что надо будет подготовить для него «поле деятельности»: таблицы и формы. Допустим, основной объем необходимой информации сосредоточен в накладных (рис. 4.1), по которым в нашу организацию поставлялись товары. При внимательном рассмотрении документа легко понять, что. основная информация сосредоточена в таблице, из которой и состоит документ. Таблица Access должна повторять структуру этого бланка: в ней должны быть предусмотрены соответствующие столбцы. В процессе набора данных формат придется изменять: например, в накладных отделяют «рубли» от «копеек» дефисами, а в базе данных
Компьютеризация данных (пример)
79
требуется использовать в качестве разделителя запятую. Но есть и дополнительные данные, которые не впишутся в структуру таблицы: номер накладной, информация о поставщике и потребителе, дата. Значит, потребуются другие таблицы. Н А К Л А Д Н А Я К! 2£g' ЗАО ФЕНИКОМ 000 СЕЭАРОМ, ТОЧКА 1
Рис. 4.1. Типичная накладная
Для хранения данных о проданных товарах можно создать таблицу (назовем ее ТаблицаТовары) и срачу, не дожидаясь завершения проекта базы данных, поручить оператору ввод данных, чтобы не терять время. Причем делать это можно, используя отдельный файл. В разрабатываемой базе данных надо создать таблицу с таким же именем и структурой и заполнить ее несколькими записями для тестирования. Потом настоящую таблицу можно будет скопировать в разработанную базу данных. Возможно, что в процессе работы над проектом потребуется изменить структуру таблицы. Эти изменения надо тщательно задокументировать, а потом так же .преобразовать полученную от оператора таблицу. Как правило, подобные преобразования происходят достаточно легко и не требует набирать данные заново. Действительно, текстовые данные всегда останутся данными, числовые- числовыми. Даты легко конвертируются в тестовый формат и обратно. Обычно могут измениться имена полей, их длины, подписи и тип. Могут появиться поля подстановки, новые поля, вычисляемые поля. Но все это не означает, что уже
80
Глава 4
введенные данные не подойдут. Их можно будет конвертировать в нужный формат. Единственное, что нужно обдумать и предусмотреть заранее, - наличие полейсчетчиков, индексных полей, полей с запретом дублирования данных. В нашем примере в таблице ТаблицаТовары можно предусмотреть следующие поля: Имя поля
Текстовое, 6 символов, поле подстановки с названиями единиц измерения
Количество Цена
Числовое (длинное целое) Тип поля «Денежный», формат поли «Денежный»
Поле ЕдИзм надо оформить следующим образом: 1. На бланке таблицы выберите тип данных Мастер подстановки, 2. На первом шаге мастера выберите вариант «Будет введен фиксированный набор значений». 3. На втором шаге мастера определите, что будет использован один столбец списка^и введите в столбце возможные и необходимые значения: шт., ящ., л, кг, т, упак., компл. и т. д. 4. На третьем шаге мастера задайте подпись «ЕдИзм». Получилось поле подстановки (список) с фиксированным набором значений. Если в дальнейшем понадобиться изменить состав списка, надо открыть вкладку Подстановка этого поля и отредактировать строку Источник строк: там возможные значения просто перечислены через запятую. Таблица получилась очень простая, все ее столбцы очевидны. Но не хватает поля для вычисления суммы. Для этого надо построить запрос.
4.2. Запрос с вычисляемым полем Процесс создания запроса можно разбить на шаги. 1.
На вкладке Запросы щелкнем два раза значок Создание запроса в режиме конструктора.
Компьютеризация данных (пример) 1. В окне Добавление таблицы выберем таблицу ТаблицаТовары. 3. На бланке запроса появится наша таблица. В первой колонке бланка надо открыть список «Поле» и выбрать опцию Таблица. Товары, *, Звездочка обозначает все поля таблицы. Нам надо выбрать все поля, так как заранее неизвестно, какие потребуются: например, по значению поля счетчика легко найти определенную запись е таблице, но неизвестно, захотят ли работники работать с безл и к и м и числами. 4. Во втором столбце бланка в строке «Поле» введем выражение: Сумма: [Цена] * [Количество] ;
Сохраним запрос, дав ему имя ЗапросТовары. В выражении слово «Сумма» определяет заголовок вычисляемого сто.юца. Двоеточие и квадратные скобки - необходимые элементы синтаксиса, Это выражение можно было бы создать и с помощью построителя выражений (команда Построить в контекстном меню). Бланк готового запроса показан на рис. 4.2. 5.
I
.jji Запрос Товары : запрос на выборку
НомерНаклоДной НомерПоПорядку Наименование ,ЕдИ>м
Попе Имя таблицы Сортиров «а Вывод на зкран Условие отбора
ТабпицаТоваоы.*
Сумма: ГЦенаТТКопиместео] '
А
ТабгицоТсвары
^
«•
ИЛИ
V
Рис. 4.2. Бланк запроса с вычисляемым полем
В режиме просмотра запрос выглядит, как и таблица, только добавляется новое поле. Данные можно вводить и в таблицу, но можно создать и форму для ввода.
Глава 4
4.3. Создание второй таблицы Для оставшейся в накладной информации надо создать отдельную таблицу. Назовем ее ТаблицаНакладные. В ней будут такие поля: Формат поля
Имя поля НомерНакладной
Числовое (длинное целое), первичный ключ
Дата
Дата, средний формат даты
Филиал
Текстовое, 30 символов, поле подстановки
Поставщик
Текстовое, 30 символов
Поскольку филиалы своей организации известны, мы можем создать поле подстановки, чтобы оператор выбирал название филиала из списка. На втором шаге мастера подстановки (рис. 4.3) надо тоже ввести все необходимые названия. Поле создается так же, как и для первой таблицы. Создание подстановки Выберите значения, которые будет содержать столбец подстановки, столбцов списка и значения для каждой ячейки, Перетащите правую границу заголовка столбца на нужную ширину или ДЕ щелкните ее для автоматического подбора ширины.
Филиал 1 (на Пятницкой) __| Филиал 2 (на Тори«опекой) Ларек 1 Склад 1 Склад 2\
Рис. 4.3. На втором таге мастера подстановок надо ввести набор допустимых значений поля
Теоретически так же надо поступить и с названиями поставщиков. В продвинутом проекте названия поставщиков должны быть размещены в отдельной таблице так, чтобы названия организаций-поставщиков не повторялись (в поле с названием можно с помощью индексации запретить повторение значений). Такая таблица могла бы служить источником данных для поля подстановки в ТаблицаНакладные, Но, во-первых, список поставщиков нам пока неизвестен, а во-вторых, это услож-
83
Компьютеризация данных {пример}
нило бы пример. Проще собрать все данные в таблицу, а потом проделать необходимую работу по формированию такого списка. Если же вводить каждый раз название поставщика заново, может получиться так, что одно название будет записано поразному, и это создаст потом проблемы при сортировке, фильтрации и анализе данных. На данном этапе работы приходится полагаться на внимательность и добросовестность операторов. На рис. 4.4 показаны созданные запрос и таблица. Запрос Товары : запрос на выборку КодНаименования НомерНакладясй НомерПоПоряд^ Наименование ! Ед/'зм | Количестве] ! Плюшка
шт.
1 Хлеб
шт
20 40
2 Батон "Нарезной"
шт
40
3 Кока-Кала
упа
Цана З.ООр 4.00р
5Д)р и
I.
,,
,,
ОС .00р.
16С,ООрЭТ.ООр. 40[i,00p
О
.1 Та6лицаНакладные : таблица |НомерНакладнсй|
Филиал
Дата
1 2
10-окт-2003 Ларек 1 Ю-окт-2003 Филиал 1 (на Пятницкой)
3
11-ОКТ-2003 Склэд I
Поставщик j*j ЗАО "Кииек" 000 "Микс" ЗАО'Тортои 1
[ 3
Рис. 4.4. Запрос и таблица для хранения информации из накладных
4.4. Связывание таблиц Информация из одного документа будет распределяться по двум таблицам, поэтому их надо связать, чтобы получить возможность построить форму для ивода. Нажмем кнопку Схема данных на главной панели инструментов. В открывшемся окне Добавление таблицы щелкнем фон окна правой кнопкой мыши и при помощи команды Добавить таблицу выберем объекты ТаблицаНакладные и ЗапросТовары. Для связывания можно использовать как таблицы, так и запросы. Панели указанных объектов появятся на схеме данных. Теперь надо перетащить поле НомерНакладноЙ из ТаблицаНакладные на одноименное поле в ЗапросТовары. Указатель мыши в конце перетаскивания должен принять вид прямоугольника. После этого автоматически откроется окно Изменение связей, в котором можно выбрать параметры связи. Мы можем нажать кнопку Объединение и, прочитав формулировки объединения, выбрать второй вариант (всего их три). Наш выглядит так: «Объединение ВСЕХ записей из "ТаблицаНакладные" и толь-
84
Глава 4
ко тех записей из "ЗапросТовары", в которых связанные поля совпадают». Здесь, по сути, решается вопрос, как поступить с записями, которые не попадают под условие ооъединения (например, если в одной таблице некоторое значение поля присутствует, а в другой - нет). Тут надо делать выбор, исходя из конкретной задачи. Будем считать, что ТаблицаНакладные является в данном случае «главной» таблицей. Но, строго говоря, в нашем примере этот выбор не очень критичен: на данном этапе нам бы подошел любой вариант. В результате схема данных приобретает вид, показанный на рис. 4.5. Схема данных
К о дНаиченованп я •НомерНакладной 1 НомерПоПоряд к у •Наименование ;ЕдИзп Уаличестео jLJehd Суииа
НоиерНякладной Филиал Поставщик
Рис. 4.5. На схеме данных показана связь между таблицей и запросом
NB
На схеме данных можно при помощи мыши установить размеры объектов так, чтобы все названия полей были полностью видны.
4.5. Быстрое создание формы Формам в этой книге посвящена отдельная глава. Здесь мы создадим форму при помощи самых простых средств. Единственное, что надо учитывать в данном случае: поля в форме должны располагаться так же, как и ячейки в исходном документе, чтобы оператору было удобно набирать данные. В накладной данные находятся в таблице, так что и форма у нас получится табличная. На вкладке Формы выберем вариант Создание формы при помощи мастера. Выберем все поля из ТаблицаНакладные. На следующем шаге мастера выберем вариант «В один столбец». Затем выберем стиль оформления «Стандартный», а на последнем шаге дадим имя форме: ФормаНакладные.
Компьютеризация данных (пример)
85
Теперь откроем форму в режиме конструктора. Горизонтальную линейку примечания надо сдвинуть вниз и увеличить размер формы (перетаскивая мышью ее край). На панели инструментов Панель элементов должна быть нажата кнопка Мастера. Нажмем кнопку Подчиненная форма/отчет и нарисуем в нижней части формы прямоугольник. Запустится мастер подчиненных форм. Первый его шаг пропускаем, а на втором все поля из ЗапросТовары, кроме поля КодНаименования. В форме будут только те поля, которые имеются и в накладной. На следующем шаге выбираем тип связи: «"ЗапросТовары" для каждой записи "ТаблицаНакладные"». Этот вариант программа должна найти сама, мы лишь подтверждаем его. На последнем шаге мастера можно оставить имя подчиненной формы, которое выберет мастер. Теперь можно открыть форму в режиме просмотра. Скорее всего, для подчиненной формы не хватит места. Тогда надо снова включить режим конструктора и изменить размеры обеих форм. По умолчанию подчиненная форма выводится в табличном виде. Если это не так, надо изменить ее свойство Режим по умолчанию (на макете подчиненной формы надо щелкнуть правой кнопкой мыши квадратик на пересечении линеек и из контекстного меню выбрать команду Свойства). Эо'рмаНак ладные НомерНакладмой Дета Филиал • .!-•.. .1
А 14-оет-2003 -Ларек 1 ЗВД 'Хлеб"
пей чиненная Форма ЗапросТовары
Запись: 'JTJ Запись: QT)
l 1ОН
* иэ 2 « _3
Рис. 4. 6. Форма для ввода данных из накладной
86
Глава4
Раскрыв форму для просмотра (рис. 4.6), можно убедиться, что при вводе номера накладной в верхнее поле в подчиненной форме такие же номера появляются автоматически: оператору не надо вводить это число заново. Границы столбцов подчиненной формы можно сдвигать мышью. Возможно, не совсем удачно наличие двух наборов кнопок для переходов по записям: когда элементов управления слишком много, пользователь начинает путаться. Кнопки выбора записи для подчиненной формы можно убрать (они не нужны) с помощью свойства Кнопки перехода. Если все строки подчиненной формы не будут умещаться на экране, автоматически подключится полоса вертикальной прокрутки. В таком виде файл базы данных уже можно отдавать оператору для заполнения. Если надо, чтобы при открытии файла форма запускалась автоматически, надо выбрать команду Сервис => Параметры запуска и задать имя формы в строке Имя формы/страницы.
4.6. Мастер по анализу таблиц Поскольку в нашей базе данных предусматривается размещение информации о поставщиках, мы можем попросить предоставить такую информацию. Допустим, мы получили информацию, которая находится в таблице, показанной на рис. 4.7. В приведенной таблице могут быть собраны данные из разных подразделений. Недостатки такой информации сразу бросаются в глаза. Например, в некоторых записях информация повторяется. Если в таблице находятся десятки и сотни записей, исправить ошибки довольно сложно. В Access существует средство для исправления таблиц. Это так называемый мастер по анализу таблиц. Если вы не знаете, насколько рационально спроектирована таблица, вы можете прогнать ее через эту программу, и электронный разум вынесет свой вердикт. При использовании данного мастера следует иметь в виду, что пользователь не всегда владеет всей информацией о своих данных. Например, если таблица большая, то человек просто не в состоянии запомнить всех ее особенностей. Поэтому в диалоге с мастером иногда возникают сложные моменты. Исследуем его работу на нашей небольшой таблице. Не имеет.особого значения, какой смысл вкладывается в текст из таблицы. Иванов, Петров, Сидоров могут иметь отношение к любой сфере бизнеса. Мы ожидаем, что мастер выдаст рекомендации по улучшению структуры данных. Для его запуска выбираем Сервис ==> Анализ => Таблица.
Компьютеризация данных (пример) ТаблицлПостдвщики : 1а6лнц4 Счетчик
И ~
_ >
Е
Поставщик
87 <>:»,„
—'!
Т
Директор
... ~~-
..,-.. ......-..- -_----
|
Телефон
1 Хлебозавод №2 2 ООО "Мине"
Остапенко В.М. Туманов О.С
222-333-4444
3 ЗАО "Тортом"
Сергеев В П
444-866-88BQ
4 ЗАО "Хлеб" 5 Продуктовая база
Семенова Т.З. Иванов И И.
555-999-1212 333-777-5555
6 ЗАО "баранки"
Баранов М. М.
7 Хлебозавод № 1
Николаев С. К.
8 Хлебозавод № 2 9 ООО "Микс"
Остапенко В М.
111-222-3333
Туманов 0 С
222-333-4444
10 База В
Комаров М.С
11 Хпебзавод 2 12 Продуктовая база
Остапенко В.М. Иванов И. И.
13 База 6 (Счетчик)
Комаров М С.
-_ _-.
}i
111-222-3333
777-В88-2222 333-888-6666
111-222-3333 333-777-5555
: '
- Запись: MjULU Г^ ^ UJUUfe*] » '3
Рис. 4.7. Таблица с информацией о поставщиках
Первые два шага мастера, показанные на рис. 4.8 и 4.9, носят справочный характер. Из рисунков видно, что программа дает пользователю рекомендации, с которых был начат этот раздел и которые содержатся в любой книге по СУБД. Естественно желание всех, разработчиков избежать дублирования данных и свести к минимуму вероятность опечаток при их редактировании. Второй шаг мастера показывает, к чему стремится программа. Предполагается, что разбиение одной таблицы на несколько позволит усовершенствовать базу данных. На мастера возлагается также задача определить связи между таблицами. Он оставляет в неприкосновенности исходную таблицу и создает новые для размещения тех же данных. Разработчик базы данных должен сам впоследствии решить, как ему поступить с таблицами: какие из них стереть, а какие оставить. Настоящая работа мастера начинается с третьего шага, показанного на рис. 4.10, Под страницами с пояснениями понимаются два предыдущих шага. Если флажок сбросить, то при последующих запусках мастера первые два шага будут пропущены. Данное окно предназначено для выбора таблицы, и мы выберем ТаблицаПоставщикн. На четвертом шаге (рис. 4.11) надо ответить на вопрос о том, каким образом будут распределяться поля по таблицам, если мастер обнаружит, что исходную таблицу надо разбить. Автоматическое разбиение выполняется, если выбрать опцию «Да, разделение полей выполняется мастером». Но мастер может выдать со-
Глава 4 r Анализ таблиц
Дна ли i таблиц: постановка задачи
Raviw A-igeic Gnocchi airionr Carnarvon Tige Outback Laaer Pavlova Vegie-spread
РД5Т PAST PAVL PAVL PAVL PAVL
Pasta Suttmi 5,1 Via dei Gels Pasta Buthni s.i Via dei Gelsc.™ Pavlova, Ltd, 74 Rose St; Pavlova. Ltd. 74 Rose 5t, Pavlova, Ltd. 74 Rose St. P v, Ltd. 74 Rose St
Опечатка в имени поставщика. I
Сведения а поставщиках повторяются,
Одни и те же сведений часто сохраняются в таблице много раз. Повторная запись данных может привести к определенным ошибкам Во-первых, повтор данный приводит к излишнему увеличению их объема. Q Показать пример, Во-вторых, повтор данных может вызвать ошибки обработки, fa] Показать пример.
Рис. 4.8. Первый шаг мастера анализа таблиц Анализ таблиц Исходная таблица "Товары и поставщики"
Анализ таблиц: решение задачи Мастер разделит исходную таблицу на несколько новых, в которых каждое значение будет храниться только в одном месте, Теперь обновление данных в разных записях выполняется за один раз.
Товар
| Подстановкаnot
Gnoirchi Arionr.PAST ц ., , i
0
Показать пример.
Допускается работа с данными одновременно из нескольких таблиц. Поставщик Pasta Buttini s.r Via dei Getsomini, 1!" Pavlova, Ltd, 71 RoseSt.
Новая таблиаа "Поставщики"
Рис. 4.9. Второй шаг мастера анализа таблиц
12J Показать пример.
Компьютеризация данных (пример)
89
Анализ таблиц В каких таблицах есть чоля, значения которьи повторяются иного раз? Данный мастер разделит исходную таблицу на несколько связан№1* таблиц, При этом сама исходная таблица изменена не будет. Таблицы: Т аблицлН а клад ные ТаблицаТоварь
Т'" Вывести страницы с пояснениями?
Рис. 4.10. Третий шаг- мастера анализа таблиц
общение, что разбивать таблицу нет смысла. Но мы видим, что такая необходимость имеется. Тогда надо выбрать второй вариант: «Нет, разделение проводится вручную». Если выбрано разделение таблиц вручную, то на пятом шаге (рис. 4.12) мы должны создать новую таблицу. В нашем примере повторяющиеся данные находятся в поле Поставщик. Это поле надо перетащить на свободное место в окне., чтобы мастер создал еще одну таблицу. Ей надо дать имя в появившемся модальном окне. Мастер разбил исходную таблицу на две. Теперь каждый объект в ней встречается только один раз -дублирование данных исключено. В нашем случае мастер сделал то, что сделал бы и разработчик базы данных. В окне мастера имеется также кнопка Советы (с изображением лампочки). Нажав ее, можно получить некоторые объяснения работы мастера и рекомендации по текущим действиям. Мастер связал две таблицы с помощью операции подстановки. Связь между двумя таблицами носит название «многие-к-одному». Много записей из Таблица! связаны с одной записью из Таблица2. Графически «много» обозначается символом бесконечности, а «один» - соответствующей цифрой.
Г лава 4
Мастер позволяет автоматически разделить поля по таблицам, БослолвзоБоться этим средством? При автопатическсм разделении сохраняется возможность проверки и изменения состава таблиц. О Дэ» разделение полей выполняется мастерам. •^ :Нет, разделение проводится вручную.
Рис. 4.11, Четвертый шаг маст'сра анализа таблиц
Анализ таблиц Какие поля содержат повторы данных? И* следует перенести в новы* таблицы. Каждая таблица должна содержать данные об однсн предмете. Поли можно перетаскивать мышью между таблицами или для создания новых таблиц. Допускается переименование таблиц и определение ключевых полей. Таблица! ! "$ Счетчик Директор ^Телефон \Подстаиаеяа Твблица?
..;*' Анализ таблиц \г\ня таблицы:
Рис. 4.12. Пятый шаг мастера анализа таблиц
91
Компьютеризация данных (пример)
Шестой шаг мастера (рис. 4. 1 3) позволяет исправить значения поля, если одни и те же записи введены немного по-разному. В этом случае новое значение выбирается только из списка, доступного в окне. В нашем примере нужно заменить «Хлебзавод 2» на «Хлебозавод № 2». Анализ таблиц Исправление опечаток для таблицы 'Таблица?'.
("Q
ы записи с очень похожими значениями, Если записи относятся к №Ю1чу предмет1^ ,! значения попей должны точно совпадать, чтобы избежать ошибок обработки данных, Намечены следующие исправления. Длят изменения выберите значение из списка. Они будут i выполнены при создании новых табпии. Чтобы оставить запись Б ее текущем виде выберите б : списке "Оставить как есть" или оставите исправление пустым. :
ЗАО Баранки' ЗАО "Тортом" ЭДО "Хлеб11 Хлебзавод 2 Хлебозавод № I
(Оставить как есть, База 6 ООО "Микс" Продуктовая 6аз= Хлебозавод № г
< Назад
Дале
Рис. 4.13. Шестой шаг мастера анализа таблиц
На рис. 4.14 показан седьмой, последний шаг мастера анализа таблиц. Здесь можно разрешить создание запроса, заменяющего исходную таблицу, которая будет переименована, а запрос получит ее имя. В нашем примере таблица получит название ТаблицаПоставщики_СТАРАЯ. Если таблица использована в базе данных (например, для создания формы), то теперь ее заменит запрос, и работа базы данных не нарушится. В результате работы мастера мы получили таблицу, изображенную на рис. 4.15. В ней название каждой организации-поставщика встречается только один раз. Такую таблицу можно использовать как справочник названий и связывать с другими таблицами. В режиме конструктора можно ввести запрет на повторения значений поля Поставщик - после этого в таблице не появятся одинаковые названия.
•
Глава 4 Анализ таблиц Указаны все сведения, необходимые для создания с таблиц с помсщью мастера. После создания ьовы> таблиц мастер может также создать ; который расширяет возможности исходной таблицы, При создании запроса: . фориы и отчеты, основанные на исходной таблице, будут рабататс без изменений; - мастер сохранит запрос под именен исходной таблицы и переименует саму таблицу.
3 Вывести справку па работе с новой таблицей или запросом?
Рис, 4.14. Седьмой шаг мастера анализа таблиц
Л Таблица? : таблица Поставщик
..
П
Код
Баээб ЗАО "баранки" 'ЗАО "Тортам" ЗАО "Хлеб" 000-"Микс Продуктовая бэзз Хлебозавод № 1 Хлебозавод №
Рис. 4.15. Таблица с уникальными значениями поля Поставщик
Компьютеризация данных (пример)
93
4.7. Анализ данных После того как данные внесены в таблицы, можно приступать к их анализу. Одним из самых удобных инструментов является мастер сводных таблиц. С1 водная таблица может состоять из трех частей: данных, сгруппированных, в столбцах, данных, сгруппированных в строках, и собственно тела таблицы. Кроме этого, в таблице автоматически вычисляются итоговые значения, Результаты работы мастера целиком зависят от того, что именно выберет пользователь, поэтому рассмотрим конкретный пример, разбив его на шаги. 1.
Откроем вкладку Формы и щелкнем два раза значок Создание формы с помощью мастера.
На первом шаге мастера выберем таблицу ТаблнцаНакладные и ее поля Дата и Поставщик. 3. На втором шаге мастера выберем опцию «сводная таблица». А. Два следующих шага мастера не имеют принципиального значения, и на любом из них можно нажать кнопку Готово. 5. После этого будет открыто окно для формирования сводной таблицы. Это самый ответственный момент: мастер не может выполнить эту работу автоматически. Поскольку мы выбрали поле с датами, у нас есть возможность сгруппировать данные за какой-либо период времени. Допустим, мы хотим получить сводку по месяцам. Раскроем в маленьком окне список Дата по месяцам и перетащим слово Месяцы в верхнюю зону (рис. 4.16). 2.
• ..J Таб л нцйНак ладные Перетащите сюда поля фильтра Месяцы • Ш окт Ш ноя
ё *"
Перетащите Б таблицу ^ ТаблицаНакладные
Общие итоги
* а д*«
-. [j] Да-а по неделям - [5] Дата по месяцам Щ Квартаны Перетащите сюда паля итогов нлк деталей
<-Щ
Ш Дни [3 Часы [j| Минуть [5| Секунды * Ш Поставщик Добавить в
Рис. 4.16. Заготовка сводной таблицы
|Строки
Глава 4
94
6. Перетащим слово Поставщик в зону «поля итогов или деталей». 7. Закроем окно Список полей сводной таблицы. 8. Закроем окно формы. Та 6л ицаНаиладн ые
п
ретащнте сюда поля фильтра Месяцы Шокт Шиоя
Поставщик ' >000 "Микс" ЗАО "Тортом" с ЗАО "Хлеб"
Общие итоги:
• \
Поставщик - Нет итогов ЗАО "Тортом" ЗАО "Хлеб" Хлебозавод №1
.
Рис. 4.17. Готовая форма типа «сводная таблица»
Готовая таблица показана на рис. 4.17. В моем примере были данные за октябрь и ноябрь 2003 года, поэтому в сводной таблице появились только эти два месяца. Теперь мы можем увидеть, какие поставщики работали с фирмой в определенные месяцы. Обратите внимание, что таблица изобилует элементами управления (которые выглядят как плюсы, минусы и стрелки). С помощью ник можно выбирать различные периоды времени (например, включать разные года). В тех полях, которые мы выбрали для анализа, нет числовой информации, поэтому графа «Общие итоги» появилась, но не была заполнена данными.
Глава 5 Запросы
Так уж получилось, что запросы - средство отбора и сортировки данных в Access являются промежуточным звеном между, таблицами и формами. Запросы- это своеобразные виртуальные таблицы, которые, обладая всеми свойствами таблиц, на самом деле хранилищем данных не являются. Зато с помощью запросов легко создавать вычисляемые поля. Классический пример из сферы коммерческих задач: есть колонка с количеством товаров и есть колонка с ценой единицы товара, надо создать третью колонку со стоимостью по ка.кдому виду товара. При разработке баз данных формы и отчеты можно создавать как на основе таблиц, так и на основе запросов. Я всегда рекомендую использовать в таких случаях запросы - создавать запрос с такими же полями, как и в таблице. Даже если полезность запроса сразу не очевидна, потом появляется возможность, меняя его свойства, добиваться требуемых результатов. В данной главе мы используем базу данных «Борей» - пора познакомиться с базой данных, которую сами разработчики Access предназначили для учебы. Ее можно запустить командой Справка =э Примеры баз данных => Учебная база данных «Борей» или найти в папке примеров: Program Fi!es\Microsoft Qffice\OFFICE11 \SAMPLES\bopeu.mdb
В английской версии Microsoft Office этот файл носит название Northwind.mdb. Сделайте копию файла, чтобы в процессе экспериментов не испортить исходную базу данных.
i
Г лава 5
5.1. Мастер запросов Перед началом работы я рекомендую ознакомиться со схемой данных базы «Борей». Ее структура в чем-то похожа на структуру базы данных, которая обсуждалась в предыдущей главе. В этом нет ничего удивительного: коммерческие задачи мало отличаются по обе стороны океана. Как правило, таблицы служат в качестве исходного материала для создания запроса. Откроем вкладку Запросы в окне базы данных и щелкнем два раза значок Создание запроса с помощью мастера. Будет открыт мастер простых запросов. Первый шаг мастера, позволяющего построить простой запрос, показан на рис. 5.1. На этом этапе надо выбрать таблицы, к которым будет адресован запрос, и нужные поля из этих таблиц. Мы укажем следующие поля; Фамилия и Имя из таблицы Сотрудники, ДатаИсполнения из таблицы Заказы, Марка из таблицы Товары, КодТовара, Цена и Количество из таблицы Заказано. Создание простых запросов Выберите поля лля sanpooa. Допускается выбор нескольких таблиц или запросов,
Тэбпицы и запросы Таблица; Заказано
%-;
Доступные полн: КооЗаказа
Выбранные поля: Г^-ГП *амил|1а ••"*•«•••' Имя >> | ДатаИсполнения —-—' Марка —-i КодТовара
Отмена
I
I
Далее >
| |
Готово
Рис. 5.1. Первый шаг мастера запросов
На втором шаге мастера, показанном на рис. 5.2, имеется возможность определить вид отчета: подробный или итоговый. Выберем вариант «подробный» - он как раз соответствует понятию «простой», потому что итоговые запросы совсем не простые, и прейдем к следующему шагу.
Запросы
9? Создание простых запросов Выберите подробный или НТОГОЕЫЙ отчет: Q подробный (еывод каждого поля каждой записи; } итоговый
Рис. 5.2. Второй шаг мастера запросов
Последний шаг мастера запросов показан на рис. 5.3. Можно изменить имя нового запроса, но в данном случае мы оставим то, которое предлагает мастер. Он использовал одно из названий таблиц, которые участвуют в формировании запроса. Имя ни на что не влияет, и можно выбрать любое. Обратите внимание на положение переключателя: как только мастер завершит свою работу, запрос будет открыт. Теперь самое время посмотреть на то, что у нас получилось. Нажмем кнопку Готово. Access откроет вновь созданную таблицу-запрос. Ее содержимое показано на рис. 5.4. По терминологии Access - это «подробный отчет». Мы видим, что программа создала новую таблицу, в которую вошли выбранные нами поля. Использовав существующую между исходными таблицами связь, СУБД смогла определить значения полей для всех записей. На результат выполненной операции стоит обратить внимание. Используя очень простые средства, мы за несколько минут объединили данные нескольких таблиц! Получилась новая, виртуальная таблица, обладающая свойствами запроса. Этот метод стоит принять на вооружение.
4-870
Глава 5 Создание простых запросов Задайте имя запроса: С отру и. ники Запрос
Указаны все сведения, необходимые для создания запроса с помощью мастера, Дальнейшие действия: 0 Открыть запрос для просмотра данных. ', • узменитьмакетзалроса.
13-04-1998 Original Frankfurtei Original Frankfi Original Frankfurter Original Frankfi 23-07-1996 Gorgonzola Telino Gorgonzola Tel 04-10-1996 Gorgonzala Telino Gorgonzola Tel 24-10-1996 Gofgonzola Telino Gorgonzola Tel из 2169
Рис. 5.4. Результат работы мастера запросов
Но кое-чего в этой таблице не хватает. Конечно, хорошо бы подсчитать суммы по каждому из товаров. Для этого нам потребуется доработать запрос в режиме конструктора.
NB
В базе данных «Борей» есть готовый запрос, похожий на --чпот. Он называется «Продажи по сотрудникам и странам».
Запросы
99
5.2. Конструктор запросов Откроем получившийся запрос в режиме конструктора. Выделим запрос и нажмем кнопку Конструктор на вкладке Запросы. Окно, которое появится вслед за этим, изображено на рис. 5.5. Это основное средство работы с запросами. Оно позволяет не только сформулировать новый запрос, но и понять, по какому принципу построен любой из уже существующих. В верхней половине окна показаны связи между таблицами. Как видим, программа использовала только часть счемы данных нашего примера - ту, которая имеет непосредственное отношение к запросу. Пользователь может редактировать эту схему, добавляя в нее новые объекты: таблицы или запросы. i ^Сотрудники Запрос : запрос на выборку
i» ' '
'""л
1*
'
"
Л:
1 КодСогрудн — i КояЭеказа Фамилия КодКлнентд 0 №я "• -КолСотрудн! ; ДатаРаэмеш.1 " .Должность ",
Поле Фамилия Инн таблицы Сотрудники Сортировка Вывод на экран Условие отбора "Новиков" и пи
в
_
:
CH iJy
* -л, А 1 DO КодТовара '""\оа КодЗакаоа Марка ^~ КодТсвара КодПоставщ Цена КодТипа i.v Количество "_!
1
Имя Сотрудники
R
ДатаИспо.'.нення Заказы 1=1
Марка Товары
Кид Товара Заказано 0
Е >
Рис. 5.5. Режим конструктора для запроса
Нижняя часть окна - бланк запроса - содержит описание запроса в табличной форме. Каждая колонка в нем отвечает одному полю. Строки Поле и Имя таблицы содержат списки, которые позволяют определить нужное поле. Их элементы соответствуют размещенной вверху схеме, поэтому пользователь всегда может легко узнать, какие поля ему доступны. Таблица расширяется вправо автоматически, когда пользователь добавляет в запрос новые поля. Контекстное меню, связанное с бланком запроса, позволяет скрывать или, наоборот, показывать строки «Имена таблиц» и «Групповые операции».
100
Глава 5
Заполнив строку Условие отбора, мы сможем, наконец, провести выборку из базы,данных. Допустим, мы хотим просмотреть все записи, касающиеся господина Новикова. В колонке Фамилия надо ввести условие отбора- "Новиков", как показано на рис. 5.5. Этой информации достаточно, чтобы программа отобрала все строки, где в поле Фамилия записано это слово. Символьные константы полагается заключать в кавычки. Но даже если вы ввели фамилию без кавычек, программа все равно поняла бы вас и подставила бы кавычки сама. По аналогии в колонке бланка запроса Дата исполнения можно было бы записать условие >Я01,01.1998#, и программа отобрала бы все записи для 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. Кроме этого, в левый список включены папки, содержащие функции, константы и операторы, которые могут быть использованы в выражении. Средний список служит для показа элементов, входящих в выбранный объект из левого списка. Например, если в левой области указано имя конкретной таблицы (например, Заказано), то средний список будет содержать имена ее полей. Если выбрана «папка» с функциями, то средний список будет содержать перечень групп функций. И наконец, правый список служит
-О Поставщик и - CD Сотрудники -СЗ Типы - СИ Товары
' •
-
Рис. 5.6, Построитель выражений: момент создании вычисляемого поля для запроса
для выбора самых примитивных объектов. Для того чтобы перенести имя объекта в выражение, нужно щелкнуть два раза мышью имя объекта в одном из нижних списков. Кнопка Назад позволяет отменить ввод данных в выражение. Текст выражения можно редактировать и обычным образом. Кнопки с изображенными на них знаками математических операции позволяют быстро вводить соответствующие символы в выражение. В нашем примере следует поступить так: найти таблицу Заказано, щелкнуть поле Цена (в средней области), щелкнуть на кнопке со знаком умножения, щелкнуть поле Количество, щелкнуть на кнопке ОК. После того как окно построителя выражений закрыто, полезно посмотреть. что записано в строке «Поле». В нашем случае это будет: Выражение!: [Заказано]![Цена]*[Заказано]![Количество] Слово «Выражение!» можно заменить на слово «Сумма», потому что это будет заголовок новой колонки. После этого запрос можно переключить к режим просмотра. На рис. 5.7 показана таблица-запрос для нашего примера. Выражения, созданные с помощью построителя, могут быть весьма сложными. Кроме традиционных знаков математических действий существует еще несколько операторов. Between A n d - заменяет знаки «больше или равно» и «меньше или равно». Например, условие Between 1981 And 1994 эквивалентно условию >=1981 And <=1994. Оператор In позволяет использовать списки значений. Например, выражение
Глава 5
104 Сотрудники Запрос
;:
1
]" tfena* ™ Количество | Крылова Анна
Крылова Анна Айна к Новиков Павел . Новиков Павел .... Новиков Павел
_ Крылова
_
-
lanpoc на выборку
Новиков Павел Новиков Павел Ч~-...:^^.
ГКг,-.-
01-05-1998 Sir Rodiey's Scones Sir Rodney'? S 01-05-1998 Tourtiere Tcurtisre 05-05-1998 Konbu Konbu Genen Stiouyij Genen Shniw Nord-Osl Maijesliermi Nord-Osi Matji NuNuCa Nuss-Nougal NuNuCa NussOnginal Frankfurter gr Original Franki Outback Lager Outback Lagei O-...U.,-, D™.!.—
Рис. 5.7. Таблица-запрос с вычисляемым полем In ("Петров";"Сидоров")
позволяет отобрать записи с указанными фамилиями. Выражение Not Null (Is Not Null) используется для отбора непустых записей в указанном поле. Выражение Is Null используется для отбора пустых записей в указанном поле. \ - обратная косая черта обозначает деление целых частей делимого и делителя. Результат округляется до целого. - обозначает операцию возведения в степень. Mod - операция получения остатка от деления целых частей аргументов. Знак & используется для «сложения» данных символьного типа. Для соединения строк можно использовать и более привычный знак «плюс». Например, следующие три выражения эквивалентны; "Петров" "Петр" & "ов" "Петр" + "ов"
Оператор Like используется для создания масок при определении строк с неизвестными символами и требует дополнительных специальных символов и правил синтаксиса. ? - знак вопроса обозначает любой одиночный символ. Например, если неизвестно, как написать: Саг! или Karl, то условие можно задать как Like "?arl". * - звездочка обозначает любую последовательность символов. tt - обозначает любую неизвестную цифру. [ ] - квадратные скобки подразумевают, что перед выполнением запроса должно быть активизировано окно диалога с приглашением ввести параметр, являющийся критерием отбора. Выражение в скобках выводится в этом окне в качестве сообщения-под сказки.
Запросы
Ю5
Логические операторы также используются для построения условий отбора. Они могут применяться к двум или более выражениям и используются со скобками. Чаще всего используются связки And (логическое И) и Ог (логическое ИЛИ). Кроме них, часто используется оператор логического отрицания Not. Условие Not "Иванов" позволяет выбрать все строки, которые НЕ содержат указанный литерал в соответствующем поле. Есть и более «экзотические» связки: Eqv, Xor, Imp. Перед их использованием полезно заглянуть в справочник по математике. Например, результат выполнения логической операции Imp (импликация) зависит от порядка следования операторов, Операторы «меньше» и ((больше» могут использоваться не только с числовыми данными, но и с датами или текстом. Применительно к текстовым строкам они позволяют отбирать записи, предшествующие указанной строке или следующие за ней. В этих случаях учитывается алфавитный порядок значений поля. Например, выражение [Город]>"Москва" подразумевает, что в поле Город надо отобрать все названия, которые стоят в алфавитном списке ниже Москвы.
5.4. Перекрестный запрос Перекрестный запрос - это операция построения таблицы для вычисления итоговых значений на основе существующей таблицы или запроса. Перекрестный запрос создается в предположении, что исходная таблица содержит необходимые данные для формирования заголовков строк и столбцов новой таблицы. Для иллюстрации работы мастера перекрестных запросов рассмотрим таблицу Заказы из базы данных «Борей». Эта таблица содержит записи обо всех заказах, сделанных клиентами за определенный промежуток времени. Используя эту таблицу, при помощи перекрестного запроса можно проследить распределение клиентов компании по городам. Вся необходимая информация в таблице уже имеется. Для запуска мастера перекрестного запроса надо нажать кнопку Создать на вкладке Запросы, выбрать из списка Перекрестный запрос и нажать кнопку ОК. На первом шаге мастера, показанном на рис. 5.8, надо выбрать таблицу. Бели необходимые для запроса поля находятся в разных таблицах, то вначале необходимо создать запрос, который создаст виртуальную таблицу со всеми нужными полями. В нашем случае все проще: мы же выберем имя таблицы Заказы и перейдем к следующему шагу, нажав кнопку Далее.
Глава 5
106 Со1дание перекрестных таблиц :
Выберите таблицу или запрос поля которых необходимо вывести в
• Для включения попей из :: нескольких таблиц сначала :! создайте обычный запрос. содержащий есе необходимые поля |
Рис. 5.8. Первый шаг мастера перекрестных запросов
На втором шаге мастера (рис. 5.9) необходимо выбрать поле (поля), значения которого (которых) будут использованы для создания строк таблицы. В нашем случае можно выбрать поле, в котором хранятся имена клиентов (КодКлиента) (при желании можно было бы выбрать имена менеджеров (КодСотрудника). Если поле содержит повторяющиеся значения, то в перекрестном запросе будет выполнена группировка данных. Мы укажем поле КодКлиента, Напомню читателю, что недостаточно выделить нужное поле - его необходимо перенести в список Выбранные поля из списка Доступные поля, нажав кнопку со стрелкой. Программа сразу же показывает, как будут располагаться в таблице значения поля. Поле является подстановочным: таблица хранит только коды клиентов, а из таблицы Клиенты выбираются реальные имена клиентов. На третьем шаге мастера надо определить поле, значения которого будут использованы для формирования колонок и их заголовков (рис. 5.10). Это поле не может быть подстановочным, иначе в заголовках столбцов появятся коды, а не удобные для чтения названия. Выберем поле Город Получателя. Для этого достаточно выделить нужный элемент списка. Каждому уникальному значению указанного поля будет соответствовать свой столбец в новой таблице. Так что вряд ли есть смысл строить таблицу, в которой окажется очень много столбцов.
Запросы
W? перекрестных таблиц Выберите поля, значения которых будут использованы в качестве заголовков строк,
Доступные по ля:
Допускается выбор не более трех попей.
ДатэРаз м ещенич ДатаНазначения ДатаИсполнения Доставка С * они о;ть д остаеки На званиеПопуч эте га .Адреснодучатепя Г ородПолучатели ОбластьПолучателя
Выберите поля по порядку сортировки данных, Например, можно сначала выполнить сортировку значений по странам, а затем по городам.
Выбранные поля:
КодЗаказа
Рис, 5.9. Второй шаг мастера перекрестных запросов Создание перекрестных тайтиц I! Выберите поля для ислопьзования I их !памений е качестве >аголовкое ' столбцов.
J I' Например, чтобы использовать имя каждого сотрудника в качестве заголовка столбца, выберите поле И мяСот рудника.
ДатаРазмешеииа ДатаНазначения ДатаИспопнения Доставке Стоимость Дос тавки НазвамиеПопучателя АдресПолучатэля
Рис. 5.10. Третий шаг мастера перекрестных запросов
Глава 5
10В
На четвертом шаге мастера (рис. 5.11) требуется выбрать функцию, которая позволит сформировать столбец итоговых значений. В нашем примере можно подсчитать общее количество значений (Василий из Костромы сделал 12 заказов, а Егор из Костромы сделал 7 заказов, значит, общее число - 19). Выберем функцию Число (перевод названия хорошо всем известной функции Count).
вычисления необходимо провести для каждой ячейки на пересечении строк и столбцов' Например, можно вычислить сугиу гака JOE для каждого сотрудника (столбец) по страна" и регионам (строка). В&ччслнть итоговое значение для каждой строки?
КадСотрудника ДатаРазмещенмя ДатаНаэнэчения ДатаИ.полнечия Доставка Стоимость Дост авки НазвэниеП олучателя Адрес Пол/чат епя ОбпаствПолучателя Ин дексПолуч а те ля
Г про Д По л уч. | Го род Пилу
Рис, 5.11, Четвертый шаг мастера перекрестных запросов
На последнем шаге мастера (рис. 5.32) не надо соглашаться с предложенным мастером вариантом названия запроса «Перекрестный запрос», а можно использовать другое имя, например «Сводка по городам». Как обычно, на этом шаге есть переключатель, который позволит открыть запрос или перейти в режим конструктора после завершения работы мастера. Теперь можно нажимать кнопку Готово. Полученный перекрестный запрос показан на рис. 5.13. Программа создала в новой таблице поле итогов с весьма длинным именем «Итоговое значение КодЗаказа», в котором просуммировала данные в ячейках таблицы по строкам. В нашем примере это поле содержит количество заказов для каждого клиента. Поскольку заголовок поля слишком длинный, его можно изменить в конструк-
Запросы ' Создание перекрестных таблиц
Г ~ "" ~
Залайте имя загцмса. Заказы „перекрестный Указана все сведения., необходимые для издания матроса с поиощыа мастера. Дальнейшие действия после создания запроса: '. • Просмотреть результаты запроса, О изменить структуру запроса.
[_ Вывести справку по работе с перекрестной табпицей
Рис. 5.12. Последний шаг мастера перекрестных запросов
торе запроса. В соответствующей колонке бланка в строке «Поле» надо заменить эту фразу (которая на самом деле служит именем выражения для этого вычисляемого поля) на что-нибудь более короткое (например, «Итого» или, чтобы было понятнее, «Всего заказов»). и Заказ ы_п е ре крестный :
перекрестный запрос
Lehrnanns Warklsland Let's Slop N S'ncp LILA-Supermefcado LINQ-Delicateses Lonesome Pine Restauranl Magazzmi Alimentari Riunrti Maison Dewey Mere Paillarde Morgenslem Gesundkosl Noiin/South Oceano Allantico Ltda. Old World Delicatessen _ Ottilies Kaseladen
>
....
Запись: [Riff] f
-
П
,^<
[№о'говсе значение | Cowes ] Альбукерке! Анкоридж| Ахен] Бэркисимето ] Барселона] л \
Клиент
^ СЕЛЮ *" "=89
15 » 1Л 13
U
8
I
10 8 13 5 3 5 10
!
10
10
< !
Рис. 5.13. Перекрестный запрос в табличном представлении
'>
110
Глава 5
В определенной ситуации мастер перекрестных запросов мог работать несколько иначе. Четвертый шаг мастера логически связан с предыдущим и может быть не таким, как в рассмотренном примере. Этот шаг меняется в зависимости от того, какое поле выбрал пользователь. Например, если бы мы выбрали поле ДатаИспол нения вместо поля Город Получателя, то мастер не стал бы автоматически присваивать заголовкам колонок значения дат, а предложил разбить временной интервал на равные промежутки. От человека требуется только выбрать протяженность интервала: год, квартал или месяц. Конечно, можно указать и имя поля, и тогда в заголовках колонок будут указаны конкретные даты. Выберем опцию «Месяц» и посмотрим, что получилось. Результат показан на рис. 5.14. Программа использовала информацию, чтобы сгруппировать данные по времени, и показала в каждой ячейке таблицы число записей, соответствующих запросу. Мы узнали, кто, сколько и в какие месяцы оформлял заказы. ., Заказы пе|и;к|>естный_дата : перекрестный мл рос
с1
Клиент Lehmanns Markislatid Let's Slop N Shop LILASupe'metcado LINO-Delicateses Lonesome Pine Restauranl Magazzini Aliment ari Rmnrti Maison Dewey Mere Paillarde Morgenslern Gesundkosl North/South Qeeanc Atlarrtico Uda Old World Delicatessen Ollilies Kaseladen
Рис. 5.14. Перекрестный запрос с группировкой по времени
5.5. Выборка повторяющихся записей Рассмотрим в качестве примера таблицу Товары из базы данных «Борей». Название фирмы-поставщика в этой таблице встречается по нескольку раз. Иногда возникает необходимость сгруппировать записи с одинаковым значением поля для того, чтобы было легче вести их дальнейшую обработку. Самым простым решением является сортировка таблицы по соответствующему полю. В Access предусмотрена также возможность создания специального запроса. Его использование
Запросы напоминает операцию сортировки, но предоставляет пользователю дополнительные возможности. Запрос для поиска повторяющихся записей выполняется при помощи мастера. Для его запуска надо нажать кнопку Создать на вкладке Запросы, выбрать команду Повторяющиеся записи и щелкнуть кнопку ОК. Первый шаг мастера показан на рис. 5.15. Он позволяет определить источник данных для запроса. В нашем примере это таблица Товары. Поиск повторяющихся записей Выберите таблицу или запрос, в которых требуется начти записи с повторяющимися значениями. Например, чтобы найти город, в котором имеется более одного клиента, выберите таблицу "Клиенты". Таблица; Доставке Таблица; Заказами Таблица: Заказы Таблица: Клиенты Таблица: Поставщики Таблица: СотруД"нки Таблица: Типы Показать "| Т_аблицы
С\ Запросы
'";. Таблицы п запросы
Рис. 5.15. Первый шаг мастера повторяющихся записей
На втором шаге, показанном на рис. 5.16, необходимо выбрать поле, в котором будет проводиться поиск повторяющихся записей. Мы указываем поле Код Поставщика. Это подстановочное поле, и в таблице мы увидим названия организаций. При необходимости можно выбрать и несколько полей. Тогда программа будет группировать записи, в которых встречаются одинаковые значения по двум полям. Фактически это эквивалентно сортировке по нескольким полям. На третьем шаге мастера, показанном на рис. 5.17, необходимо выбрать поля, которые должны быть показаны в таблице запроса. Мы указываем поля КоцТовара, Марка, НаСкладе, МинимальныйЗапас. На последнем, четвертом шаге мастера, показанном на рис. 5.18, можно задать имя нового запроса. Фрагмент виртуальной таблицы, являющейся результатом запроса, показан на рис. 5.19.
Глава 5
112 Поиск повторяющихся записей Задайте поля, содержащие повторяющиеся значения Например, если требуется найти город, в котором имеется более одного клиента, следует выбрать поля "Город" и "Регион". Доступные поля;
Поля с повторами:
ивя
КодТовара Мазка __ 1ЯИД1? Е динн Ц эИ змеренм н Цена НаСкладе Ожидается Минин а льны ИЗ а п ас
I i
„„._._..
. .
.__
Отмена
i
< Назад __.„...
_... _. ___
II
Далее >
_,_
I
Готово
__„..........
Рис. 5.16. Второй шаг мастера повторяющихся записей ' поиск повторяют! Выберите дололиительньге паля для отображения вместе с повторяющимися значениями, 3 IK" »»»»
Например, если выполняется nonet; повторений в поле "Город", дополнительно мо^но вывести поля "ИмяКлиента" и "Адрес". Доступные ПС л я
Дополнительные поля:
'КодТипа
I .-•. i КодТовара
Цена Ожидается
I >;71 1
BBBDBOS!
г~—
Отмена
|
< Назад
|| flanee >
Рис. 5.17. Третий шаг мастера повторяющихся записей
j |
Готово
i
Запросы Поиск поггоряпщихся записей Введите имя запроса: Поиск повторений для Товары Дальнейшие действия:
0 Прсимот&еть результаты запроса. О Изменить структуру запроса.
. Вывести справку по работе i. janpcc
Рис. 5.18. Четвертый шаг мастера повторяющихсн записей
"
.:
'-
Поиск повторении для Товары
запрос на выборку
Поставщик >
._
| Код товара v
,™ Марка
c
- *
| На складе Минимальный, з а г э
000
Экзотика
000
Экзотика
Б6 Aniseed Syrup 65 Chang
23 17
Л 25
000
Экзотика
64 Chai
3S
1C J
New Oileans Cajun Delights
63 Chef Anton's Gumbo Mis
New Orleans Cajun Delights New Orleans Cajun Delights
20 Louisiana Hot Spiced Okra
D 4
New Orleans Cajun Delights
19 Louisiana Fiery Hot Pepper Sauce 67 Chef Anton's Cajun Seasoning
76 53
Grandma Kelly's Homestead
70 Uncle Bob's Organic Dried Pears
IS
Grandma Kelly's Homestead
71 Northwoods Cranberry Sauce
' Запись: j Mj
|~
l LtJ.iLJ. .*]
ra 7Э
Рис. 5.19. Результат работы мастера повторяющихся записей
20 0 О
ю
Глава 5
NB
Существует втором вариант использования мастера повторяющихся •записей. Если на третьем шаге мастера не указывать ни одного поля в списке Дополнительные поля, то программа автоматически создаст в запросе поле Повторы, е котором укш/сет, сколько раз встречается запись с тем или иным значением. В полученном запросе уже не будет повторяющихся записей - каждое значение поля повторов будет приведено е запросе один раз. Размер таблицы-запроса будет заведомо меньше, чем размер исходной таблицы. Таким образом, мы можем созоать таблицу-сводку. Потребность в таких таблицах очень часто возникает в пользовательских задачах. Запрос в виде сводки, созданный на основе таблицы Товары, показан на рис. 5.20. Единственный недостаток такой таблицы - программа не стала использовать возможность подстановки для поля КодПостзвщикз и вывела числовые значения. дЭ Поиск повторении для Товары : запрос КодПоставщика пдле |
Повторь
Рис. 5.20. Запрос показывает, сколько раз встречалось определенное значение поля
Такая сводка обладает одной особенностью: в ней не указываются записи, которые не имеют дублей по значению заданного поля. Это значит, что в столбце Повторы вам не встретится единица. Если при редактировании исходной таблицы в ней станет меньше повторяющихся значений поля, то и таблица-запрос автоматически уменьшится. Если в исходной таблице совсем не останется повторов, то таблица-запрос станет пустой. Полезно помнить об этом эффекте, когда надо отредактировать поле, для которого требуется задать индексацию «без совпадений», а совпадения имеются. Подобный запрос наглядно покажет, какие значения встречаются в поле более одного раза. Редактируйте поле исходной таблицы, пока запрос не станет пустым, а затем можете смело индексировать таблицу.
Запросы
115
5.6. Другие способы группировки записей Для группировки записей можно применять и мастер простых запросов. Используем таблицу Заказы из базы данных «Борей». Запустим мастер простых запросов и выберем поля таблицы: Код Сотрудника, СтоимостьДоставки и ДатаИсполнения. На втором шаге мастера (рис. 5.2) выберем опцию Итоговый. В этом случае, кроме установки переключателя, надо нажать кнопку Итоги и установить флажки в окне Итоги, как показано на рис. 5.21 (каждый флажок отвечает за отдельную операцию). На следующем шаге мастера была выбрана (для примера) группировка поля дат по месяцам. Итоги | Какие итоговые значения необходимо вычислить? !
Попе
sum
Стоиюсть Дос тавки
Avg
Min
Max
пп п
Подсчет числа записей в Заказы
Рис. 5.21. Окно Итоги
В результате запрос должен выглядеть так, как показано на рис. 5.22. Мы видим, что программа создала два дополнительных поля, а также произвела группировку данных по именам менеджеров и датам. В результате получилась таблица, удобная для анализа: легко сравнить затраты на доставку товаров по месяцам, годам и сотрудникам. Кроме того, в последнем столбце произведен подсчет количества записей, попавших в одну группу. Еще один способ группировки данных - использование конструктора запроса. Строка «Групповая операция» содержит список функций и во многом определяет вид данных запроса. Под групповой операцией понимается обработка и обобщение значений данного поля при помощи определенной функции. В результате в таблице запроса меняется расположение или количество записей.
116
Глава 5 1 >
.' Заказы Запрос Сотрудник
i ДэтаИсполнечия по месяцам
> Белова", Мария белсвэ, Мария Белова, Мария
-
J
запрос на выборку Sum- Стой мостьДоставгаГр Count-Заказы | 1
Август 1996 Август 1997
• ;• : 540 .ЗОр
Апрель 1Э97
36 ,01 р.
Апрель 1993
1 054,83 р.
Белова, Мария
Декабрь 1996
461 .60р.
Белова. Мария
Декабрь 1997
£73.36р
Белова, Мария
Июль 1996
140.51р.
Белова, Мария
Июль 1997
563.13р.
Белова, Мария
Июнь 1997
129,В9р.
Запись' [J^J
\
•
986,33р.
Белова, Мария Белова, Мария
-
• '
1 UJLHJ • ° иэ 200
Рис. 5.22. Запрос с группировкой данных
Групповая операция позволяет легко создать вычисляемое поле. Допустим, мы хотим подсчитать в запросе, сколько раз встречается каждое значение некоторого поля. Для этого надо создать в бланке еще одну колонку для этого поля и определить для нее групповую операцию Count (подсчет). В качестве источника информации выберем таблицу Заказы из базы данных «Борей». Выясним, кто из клиентов сделал больше всего заказов. Создадим простой запрос (можно с помощью мастера), в котором будет единственное поле КодКлиента. Поскольку поле подстановочное, в нем будут автоматически использованы текстовые названия. Теперь модифицируем этот запрос. 1. Откроем его в режиме конструктора. 2. Установим курсор на вторую, свободную колонку в строке «Поле». 3. Раскроем список в строке «Поле» и выберем поле КодКлиента (появятся две колонки с одинаковыми именами). 4. Во вновь созданной колонке раскроем контекстное меню и выберем команду Групповые операции. 5. В строке «Групповая операция» выберем из списка опцию Count. 6. Во вновь созданной колонке в строке «Сортировка» зададим режим сортировки по убыванию. Готовый запрос показан на рис. 5.23.
Рис. 5.23. Подсчет количества одинаковых значений поля
5.7. Редактирование данных с помощью запросов Существуют запросы, которые позволяют автоматизировать изменение данных в таблицах. В больших базах данных не всегда удобно вручную изменять информацию. В некоторых случаях необходимы специальные процедуры для внесения изменений по заданному алгоритму. Рассмотрим варианты таких запросов.
Запрос на добавление Запрос на добавление позволяет скопировать данные из одной таблицы ь другую, не прибегая к помощи буфера обмена. Записи могут перемещаться между разными файлами баз данных и между базами данных разного типа. Допустим, мы Хотим добавить записи в таблицу Товары базы данных «Борей» и у нас есть таблица с такой же структурой, названная Товары2. Для выполнения запроса на добавление надо выполнить следующие действия: На вкладке Запрос нажать кнопку Создать и выбрать режим Конструктор. Активизируется вспомогательное окно Добавление таблицы. 2. Выберите из списка таблицу Товары! и нажмите кнопку Добавить. Таблица появится в окне запроса. Закройте вспомогательное окно. Мы определили таблицу, которая будет источником данных при выполнении запроса. 1.
ff6
Глава 5
.-ij Microsoft Access : Файл
Правке
|ид
вставка
Запеос
Сервис
Окно
^правка
~^ Выборка Запрос! : lanpoc на выборку
О' Перекрестный •j'f. Создание таблицы... Л\ Обновление *fj Добавление...
КмТонрв I Марка 'кодПостаечи ! v КодГипа
•% Удаление
Поле Имя таблицы Сортировка Вывод на экран Условие отбора
....
НЛП
Рис. 5.24. Создание запроса «на добавление»
3. В режиме конструктора на панели инструментов находится список Тип запроса. Выберите из него элемент «Добавление» (рис. 5.24). Откроется окно Добавление, изображенное на рис. 5.25. В этом окне выберите в списке имя таблицы, в которую надо добавить данные, - Товары. Обратите внимание, что переключатель в окне позволяет указать, в какую базу данных добавляется информация: в текущую или в какую-нибудь другую. После этого окно можно закрыть. Добавление Добавление записей в имя таблицы;
товары
0 в текущей базе данны Ов другой базе данных: иця файла:
Рис. 5.25. Окно Добавление
Запросы
TIQ
4. Теперь надо определить поля, которые будут добавлены в таблицу Товары. Идеальным вариантом является тот, когда поля обеих таблиц совпадают. Тогда, щелкнув два раза по символу «звездочка», мы укажем, что должны быть скопированы все поля. Соответствующая информация появится в бланке запроса. 5.
Осталось нажать кнопку Запуск, и можно, открыв таблицу, проверить, правильно ли выполнена операция. Несколько замечаний; а новые записи размещаются в таблице в зависимости от ее структуры: от параметров полей, индексов и режимов сортировки; а если требуется переместить только часть полей, то каждое поле надо предварительно переносить в бланк запроса отдельно, двойным щелчком мыши; а при желании можно добавить не все записи из таблицы-источника, а только некоторые, в соответствии с заданным условием. В этом случае нужно перенести каждое поле в бланк запроса отдельно и заполнить строку ((Условие отбора». Например, для отбора записей, относящихся к периоду позже I марта 2004 года, в этой строке в колонке для поля, определяющего период времени, надо ввести следующее выражение: >Я1/03/2004#; а перед выполнением запроса можно увидеть данные, которые будут вставлены в другую таблицу. Для этого достаточно переключить режим просмотра запроса: выбрать из списка Вид элемент «Режим таблицы»; а выполнение запроса на добавление не должно нарушать целостности данных, поэтому не всякий запрос может быть выполнен. Осложнения могут вочникнуть, если таблица-приемник связана с другими таблицами и выполнение запроса приводит к нарушению уникальности ключа. Запрос не будет выполнен и в том случае, когда нарушается принцип уникальности записей для индексированного поля, в котором запрещены совпадения; а запрос на добавление (если макет его сохранен) можно выполнять неограниченное число раз. Если вы обновите данные в таблице-источнике и снова активизируете запрос, то новые данные будут добавлены в таблицуприемник; а вы можете открыть запрос в режиме конструктора и модифицировать его. Сам запрос при этом выполняться не будет. Выполнить его в режиме конструктора можно путем нажатия кнопки Запуск. Если же вы выберете запрос и нажмете кнопку Открыть на вкладке Запросы, это приведет к немедленному запуску (выполнению) запроса;
Глава 5
120
a Access предоставляет последний шанс отменить запрос перед его выполнением. На экран выводится окно диалога, в котором сообщается, сколько записей будет добавлено. Если пользователь подтвердит выполнение операции, отменить ее действие будет впоследствии невозможно (придется искать их другим способом и удалять вручную).
Запрос на обновление Запрос на обновление обеспечивает одну из важнейших сервисных функций СУБД - автоматизированную обработку данных. Действительно, что стоила бы программа, если бы не позволяла редактировать данные в таблице программным способом? Такие запросы позволяют существенно сэкономить время оператора, выполняющего редактирование информации. Возможности алгоритмического обновления данных заложены в запросы Access изначально, поэтому правило создания таких запросов предельно простое: сначала создается обычный запрос, а затем в его бланке заполняется строка «Обновление». ,
24 бутылки по 250 мл 32 коробки по 500 г 20 банок по 1 кг 18 кг упаковка 10 коробок по 12 шт 30 коробок 24 упаковки по 4 шт. 24 упаковки по 500 г 12 упаковок по 250 г
Для того чтобы внести изменения не во все записи, а только в те, где это необходимо, в бланке запроса нужно сформулировать условие отбора. На рис. 5.26 показана таблица с данными о товарах. Для товаров из категории «Кондитерские изделия» значение минимального запаса увеличим на десять процентов. Последовательность действий будет такая: 1.
Создадим запрос с помощью мастера простого запроса и добавим в него таблицу Товары, выбрав поля КодТипа и МинимальныйЗапас. 2. Откроем запрос в режиме конструктора.
Запросы 3. По таблице Типы определим, какой код соответствует типу «Кондитерские изделия» - 3. 4. В запросе для поля Код Типа введем условие отбора: =3. 5. Выберем из списка Тип запроса элемент «Обновление». В бланке появится строка «Обновление». 6.
Для поля МинимапьныйЗапас в строке «Обновление» введем формулу: lnt( [МинимальныйЗапас] * 1,1)
7.
Просмотреть данные, подвергающиеся обновлению (одно поле), можно, если переключить запрос в режим таблицы (командой Вид ==> Режим таблицы). Кнопка Запуск (с красным восклицательным знаком) позволяет выполнить обновление в режиме конструктора (рис. 5.27). „J Товары_нзмененне минимального запаса: запрос на обновление
КодТоиара Марка Код Постав Тнла
Попе: КодТипа Имя таблицы: Товары Обновление: Условие отбора:
М и н н м зл ьньйЗалас Товары Int ([Минина л »ныйЗаг1эс]*1Л
или:
Рис. 5.27. Запрос на обновление в режиме конструктора
^
После выполнения запроса можно открыть таблицу Товары и убедиться, что значения минимального запаса для выбранного типа товаров действительно изменились (где было, к примеру, 10, станет 11). Поскольку величины в этом поле являются целыми (нельзя хранить на складе 0.3 коробки конфет), в формуле использована функция округления до целого IntQ. В формуле использовано также имя поля МинимальныйЗапас из самого запроса, а не из таблицы (этого вполне достаточно). При необходимости запрос можно сохранить и, изменив параметры на бланке, выполнить другое обновление.
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 Новая форма
Автоматическое создание форм с полями, расположенными в один столбец,
Выберите в качестве источника данных таблицу или sanpoc:
Заказь
Рис. 6.1. Окно для выбора вида формы
Существует три стандартных вида форм, которые программа может построить автоматически. Используем для примера таблицу Заказы из базы данных «Борей». Применяем вариант «Автоформа: в столбец». Программа создаст в этом случае форму, показанную на рис. 6.2. Действительно, все поля таблицы выстроены на ней «в столбец». В таком случае на экран выводится одна из записей таблицы. На этом рисунке форма оставлена в том виде, как она была сгенерирована программой. Столбцов получилось два из-за того, что полей много. Есть и недостаток: подписи находятся слишком близко к полям, и для подписей не хватает места. Этот недостаток легко исправляется вручную, в режиме конструктора (надо увеличить для всех полей величину отступа от левого края). В остальном форма получилась вполне приемлемой. Видны также списки подстановочных полей. Ленточная форма показана на рис. 6.3. Она похожа на таблицу, но данные в ней расположены не так компактно, как в таблице. Каждая запись занимает отдельную строку - «ленту». Для форм, создаваемых автоматически, можно выбрать фоновый рисунок. С рисунком формы смотрятся, несомненно, привлекательнее. В режиме конструктора выберите команду Формат => Автоформат и измените фон в режиме диалога. В режиме просмотра форм в меню Окно появляется команда По размеру формы. Эта команда позволяет автоматически настроить окно формы. Допустим, вам необходимо, чтобы в ленточной форме была видна только одна запись. Вы делаете окно по высоте меньше чем нужно, так, чтобы текст одной строки не был виден целиком, а затем применяете указанную выше команду. Программа сама установит высоту окна оптимальным образом.
Глава 6
126 ',-Jl
*
Заказы Код заказа
10246
Индекс получат; 90110
Клиент
WarbanHerkku
v
Сотрудник
Кротов, Андрей
v
Дата размещен!
04-07-1 99G
Дата назначен":
01-08-1ЭЭ6
Дата исполненн Доставка
-
16-07 -193Е Почта
v
Стоимостьдост! Получате пь
Страна получате Финляндия
32. 33р. Wailian Heikku
Адрес получат ef Torikatij38
.
Город лолучател Оулу Область получат сь:
!
i !^
™ lED ' 1
v
S3
i" rO^i~F*] »* °
Рис. 6.2. Форма «в столбец» -3 Зшн Дата размещения
Дата назначения
10218 Wailian Heikku
v Кротов. Андрей
v
04-07-1 99S
01-1)8-1936
10249 TomsSpezialitaten
v Акбаев. Иван
v-
05-07-1996
16-08-1336
10250 HanaiiCames
v
•%••
03-07-15%
05-08-1 996
10251 Victuals en stock
v Еабкина. Ольга
v.
03-07-1 ЭЭ6
05-08-1996
10252 Supiemes delice^
v Воронова Дарья
v
09-07-1996
ОбОЕИЭЭ?
Код заказа Клиент
»
• iHtbi 1 Ч ]
!
<j!
3 1..M >l 11^*1 ™ 33°
Сотрданнк
Воронова. Дарья
<
>
Рис. 6.3. Ленточная форма
Табличная форма не отличается от обычной таблицы. На самом деле, это и есть обычная таблица, имеющая статус формы. Или, иными словами, для формы установлен режим таблицы. Это можно сделать с помощью списка Вид (на главной панели инструментов). Для того чтобы увидеть истинный вид табличной формы, надо использовать этот список и выбрать из него элемент «Режим формы». Обычно табличная форма при переключении в «Режим формы» принимает вид ленточной.
Формы
6.2. Мастер форм Создание форм с помощью мастера происходит примерно так же, как и с помощью генератора автоформ, но мастер предоставляет больше возможностей. С помощью мастера можно определить, какие поля надо использовать в форме. Поскольку можно выбирать поля разных таблиц и запросов, появляется возможность сделать форму на основе связанных таблиц. Используем в качестве примера базу данных «Борей». В ней есть таблица Товары, которая связана с таблицей Заказано по значению поля КодТовара. Тип связи - «один-ко-многим». Даже из названий таблиц понятно назначение этих данных: первая таблица хранит информацию обо всех товарах на складе, а вторая - о том, что было продано (с разбивкой по заказам). Можно создать форму, в которой были бы показаны обобщенные данные по каждому товару. Для этого удобно использовать мастер. Чтобы запустить мастер форм, перейдите на вкладку Формы, а затем щелкните команду Создание формы с помощью мастера. Первый шаг мастера форм показан на рис. 6.4. Здесь надо указать июля, которые необходимы для построения формы. Их можно выбирать как из таблиц, так и из запросов. Сразу хочу сказать: брать большое количество полей из связанных таблиц не имеет смысла - мастер в этом случае не сможет построить правильно работающую форму. Мы выберем некоторые поля из указанных таблиц и перейдем к следующему шагу. Создание форм Выберите поля для формы. Допускается выбор нескольких таблиц или запросов
Таблицы и запросы Таблица: Заказано Доступные паля: КодЗаказа
КодТовара Г > £~| Ко дПоставшик а -* Товары.Цена Заказана.Цена Количество
Ш [«I
Рис. 6.4. Первый шаг мастера форм
'.;
Глава 6
Второй шаг мастера форм показан на рис. 6.5. Мастер определил по типу связи, что необходимо построение двух форм, так как в одной запрошенные данные разместить физически невозможно. Предлагается два варианта: создать форму с подчиненной формой или две формы (вторая будет запускаться кнопкой из первой). Выберем первый вариант - более компактный.
;-Псл синенные фермы ; Г • Связанные фориы
Рис. 6.5. Второй шаг мастера форм
На третьем шаге мастера (рис. 6.6) надо выбрать тип формы. Мы уже познакомились с типами в предыдущем разделе. Выберем табличный вариант, хотя это непринципиально - можно было бы выбрать и ленточную форму. Следующий шаг мастера (рис. 6.7) - дизайнерский. Содержание формы нельзя изменить, но можно выбрать стиль: фон и стиль оформления полей (шрифт, рельеф). Стиль «Камень» используют довольно часто - он удобен для восприятия, не отвлекает внимание. Слово «Подпись» в левой части окна напоминает нам, что мастер использует в форме подписи полей, если они были определены в таблице. Точнее, подписи используются для объекта «надпись», привязанного к полю. Действительно, форма достигает такого уровня дизайна, что обычные имена полей с цифрами, со знаками подчеркивания вместо пробелов между словами смотрятся как-то несолидно. Я рекомендую использовать в формах подписи, тем более что на их создание тратится немного времени.
Формы
129 Создание форм Выберите внешний вид подчиненной форты;
Последний шаг мастера форм показан на рис. 6.8. Здесь можно задать имя для новых объектов (теперь мы видим, что будут созданы две формы, одна из них подчиненная) и выбрать направление дальнейшей работы: просмотреть готовую форму или взяться за доделку того, что не сумел сделать мастер форм.
5-870
130
Глава 6 Создание форм Задайте имена форч: шорма:
Товары!
Подчиненная фориа
Заказано подчиненная форгча
Казаны е« сведения, необходимые для создания форкы с помощью мастера. Дальнейшие действия: ly Открыть форму для просмотри и ввода данных. С-' Изменить макет формы,
Q Вывести ^правку по работе с формой?
Рис. 6.8. Пятый шаг мастера форм
Результат работы мастера форм показан на рис. 6.9. Для каждого вида товара в подчиненной форме показан процесс продажи этого товара: каждая запись соответствует одному заказу, который был выполнен фирмой-продавцом. Поскольку количество доступных записей в подчиненной форме может быть любым, в ней предусмотрена собственная полоса прокрутки. Подчиненная форма представлена в табличном виде: ширину столбцов и высоту строк можно изменять при просмотре, не прибегая к режиму конструктора. В целом такие формы достаточно удобны. В том случае, когда какие-то параметры форм надо изменить (например, размеры), форму надо открыть в режиме конструктора и переделать.
6.3. Конструктор форм Так же как таблицы и запросы, формы можно редактировать в режиме конструктора. Для его запуска на вкладке Формы есть две кнопки: изменить существующую форму можно, нажав кнопку Конструктор, а запустить пустое окно конструктора, чтобы начать работу с новой формой, можно, щелкнув кнопку Создать, а потом выбрав пункт «Конструктор» в окне диалога.
Формы
13!
. ^^ . - , bSbi •-
_i Товары1
m™.
--:'--
'
код
'
.'
говоря
,'.-''..
.
'-':..''"--
Марка
Gustai's Knack eBrod
Носивший
PBKnacketffodAB
Цена
'
в .; \ . •
--
1
v; .,. 345,00р.
Змвшро
Цена
Количество
i
;
Ш "
320.00р. 400,00р
10
15%
400,00р
'" -V '•; ' Запись; [И j < ] |
1э™ £ЩТ) |
|А
Скидка
25%1 Г| 0%Ш
400 ,00 р
, "" i ;••>_! . .
|
70 70
320,00р.
шш*!««
5 [
в
о%1 ;. o%g v -
2i ю
;
,,.. :,^s,...
ГСЕШИ"."
Рис. 6.9. Форма, созданная мастером форм
Окно конструктора форм показано на рис. 6.10. Одновременно с окном открывается Панель элементов. На этой панели расположены кнопки для создания элементов управления (флажков, кнопок, надписей и т. д.)- Кроме этого, на панели есть кнопка с белой стрелкой для выбора объектов формы и кнопка-переключатель Мастера для включения режима мастера - если этот режим включен, то при создании нового элемента управления автоматически запускается мастер, чтобы определить параметры элемента. Разработчик может отказаться от использования мастеров, и тогда элемент управления создается как заготовка, без определения многих свойств. Их необходимо будет задать на дальнейших этапах. На рисунке также показано контекстное меню, связанное с рабочим полем конструктора. Оно тоже имеет ряд полезных команд. Цвет заливки/фона - выбор цвета фона формы. Линейка, Сетка, Панель элементов - показ и скрытие соответствующих инструментов разработчика. Колонтитулы - по аналогии с печатными документами, форма может иметь верхний и нижний колонтитулы для размещения неизменяемой информации. Заголовок/Примечание формы - эта команда позволяет создавать зоны, похожие на колонтитулы. Свойства - открытие окна свойств рабочей области формы.
132
Глава 6
(.еткэ '•;'; Панель апенентов ' l'
КОЛОНТИТУЛЫ
и] ЗаголовотУпримечание форчы yf
Свойства
Рис. 6.10. Окно конструктора форм
При работе с формой в режиме конструктора следует активно использовать мышь. Например, почти всегда приходится менять размеры рабочего поля формы, а это удобнее всего делать мышью. Границы заголовка и примечания тоже сдвигаются мышью, причем указатель мыши надо наводить точно на верхний край серой горизонтальной линейки, чтобы указатель принял вид черного крестика с двумя стрелками. Окно свойств формы открывается при помощи контекстного меню, связанного с черным квадратиком, находящимся на пересечении горизонтальной и вергикальнои линеек. Есть несколько важных параметров, которые определяют вид окна в целом. Подпись - текст, выводимый в заголовке окна. Режим... -несколько параметров, которые определяют тип формы. Полосы прокрутки - подключение одной или двух полос прокрутки (или отключение обеих). Кнопки перехода - подключение или скрытие кнопок перехода по записям, Автоматический размер - изменение размера формы для показа записи целиком (в главном меню есть команда Окно => По размеру формы, которая выполняет такую же функцию). Тип границы-возможность изменения размеров окна пользователем (по умолчанию принята опция «Изменяемая», то есть изменение размеров разрешено). Кнопки размеров окна, Кнопки закрытия - вывод кнопок управления окном.
Формы
133
Всплывающее окно - если «да», то окно формы появляется над всеми открытыми окнами. Модальное окно - окна такого типа не позволяют пользователю работать с другими окнами, пока не закрыто это. Наиболее распространенный тип модальных окон - сообщения программ, выводимые на экран. Параметры, которые отвечают за представление информации в окне, находятся на вкладке Данные. При разработке форм полезно познакомиться со всеми свойствами, чтобы иметь возможность применять их в случае необходимости. Разрабатывая форму, необходимо решить ряд задач: определить источник данных (обычно таблицу или запрос), создать необходимые элементы управления и при необходимости добавить программы для обработки данных. Очень часто для настройки элементов форм используется окно свойств. Каждый объект имеет присущий ему набор параметров, поэтому содержание окна свойств может меняться. Запускается это окно командой Свойства, которая есть как в контекстных, так и в обычных меню.
6.4. Элементы управления Надпись Надпись - самый простой элемент управления. Он позволяет разместить в форме текст небольшого объема: заголовок, подсказку, копирайт и т. д. Для ее создания надо (в режиме конструктора) нажать кнопку Надпись на панели инструментов и нарисовать прямоугольник в рабочем поле формы. Потом внутри прямоугольника можно написать текст (рис. 6.! ]). И Форма 1 : форма
I I
. , - 1 • | . г . 1 . з • 1 • 4 • 1 - 5 • i • s • i • 7 • - з • i • 6 • i • и;я * Область данных
Е
го надпись)
I iv '
< Рис. 6.11. Надпись в форме
>"'"
134
Глава 6
Поскольку надпись - простой объект, то и свойств у него немного. Для примера познакомимся с некоторыми из них (другие элементы управления имеют такие же свойства). В окне свойств есть несколько вкладок. На вкладке Макет можно найти такие параметры. Подпись -текст, из которого состоит надпись. Адрес гиперссылки, Дополнительный адрес - надпись можно превратить в гиперссылку (с локальным или интернетовским адресом). Второй параметр используется, когда надо указать адрес внутри документа. Вывод на экран - элементы управления можно скрывать (и использовать, к примеру, для хранения данных для программ). Режим вывода - можно создавать элементы управления, которые видны на экране, но не выводятся на печать и наоборот. Эта возможность может оказаться полезной, если на основе формы создается документ для вывода на бумагу. От левого края, От верхнего края, Ширина, Высота - параметры, определяющие размеры и положение элемента управления. Их всегда приходится подбирать, чтобы форма выглядела красиво. Тип фона, Цвет фона - параметры, которые позволят создать цветной фон элемента управления. Тип границы, Цвет границы, Ширина границы - опции, определяющие рельефность объекта и внешний вид его рамки. Цвет текста, Шрифт, Размер шрифта, Насыщенность, Курсив, Подчеркнутый, Выравнивание текста, Направления чтения, Начертание цифр, Левое поле, Верхнее поле, Правое поле, Нижнее поле. Междустрочный интервал параметры форматирования текста. Их назначение ясно из названий. Обычно используются далеко не все из них. На вкладке Данные есть только один параметр: Смарт-теги. Он позволяет создать ссылку для открытия стандартных функций приложения Outlook (например, календарь запланированных пользователем мероприятий). На вкладке События находится перечень событий, которые можно включить в работу формы. События позволяют запрограммировать реакцию программы на определенные действия пользователя. Для надписи фиксируются такие события: Нажатие кнопки — щелчок левой кнопкой мыши на объекте; Двойное нажатие кнопки - двойной щелчок левой кнопкой мыши на объекте; Кнопка вниз - кнопка мыши нажата, но еще не отпущена; Перемещение указателя -движение указателя мыши; Кнопка вверх - кнопка мыши отпущена.
Формы
135
На вкладке Дополнительно есть такие свойства. Имя - уникальный идентификатор элемента управления. Он может использоваться в программах для изменения свойств элемента, считывания данных, изменения данных и т. д. В имени можно использовать русские буквы, но нельзя использовать пробелы. По вертикали - с помощью этого параметра можно выводить текст в вертикальных строках. Всплывающая подсказка - хорошее свойство, позволяющее придать форме профессиональный вид. Все кнопки известных программ снабжены всплывающими подсказками, и пользователи привыкли к этому. Идентификатор справки - ссылка на элемент встроенного справочника. Контекстное меню - возможность создать контекстное меню для элемента управления. Другой вариант - вписать в эту строку имя существующего макроса, тогда этот макрос будет выполняться по щелчку правой кнопки мыши. Дополнительные сведения - возможность сохранить здесь строку длиной до 2048 символов. Обычно это свойство используется при программировании. Кроме этих вкладок в окне присутствует вкладка Все. На ней повторены все параметры, которые есть у данного элемента управления. Такую вкладку удобно использовать для поиска необходимого параметра. Если вы хотите получить подробные сведения о каком-либо параметре, то, открыв окно свойств, установите курсор на поле ввода параметра и нажмите клавишу F1. Многие параметры имеют стандартные имена и используются в подпрограммах на Visual Basic. В терминах программирования - это свойства (properties) объектов, NB
Многие элементы управления состоят из двух взаимосвязанных частей, одна из которых - надпись. Чтобы не путать эти объекты с автономными надписями, их обычно называют подписями.
Флажок Работая с программой, мы очень часто используем флажки для установки параметров и выбора режимов. Поэтому нет смысла подробно объяснять, что такое флажок и для чего он может быть нужен. Главное, на чем надо остановиться, каждому флажку ставится в соответствие переменная логического типа, которая может принимать значения ДА или НЕТ в зависимости от состояния флажка (сброшен или установлен). Гораздо интереснее разобраться, как на практике внедрить флажок в форму. Для примера создадим флажок, который будет управлять выводом и скрытием поля.
136 1. 2. 3. 4. 5.
Глава 6 Раскройте форму в режиме конструктора, нажмите на панели Панель элементов кнопку Флажок и очертите в форме место для будущего флажка. Задайте для флажка подпись (например, «Скрыть»). Раскройте окно свойств поля и найдите его имя (допустим, это Поле1}. Передвиньте флажок и его надпись так, чтобы они оказались рядом с полем пользователь должен понимать, что именно скрывает или показывает флажок; Раскройте окно свойств флажка и найдите имя флажка (допустим^ это Флажок!). Выберите вкладку События. Нажмите кнопку с тремя точками в строке Нажатие кнопки. В открывшемся окне выберите опцию «Программы». Откроется окно редактора Visual Basic. В нем надо создать следующую подпрограмму; Private Sub Флажок1_СНс1<() If Флажок1 Then Forms! Форма"!! [Поле!]. Visible - True Else
Forms! Форма"!! [Лоле1]. Visible - False End If End Sub Алгоритм работы подпрограммы достаточно прост. Если флажок установлен (If Флажок!), то свойство видимости (Visible) для Поля1 из формы Форма! устанавливается как ДА (True), то есть поле видимо. В противном случае (Else) то же самое свойство устанавливается как НЕТ (False), то есть поле скрывается. Выполнение подпрограммы происходит после щелчка мышью на флажке, то есть после изменения его состояния. Теперь при работе с формой присутствие поля будет определяться состоянием флажка. В данном примере работа с флажком заключается в анализе его значения: имя флажка представляет собой переменную логического типа. Основным событием, которое меняет статус флажка, является нажатие кнопки (click). Подпрограмма обработки этого события в нашем примере ничего не делает с самим флажком. Она лишь меняет свойство Visible указанного нами поля. Этот пример можно несколько усложнить. Допустим, некоторые поля должны выводиться в форме только после ввода пароля. Тогда подпрограмма для обработки события флажка может выглядеть так; Private Sub Флажок1_С11с1<() If Флажок"! Then If 1при1Вох("Введите пароль") = '2345987" Then Forms!Форма1![Поле1],Visible - True
Формы
}37
Else Forms! Форма1!Флажок1 = False End If Else Forms! Форма1![ Поле1].Visible - False End If End Sub
В этом случае при попытке открыть поле с помощью установки флажка программа выведет на экран окно диалога (стандартная функция InputBoxQ) с сообщением «Введите пароль», и пользователь должен будет ввести пароль. Потом введенное значение с помощью оператора If будет сопоставлено с записанным в памяти паролем (2435987). Если пользователь введет пароль неправильно, поле не откроется, а флажок будет сброшен. Это самый примитивный способ защиты данных паролем. Здесь даже не используется скрытие введенных пользователем символов (для этого пришлось бы создавать еще одну форму), а значение пароля должно храниться в зашифрованном виде. И тем более этот способ не имеет никакого отношения к системе доступа, существующей в Access. Такой прием не может использоваться для защиты от преднамеренного взлома. Зато это подводящий способ для защиты от неосторожных действий пользователя или разграничения полномочий там, где пользователи в определенной степени доверяют друг другу. Кстати, существует еще и барьер компетентности: есть много людей, которым не сломать и такую защиту... Бывает немало ситуаций, когда простых средств защиты вполне достаточно.
Поле. Пример вычисляемого поля Поле - самый распространенный элемент управления. При создании формы в полях размещаются данные из таблиц и запросов. Поле состоит из подписи и собственно поля (рис. 6.12). Обе части имеют свой набор свойств. Если поле создается в режиме конструктора, то имя поля (в нашем примере это Поле2), которое присваивается программой автоматически, повторяется и в подписи. Разработчик может стереть подпись и вписать в нее текст по своему выбору, Слово «Свободный» означает, что для этого поля не определен источник данных. Когда форма создается с помощью мастера, то для всех полей автоматически находится источник данных. Когда разработчик создает свое поле, он должен поду-
т
Глава 6
мать, как это поле будет заполняться данными. Вариантов тут несколько. Поле может использовать данные из таблицы (запроса), заполняться программным способом или быть вычисляемым (содержать формулу). В главах, посвященных примерам баз данных, неоднократно рассказывается о создании таких полей. 3 Формп! : форма
' 1-Г|[р]§§1
, i . | , , £ • i • 3 • i • t • i • 5 • i • 6 • i • 7 •_ i • В • i • 3 • i • -'" !
| •f i -
Область данных
ный
<
JV
>; 1
Рис. 6.12. Надпись в форме
Здесь же в качестве примера рассмотрим, как создается вычисляемое поле. Допустим, в форме есть поле, в котором занесена дата окончания некоторой работы. По всей видимости, данные для этого поля надо брать из некоторой таблицы, но мы для примера создадим автономное поле, в которое пользователь может занести дату вручную. Рядом создадим поле-индикатор, которое будет менять свой вид, если срок окончания работы прошел, а работа не завершена. Признаком завершения работы служит установка флажка. Получается микроорганайзер на одну задачу — такие «кирпичики» удобно использовать при разработке баз данных. Создадим поле с подписью «Дата» и именем ДатаОкончания. С помощью окна свойств зададим в строке Формат поля «средний формат даты». Создадим флажок с подписью «Выполнено» и именем ДОК (чтобы была мнемоническая связь с первым именем). Теперь создадим вычисляемое поле. Подпись для него можно не задавать (в группе элементов уже есть две подписи). Назовем это поле СообДОК. Никаких дополнительных свойств пока задавать не будем, но сделаем это поле достаточно длинным, чтобы в нем уместилась фраза. Теперь для поля надо создать функцию, которая будет управлять значением поля. Вот ее листинг: Function SoobData(PoleDat As String, PoleFlag As String, PoleSoob As String) As String
Dim Dim Dim Set
PData As Control Flag As CheckBox Soob As TextBox PData = Forms!Форма1.Controls(PoleDat)
Формы
139
Set Flag - Forms! tt1/1/198Qtt Then Select Case Date - PData Case 1 To 3
SoobData = "Меньше З дней" Soob,ForeColor = RGB(0, 80, 0) Case 0 SoobData = "Сегодня" Soob.ForeColor = vbBlue
Case Is < 0 SoobData - "Просрочено" Soob. ForeColor = vbReci Case Else SoobData = Soob.ForeColor = vbBlack End Select End If End Function
У этой функции три аргумента, которыми являются имена созданных полей. Поэтому функцию можно использовать и для д р у г и х трех полей такого типа. С помощью операторов Dim и Set происходит передача аргументов функции. Предполагается, что функция будет использоваться в форме с именем Форма!. Оператор If позволяет функции работать, если флажок сброшен и дата введена. Сама функция реализована с помощью блока Select .,. End Select (стандартная конструкция Visual Basic). В зависимости от разницы в днях между указанной датой и текущей датой (Select Case Date - Pdata) функция возвращает одну из фраз. NB
Date — это системная переменная, хранящая текущую дату. Разность между текущей и указанной датой положительна, если указанная дата предшествует текущей.
Одновременно меняется цвет шрифта (свойство ForeColor) поля, которое соответствует объектной переменной Soob.
Глава 6 Функцию надо поместить в модуль. Выберите команду Сервис => Макрос ^> Редактор Visual Basic. Щелкните название базы данных на левой панели редактора и выберите из контекстного меню команду Insert Module. Появится окно модуля (имя первого модуля обычно Модуль!), в котором и надо вставить текст такой функции. Теперь для поля СообДОК можно определить источник данных. В окне свойств в строке Данные надо вписать следующее выражение: =ЗооЬОаГа("ДатаОкончания";"ДОК";"СообДОК")
В принципе форма уже будет работать, и это можно проверить, но реакция на изменение данных в полях окажется недостаточно быстрой. Необходимы еще команды обновления формы. Например, в окне свойств поля ДОК на вкладке События надо определить такие события, как После обновления и Нажатие кнопки. Для этого необходимо воспользоваться кнопкой с тремя точками и выбрать опцию «Программы». В заготовку подпрограммы надо вписать единственную команду Me.Refresh (обновить текущую форму). Например, для первого события функция будет выглядеть так: Private Sub flOK_AfterUpdate(} Me.Refresh
End Sub
Для поля ДатаОконнания можно определить свойства После обновления и Потеря фокуса. На этом создание компьютерного «узелка на память» заканчивается. Созданные поля являются «свободными» (unbound), поэтому данный пример будет работать, если ввести в поле дату и щелкнуть флажок. После закрытия формы данные не сохранятся. В реальном проекте эти поля должны быть привязаны к данным из таблицы. Вид полей показан на рис. 6.13.
Выполнено I Дата:
23-ЯНВ-20СМ
Рис. 6.13. Поля в форме
fj
меньше 3 дней
Формы
14)
Списки В Access существует две разновидности списков как элементов управления: «Список» и «Поле со списком». Рассмотрим работу с ними на примере поля со списком в базе данных «Борей». Для создания этого элемента в форме надо выполнить следующую последовательность действий: 1.
В режиме конструктора формы нажмите кнопку Поле со списком и нарисуйте мышью прямоугольник - место будущего списка. Запустится мастер полей со списком.
2. На первом шаге мастера установите переключатель в положение «поле со списком будет использовать значения из таблицы или запроса»; 3. На втором шаге мастера укажите необходимую таблицу или запрос. Выберем таблицу Поставщики. 4. На третьем шаге мастера задайте поля таблицы. Выберем поля: КодПоставщика, Должность и ОбращатьсяК. Порядок выбора полей определяет порядок следования их в списке, когда последний раскрывается в форме. 5. На четвертом шаге мастера можно выбрать режим сортировки. Выберем КодПоставщика. 6. На пятом шаге мастера настройте ширину колонок списка. Мастер предложит скрыть ключевой столбец (КодПоставщика). Это разумное решение, согласимся с мастером. 7. На шестом шаге мастера необходимо задать подпись для поля со списком. Я выбрал подпись «Поставщик». 8. После того как мастер закончит работу, необходимо задать обязательные свойства списка. Высоту рамки списка целесообразно выбрать равной высоте строки в форме. На рис. 6.14 показана форма со списком в режиме конструктора. Г"орма2 : форма
, , . , . , .2 , i . j . i . 4 • i - 5 • i • e • i • 7 • i • e • i • э • i • * Область данных ТоВШИС
^Пос
i «Cec бодиь»
V"
•
1 Рис. 6.14. Поле со списком в режиме конструктора
142
Глава 6
Раскрыв контекстное меню, относящееся к списку, выберем команду Свойства и посмотрим, какое имя программа дала списку. Имена назначаются гак, чтобы избежать повторений. Например, у меня список был назван ПолеСоСпискомО. Затем на вкладке Макет найдем свойство Заглавия столбцов. По умолчанию там стоит «Нет», то есть заголовки не выводятся. Установим это свойство как «Да», потому что списки, состоящие из нескольких столбцов, лучше смотрятся, когда у последних есть заголовки. Затем выберем вкладку События. Она предназначена для создания подпрограмм, которые позволят списку нормально функционировать. Выберем строку Нажатие кнопки. Ясно, что в приложении должно что-нибудь происходить, когда пользователь раскроет список и щелкнет мышью один из его элементов. Поэтому для такого события надо предусмотреть реакцию системы. Справа от строки свойства имеется кнопка с тремя точками, которая позволяет раскрыть окно модуля (окно построителя) для редактирования подпрограмм. Щелкнем эту кнопку и выберем опцию «Программы». Доработаем процедуру обработки события так, чтобы она приняла следующий вид: Private Sub ПолеСоСпискомО_СПс1<() MsgBox "Из списка выбрано:" & ПолеСоСпискомО
Ena Sub
В дальнейшем при выборе элемента списка будет раскрываться окно сообщения. Далее закройте окно, в котором вы вводили код. Форма с раскрытым списком показана на рис. 6.15. Напомню, что для реальной работы с формой вы должны выйти из режима конструктора. Поработав со списком, можно убедиться в том^ что полю списка и переменной ПолеСоСпискомО присваивается значение поля КодПоставщика, соответствующее выбранному элементу списка. В реальной программе в качестве элементов списка лучше использовать текстовые поля — с ними удобнее работать. Л Форма? ': форма
.
,,
Поставщик
Запись: Q-Г] 1 |
Дельность Менеджер по скупкам Координатор Представитель Главный менеджер "" Специалист по экспорту Главный менеджер
53Э@ _ _^
(Обращаться к л Вероника Кудрявцев; Shell в у Burke Regda Murphy Ycshi Magase Antonio del Valle Seavs Ian De'i'ling
Рис. 6.15. Поле со списком в режиме просмотра
v
Формы
143
Есть несколько способов организовать выбор данных в списке. Во-первых, можно отредактировать свойство списка Источник строк (на вкладке Данные) Оно содержит инструкцию SQL для отбора записей. В нашем примере она такова: SELECT Поставщики.КодПоставщика, Поставщики,Должность, Поставщики.ОбращатьсяК FROM Поставщики ORDER BY [КодПоставщика];
Изменить указанное свойство удобнее всего, запустив построитель запросов при помощи кнопки, расположенной прямо в строке. Допустим, мы хотим отбирать строки для списка по значению поля Должность. Для этого в запросе, в колонке, соответствующей этому полю, надо указать критерий в строке «Условия отбора». Например, чтобы в поле показывались только должности, в название которых входит слово «менеджер»: Like "•'менеджер*"
Окно построителя запросов с введенным условием показано на рис. 6.16- В результате инструкция SQL приобретет следующий вид: SELECT Поставщики.КодПоставщика, Поставщики Должность, Поставщики.Обраща~ьсяК FROM Поставщики WHERE (((Поставщики.Должность) Like "«менеджер*")) ORDER BY Поставщики.КодПоставщика;
Как видим, в инструкцию, определяющую источник строк, для списка добавилась опция WHERE, которая определяет условие отбора записей из таблицы:. J^ Инструкция SQl- : построитель запросов
и,..i*
• !* : U'
[ЮмЛостаещ .Название Обращаться) ; Должность v
-V
;<; -
^ Попе Имя таблицы Сортировка Вывод на s к pan Условие отбора
КодПоставщика Поставщики по возрастанию
J
Должность Поставщики
-<\
»_{ ОбращатьсяК Поставщики
'.,
J\
Like "Менеджер"
или
V
< !
Рис. 6.16. Построитель запросов для списка
>
]
144
Глава 6
У этого способа есть недостаток - отсутствие универсальности. Можно заменить в запросе указанное выражение (Like...) на значение параметра: [Название должности]
Квадратные скобки обязательны, иначе программа воспримет слово как текстовую константу. Имя параметра не должно совпадать с именем какого-либо поля. Кроме того, это имя должно быть достаточно понятным пользователю. потому что оно будет играть роль подсказки. Теперь при попытке раскрыть список программа будет выводить на экран окно для ввода параметра, показанное на рис. 6.17. Задав то или иное значение (в нашем случае «Директор»), пользователь обеспечит выполнение фильтрации в списке. В данном случае будут отбираться записи с точным совпадением значения параметра и поля. Введите значение параметра
Г?
Назван не должности Директор \
ОК
[
Отмена
Рис. 6.17. Окно для ввода параметра
Если в таблице есть поля с числовыми данными, то можно задавать и математические критерии отбора. Допустим, мы работаем с таблицей Товары и нам надо показать только те записи из таблицы, для которых значение поля НаСкладе больше нуля. Иначе говоря, показать только те товары, которые имеются на данный момент. Для этого необходимо выполнить следующую последовательность действий. 1. 2. 3.
Раскрыть окно построителя запросов для списка, как и в предыдущем примере. В пустом столбце бланка в строке «Поле» выбрать из списка имя НаСкладе. В той же графе в строке «Условие отбора» ввести условие: >0. Для такого запроса инструкция SQL (с отбором трех полей и сортировкой по полю Марка) будет следующая: SELECT Товары,КодТовара, Товары.Марка, Товары.НаСкладе FROM Товары WHERE (((Товары.НаСкладе)>0)) ORDER BY Т о в а р ы . М а р к а ;
Разумеется, ее можно напечатать прямо в строке Источник строк окна свойств списка. Несмотря на то что в запрос добавлено еще одно поле, в списке оно видно не будет.
Формы
145
Если уже готовый список требуется доработать - создать в нем еще одно поле, то нам потребуется: 1. 2.
Раскрыть окно свойств списка, выбрать вкладку Макет. В строке Число столбцов указать величину на единицу большую, чем была. В строке Ширина столбцов указать ширину нового столбца, например: С е к ; 2 , 5 4 4 с м ; 2 , 5 4 4 с м ; 2, 544см.
Рамки объектов Если в форму надо вставить графический объект, для него создается элемент управления, называемый рамкой. Существует несколько разновидностей рамок. На панели инструментов Панель элементов есть три кнопки для создания рамок. Кнопка Рисунок предназначена для размещения в форме изображения из графического файла. Как только пользователь очертит мышью контур области рисунка в форме, программа откроет диалог для связывания рамки с графическим файлом. После выбора файла рисунок будет вставлен и виден в режиме конструктора. Пользователь должен установить рамку вокруг1 рисунка с соответствии с размерами последнего. Кнопка Свободная рамка объекта предназначена для внедрения объектов OLE из других приложений. При ее нажатии Access открывает окно диалога для выбора программы-источника, поддерживающей протокол OLE. Можно даже создать объект прямо в режиме конструктора. Например, если во время работы мастера при определении типа объекта выбрать «Bitmap Image)- (рис. 6.13), то после создания объекта будет подключено окно графического редактора MS Paint, и с помощью его инструментов можно будет создать рисунок (или использовать готовый). Можно также выбрать опцию «Документ Microsoft Word», и тогда графический объект (с текстом) можно создать средствами текстового редактора. Единственный недостаток такого объекта: он не может прокручиваться и должен быть показан в рамке целиком. Кнопка Присоединенная рамка объекта предназначена для внедрении объектов OLE, хранящихся в базе данных, например рисунков в таблицах. В этом случае пользователь сам определяет источник данных.
Глава 6
146 Microsoft Office Access Тип объекта; 0CosAfffb новый О Создать tp файла
Media Cip MIDI Sequence Package Добавление в документ нового объекта типа 'Bitmap Image'.
Рис. 6.18. Окно для выбора типа объекта
NB
Размеры рисунка и рамки не согласуются по умолчанию. Разработчик должен сам подобрать их в режиме конструктора. Если рисунок больше, чем рамка, то он усекается. Это соответствует опции «Фрагмент» свойства рамки Установка размеров Два других варианта позволяют выбирать способы автоматического согласования размеров рисунка ирамки: «Вписать в рамку» и «По размеру рамки». Оба эти варианта предполагают масштабирование рисунка, а не изменение размеров рамки. При масштабировании качество рисунка, как правило, ухудшается.
Кнопки Кнопки довольно часто приходится использовать в форме. При создании кнопки в режиме конструктора надо обрисовать ее контур и задать надпись на ней, Кроме того, кнопку можно сделать с графическим изображением (с помощью свойства Рисунок). Рисунок можно взять из файла или воспользоваться встроенной коллекцией значков, состоящей из нескольких десятков изображений. Мне особенно нравится рисунок дискеты 5,25 дюйма. Кнопка сама по себе работать, не будет, для нее обязательно надо определить процедуру, которая будет выполняться при ее нажатии. Эту процедуру надо связать с событием Нажатие кнопки (Click) с помощью окна свойств. Например, кнопка для открытия другой формы (с именем Форма!) должна иметь такую процедуру обработки события: Private Sub Кнопка1_СПс1<() DoCmd.OpenForm "Формат" End Sub
Формы
147
Если кнопка создается для пересчета данных в форме (что бывает необходимо, если в форме есть вычисляемые поля), то программа должна быть такой: Private Sub KHoriKa1_Click() Me.Refresh End Sub
Объект Me означает текущую форму, поэтому такая процедура годится для любой формы. В форму можно, например, включить кнопку, которая запустит встроенный калькулятор. В коммерческих базах данных это особенно актуально. Тогда процедура будет такая: Private Sub Кнопка1_СПс1<() On Error Goto Err_KHoriKa1_Click Dim stAppName As String stAppName = "Calc.exe" Call ShelKstAppName. 1) Exit_KHonKa1_Click: Exit Sub Err_KHom
Можно сделать кнопку и без программирования. Есть набор стандартных кнопок, который доступен в мастере кнопок,
Мастер кнопок До сих пор мы создавали кнопки, самостоятельно определяя их свойства, но для их разработки можно использовать мастер (на панели инструментов Панель элементов должна быть нажата кнопка Мастера). Начало процесса создания кнопки такое же, как и в предыдущих случаях. - надо использовать инструмент Кнопка в режиме конструктора формы (или отчета) и обрисовать мышью контур будущей кнопки. Затем в дело вступает мастер кнопок. Он содержит фиксированный набор готовых инструментов, и на его первом шаге надо выбрать подходящий. Все они разбиты на категории. Названия кнопок приведены ниже. Категория "Переходы по записям»: Найти далее;
148
Глава 6 Первая запись; Поиск записи; Последняя запись; Предыдущая запись; Следующая запись. Категория «Обработка записей»; Восстановить запись; Добавить запись; Дублировать запись; Печать записи; Сохранить запись; Удалить запись. Категория «Работа с формой": Закрыть форму; Изменить фильтр формы; Обновить данные формы; Открыть страницу; Открыть форму; Печать текущей формы; Печать формы; Применить фильтр формы. Категория "Работа с отчетом^: Отправить отчет в файл; Отправить отчет по почте; Печать отчета; Просмотр отчета. Категория "Приложение»: Выйти из приложения; Выполнить приложение; Запустить MS Excel; Запустить MS Word. Категория «Разное»: Автонабор номера; Выполнить запрос; Выполнить макрос; Печать таблицы.
Формы
149
Выберем для примера кнопку Выйти из приложения. На втором шаге мастера можно выбрать изображение на кнопке. Это может быть произвольный текст или рисунок. Мастер предлагает набор стандартных рисунков, но разработчик может выбрать графический файл, нажав кнопку Обзор. На третьем шаге мастера надо определить имя кнопки. Имя кнопки представляет собой переменную, и его не надо путать с подписью - текстом, изображенным на кнопке. На этом работа мастера кнопок заканчивается. На рис. 6.19 показан пример формы с заготовкой обычной кнопки и с кнопкой выхода из программы. Кнопки, созданные с помощью мастера, обеспечивают весьма быструю реакцию программы - использовать их удобнее, чем команды меню.
Рис. 6.19. Кнопки в форме
Группа переключателей В некоторых случаях необходимо создавать группу элементов управления. Группа имеет свою рамку и подпись. Например, если надо создать группу переключателей, выполните следующие действия: 1. 2.
Откройте форму в режиме конструктора. Нажмите кнопку Группа переключателей на панели инструментов Панель элементов. Нарисуйте мышью прямоугольник, в пределах которого должны находиться будущие переключатели. Предусмотрите место и для подписей к ним. 3. Ответьте на вопросы мастера групп. Первый шаг мастера групп показан на рис. 6.20. Здесь надо задать подписи будущих переключателей. Для примера можно сделать три переключателя.
Глава 6
150 нданме группы переключателей Группа переключателей содержит набор кнопок, флажков или выключателей. Выберите един «5 вариантов, Задайте подпись для каждого переключателя: Подписи; Первая подпись Вторая подпись "71 Третья подпись
Рис. 6.20; Первый шаг мастера групп
Второй шаг мастера показан на рис. 6.21. На этом шаге надо выбрать переключатель, который будет включен по умолчанию. В реальной разработке почти всегда требуется, чтобы все значения по умолчанию для настроек приложения были специально определены, иначе пользователю будет трудно работать. Допустим, по умолчанию должен быть выбран третий переключатель. издание группы переключите лен Задать переключатель, используемы* по умолчат»»? S аат С в» m
Третий шаг мастера групп показан на рис. 6.22. Надо определить значение каждого переключателя группы. Эти значения будут анализироваться в некоторой процедуре (код которой еще предстоит написать), чтобы было ясно, какой переключатель выбрал пользователь. Числовые значения достаточно удобны, и можно принять предложенный мастером вариант.
Формы
15! Создание группы переключателей При выборе одного из переключат е пей гэуппы его значение присваивается самой группе, Г ш пни
, = 2 Задайте значения для каждого переключатепя,
Рис. 6.22. Третий шаг мастера rpvnn
Четвертый шаг мастера изображен на рис. 6.23. Программа предлагает выбрать тип элемента управления: переключатель, флажок и л и выключатель. Интересно, что в этом окне все три типа элементов управления представлены в работающем виде. Они служат для выбора самих себя, одновременно являясь иллюстрацией работы и внешнего вида элементов управления. Для нашего примера подойдет т и п «переключатель», хотя можно было бы использовать и другие два типа. Выключатели выглядят как кнопки, а флажки - это галочки. Принципы их работы очень похожи.
Последний шаг мастера позволяет только задать имя группы переключа! елей. Допустим, это имя Группа4. Конечно, в реальном проекте подпись должна нести смысловую нагрузку, и надо задать свою. А вот имена для элементов управления программа задает автоматически. Разработчику не рекомендуется их менять, что-
Глава 6 бы избежать дублирования имен и путаницы в программах. При работе приложения имени группы будет присваиваться значение выбранного переключателя. Переключатели, объединенные в группу, обладают свойством зависимой фиксации. Иными словами, в каждый момент времени только один переключатель может быть включен. Если бы мы просто ввели в форму несколько переключателей (а инструмент для этого тоже есть- кнопка Переключатель), то их можно было бы устанавливать независимо друг от друга - это была бы независимая фиксация. Можно создать процедуру, которая будет проверять состояние переключателей. Для этого создадим в форме кнопку (с именем Кнопка4) и определим для события Нажатие кнопки следующую процедуру: Private Sub Кнопка4_С11сК() п - Me Группа4
MsgBox "Выбран переключатель номер " & п End Sub Как видим, получить порядковый номер выбранного переключателя совсем несложно. Его можно сохранить в переменной числового типа и использовать в дальнейшем в программе. Форма с переключателем и кнопкой для его тестирования показана на рис. 6.24. Каждый переключатель состоит из двух объектов: собственно переключателя и подписи к нему. При доработке формы каждую такую пару можно перемещать в границах группы. Указатель при этом должен иметь форму раскрытой ладони. Конфигурацию рамки группы тоже можно менять. . i Формат : форма
V О Первая подпись 0 Вторая подпись О Третья подпись
Запись: [ И ]
Рис. 6.24. Пример переключателя
Подчиненная форма Одна форма рассчитана на использование одного набора данных: таблицы, связанных таблиц или запроса. Во всех случаях предполагается, что источник данных может быть виртуально представлен в табличном виде - форма может переключаться в табличный режим. Использование в форме других данных - по-
Формы
153
мимо этой виртуальной таблицы - всегда наталкивается на определенные трудности, которые разрешаются тем или иным способом. Довольно часто эта задача решается путем написания специальных процедур. Другим способом является создание подчиненной формы. В тех случаях, когда между таблицами существует связь «один-ко-многим», перед разработчиками встает проблема размещения данных из связанных таблиц в одном документе. Рассмотрим алгоритм создания таких форм. Это позволит решить очень многие проблемы, возникающие при разработке реальной базы данных. Допустим, есть две таблицы, которые объединены при помощи связи типа «один-ко-многим». Сначала надо выбрать место в основной форме для размещения подчиненной. Последнюю можно будет прокручивать, но тем не менее размеры полей должны соответствовать размеру области формы. Основную форму надо открыть в режиме конструктора. Для запуска мастера подчиненных форм надо нажать кнопку Подчиненная форма/отчет на панели инструментов Панель элементов и нарисовать мышью прямоугольную область, в которой должна расположиться подчиненная форма. Обратите внимание, что этот прием можно использовать и при разработке отчетов. Вас не должно смущать то, что вы не знаете точных размеров будущей формы. Их можно будет установить после окончания работы мастера. На первом шаге мастера надо указать источник данных для новой формы: таблицу или запрос. Возможно, это уже будет готовая форма, и тогда ее имя можно выбрать из списка, щелкнув переключатель. На втором шаге надо определить поля для подчиненной формы. На третьем шаге мастера надо определить тип межтабличной связи. В списке обычно представлены различные варианты связей. Программа пытается найти все возможные варианты, а разработчик должен выбрать один из них. Четвертый шаг мастера традиционный: можно только определить имя формы. В зависимости от конкретной ситуации работа мастера может незначительно меняться. В целом создать подчиненную форму можно очень быстро, при условии, что связи между таблицами уже определены. В конце работы мастера сохраняются сразу две формы. Если же надо доработать подчиненную форму, приходится изменять параметры объекта в режиме конструктора основной формы и параметры подчиненной формы, открыв ее отдельно, тоже в режиме конструктора. Размеры столбцов подчиненной формы можно изменять при ее просмотре, а размер самой подчиненной формы в целом - только в режиме конструктора. Пример создания подчиненной формы рассматривается в главе, посвященной созданию базы данных рассылки.
154
Глава 6
Вкладки Мы привыкли к тому, что для увеличения информационной емкости окна разработчики программ часто используют вкладки. В этом случае последние имеют размер, близкий к размерам окна. На самом деле вкладка, как любой элемент управления, может иметь произвольные размеры. Для создания вкладок надо нажать кнопку Вкладка на панели Панель элементов и начертить мышью контур, который должны занимать вкладки. По умолчанию создаются две вкладки, но их количество может быть увеличено. Удалять вкладки придется по одной: выделить ненужную и нажать клавишу Delete. Вместе с вкладкой уничтожаются все расположенные на ней элементы управления. Несколько вкладок объединяются в набор вкладок. Для создания новой вкладки в наборе надо выделить уже имеющиеся и выбрать команду Вставка => Вкладка. Подписи для вкладок определяются, как и для других элементов управления, в окне свойств. Подпись появляется на ярлычке вкладки, поэтому она должна быть короткой, но информативной. Для получения доступа к свойствам набора вкладок его надо предварительно выделить. Сделать это проще всего при помощи списка Объект, который доступен в режиме конструктора на главной панели инструментов. Так же как свойства отдельной вкладки, свойства набора предназначены в первую очередь для дизайна. Например, свойство Стиль позволяет заменить привычные ярлычки вкладок кнопками.
6.5. Диспетчер кнопочных форм В Access существует надстройка, которая позволяет создать своеобразный путеводитель по формам и отчетам базы данных - кнопочную форму. К примеру, такая форма открывается при запуске базы данных «Борей» (рис. 6.25). Это удобно: когда форм и отчетов становится слишком много, полезно иметь систему указателей, которая позволит ориентироваться среди множества объектов. Сделать такую форму несложно: достаточно создать форму и разместить на ней рисунок и несколько кнопок для запуска других форм. Допустим, у нас есть несколько форм в базе данных (Форма!, Форма2, ФормаЗ, Форма4). Создадим для примера кнопочную форму в базе данных test 1. rndb —. Разобьем, как обычно, весь процесс на этапы.
Формы
155
Рис. 6.25. Кнопочная форма базы данных «Борей»
1.
Создадим логотип (например, в формате BMP) и вставим его в форму с помощью инструмента Рисунок. 2. Создадим четыре кнопки. Первую с помощью инструмента Кнопка, три последующие командой Правка ^ Дублировать. 3. Введем на кнопках соответствующие надписи и создадим процедуры обработки событий (см. раздел «Кнопки»). В процедуре должна быть единственная команда, созданная по шаблону DoCmd.OpenForrn "Форма!". 4. В свойствах формы определим параметр Кнопки перехода как «Нет» - кнопки перехода по записям здесь не нужны. 5. Сохраним форму и дадим ей имя Старт. 6. Выберем команду Сервис => Параметры запуска и зададим в поле Вывод формы имя нашей формы (рис. 6.26). Обратите внимание, что в этом окне еще много полезных параметров. Теперь при открытии базы данных будет автоматически.запускаться кнопочная форма (рис. 6.27). Она делает базу данных более удобной для пользователя, который может или воспользоваться кнопочной формой, или, закрыв ее, работать напрямую с окном базы данных. Кроме того, такой прием позволяет базе данных выглядеть более эффектно.
Глава 6
156 i pa метры wi пуск а Заголовок приложения; Значок приложения:
'
ЦП:
Вивод формь^страницы;
|—-т?
1
[(отсутствует) Форма! ФормаЭ
Строка пеню: (по умолчанию)
v
• [3 ррпный набор пеню Access || 0 Контекстные мечи по умолчанию
0 Спедиапьньи клавиши Access (Вывод окна базы данных, окна проверки и ; окна Visual Bask, приостановка выполнения)
Рис. 6.26. Окно «Параметры запуска»
Zrapr: форма
Первая форма - "уэепок на память" Вторая форма - блок текста третья форма - примеры кнопок
Рис. 6.27. Пример кнопочной формы
I
Отмена
Глава 7 Книжная база данных (пример) В качестве примера, иллюстрирующего методы работы с БД Access, возьмем создание базы данных электронной библиотеки. Сейчас нетрудно приобрести компакт-диск с тысячами книг в электронном формате, скачать тексты из Интернета или получить их другим способом. Понятно, что для того, чтобы разобраться в большом количестве текстов, необходима БД. Эти подходы можно использовать и для создания БД технической документации или коммерческих документов, Общим принципом таких задач является сбор сведений о каких-то предметах.
7.1. Создание таблиц Создав новую БД, файл которой назовем knigi.mdb (режим Новая база данных), мы сразу переходим в режим конструктора таблицы командой в режиме конструктора. Использовать мастера по созданию таблиц (Создание таблицы с помощью мастера) в данном случае не имеет смысла, потому что нам надо определить все характеристики полей самостоятельно. По той же причине не имеет смысла использовать режим Создание таблицы путем ввода данных. Я всегда рекомендую начинать создание каждой таблицы с ключевого поля. В дальнейшем это облегчит связывание таблиц и заодно позволит нумеровать записи. Имя для поля можно выбрать попроще, например st1. Тип поля -Счетчик (с последовательной нумерацией). Нажмите кнопку Ключевое поле. Теперь поле счетчика станет ключом, который позволит в дальнейшем связывать эту таблицу с другими по значениям поля. Данные поля окажутся автоматически проиндексированы, а на повторение значений будет наложен запрет. Значения поля счетчика будут формироваться автоматически, и нам не надо заботиться ^заполнении этого поля. Все это стандарт работы в Access, и разработчики создают такие поля довольно часто. >' Теперь надо создать поля, которые будут содержать информацию из предмет-* ной области. Мы уже должны к этому моменту продумать, какие поля будут в основной таблице.
158
Глава?
С чего же начать? Допустим, у вас имеется компакт-диск с текстами. Можно посмотреть его: вдруг на нем уже имеется база данных. Тогда целесообразно обеспечить совместимость полей, чтобы данные из одной БД можно было перенести в другую. Допустим, мы нашли базу данных со следующими полями: Имя поля
Формат поля
author
Текстовый, 50 символов
book name
Текстовый, 50 символов
annotation
Текстовый, 50 символов
В нашей БД мы можем создать таблицу, в которой будут такие поля: Имя поля
Формат поля
Жанр
Текстовый, 15 символов
Страна
Текстовый, 20 символов
Серия
Текстовый, 25 символов
Автор
Текстовый, 50 символов
НазваниеКниги
Текстовый, 50 символов
ГодВыхода
Числовой
Аннотация
Memo
Для текстовых полей целесообразно выбрать длину, исходя из максимально возможного количества знаков в поле. По умолчанию устанавливается длина 50 символов. Для поля Автор это нормально, потому что у книги могут быть несколько авторов, а вот название серии вряд ли будет таким длинным. Например, фраза «Жизнь замечательных людей» содержит 25 знаков, так что длину поля Серия можно выбрать равной 30 символам. Для поля года издания можно выбрать формат даты и формат данных уууу. Для данных большого объема и неопределенного формата больше всего подходит поле Memo. Разумеется, в таблице можно было бы создать и другие поля, например поле для кода книги ISDN, но это уже определяется назначением БД. К тому же новые поля можно добавить и позднее. Для имен полей можно использовать русские буквы, но нельзя использовать пробелы. Обычно в формах имена полей заменяют подписями, однако старайтесь давать полям по возможности удобочитаемые имена, потому что эти имена могут
Книжная база данных (пример)
159
«проявиться» там, где трудно создавать подписи, например в подчиненных формах. Конечно, эти проблемы можно решить, но часто БД создается в условиях нехватки времени, так что возможные проблемы надо постараться минимизировать. Для имени таблицы тоже надо выбирать удобные имена. Например, имя каждой таблицы можно начинать словом «Таблица». Тогда имя нашей таблицы будет ТаблицаКнигн. При разработке процедур на Visual Basic это облегчает работу, потому что наверняка в базе появятся такие имена, как ЗапросКнигц или ФормаКнигн. Создание таблицы на этом завершается, и можно приступать к заполнению таблицы данными и/или созданию запроса, но осталась еще одна проблема. Она довольно часто возникает при разработке базы данных. Проблема касается возможного изменения структуры БД. Представим себе, что нам потребуется ввести в базу данных сведения об авторах. Допустим даже (для простоты), что для этого будет достаточно одного поля Memo. Но поскольку в таблице может оказаться несколько книг одного автора, сведения об авторах, во избежание повторения, надо разместить в отдельной таблице (скажем, с именем ТаблицаСведения). Сделать ее несложно, но связать ее напрямую с ТаблицаКниги не удастся: одна книга может иметь несколько авторов. В этом случае придется создать еще одну, третью таблицу, в которой будет указано, какие авторы у той или иной книги. Предвижу возможный вопрос читателя: а что делать с полем Автор из ТаблицаКниги? В данной ситуации это поле оказывается ненужным, но удалять его не стоит. Возможно, при дальнейшем совершенствовании базы данных оно еще пригодится. И еще одно замечание. Если мы реализуем данное решение, то вводить данные в базу можно будет только с помощью формы. Точнее, без формы с вводом данных справится только квалифицированный специалист, но обычно такую работу поручают обычным пользователям, которые не вникают во все тонкости Access. Так что нам обязательно надо «запланировать» этап создания формы. Таблица с именем ТаблицаАвторы должна содержать следующие поля: Имя поля st2
Формат поля Счетчик, ключевое поле, повторы значений не разрешены
НомерКниги
Числовой, длинное целое, повторы значений не разрешены
Таблица с именем ТаблицаСведения должна содержать следующие по, Имя поля
Формат поля
st3
Счетчик, ключевое поле, индексированное, повторы значений не разрешены
Автор
Текстовое, длина 30 символов, индексированное, повторы значений не разрешены
Сведения
Memo
Завершить этап редактирования структуры можно, нажав кнопку Сохранить в основном окне Access или нажав кнопку закрытия окна конструктора. Если таблица до этого не существовала, перед сохранением структуры будет предложено ввести имя таблицы.
7.2. Связывание таблиц. Связи «один-ко-многим» и «многие-ко-многим» Для связывания баз данных необходимо выполнить ряд подготовительных действий. Нажать кнопку Схема данных на панели инструментов основного окна. Схема данных пуста, поэтому автоматически" откроется окно Добавление таблицы. С помощью кнопки Добавить надо включить необходимые таблицы в схему данных. В нашем случае - это три таблицы из предыдущего раздела. 3. Закрыть окно Добавление таблицы. 1. 2.
Теперь в окне Схема данных можно установить связи между таблицами. В нашем примере надо установить м ы ш ь на поле St1 из ТаблицаКниги и перетащить указатель на поле НомерКниги из ТаблицаАвторы. Автоматически откроется окно Изменение связей, в котором можно установить тип связи (рис. 2. 23). В данном случае необходим тип связи «один-ко-многим». То есть одному номеру записи о книге может соответствовать несколько записей из ТаблицаАвторы, Этот тип связи установился автоматически, потому что мы связали поле счетчика с обычным числовым полем. Очевидно, что в поле счетчика каждое значение встречается один раз, а в обычном числовом поле значения могут повторяться. Полезно также установить флажок «Обеспечение целостности данных» и два флажка, которые отвечают за каскадное обновление и удаление данных.
Книжная база данных (пример)
161
С помощью кнопки Объединение можно выбрать свойства связи. Как уже упоминалось в главе 2, есть три варианта. Access установил по умолчанию первый вариант, но я бы рекомендовал выбрать второй: «Использовать все записи из ТаблицаКниги и только те записи из ТаблицаАвторы, в которых связанные поля совпадают». Создание связи завершается нажатием кнопки ОК. Точно так же создается и вторая связь. Мышь следует расположить на поле St3 из ТаблицаСведення и перетащить на поле НомерАвтора из ТаблицаАвторы. Все параметры связи выбираются, как и в предыдущем случае. В результате схема данных приобретает вид, как показано на рис. 7.1.
stl Жанр Страна Серия Автор
НазваниеКниги Издательство ГодВыхода
Рис. 7.1, Схема данных базы knigi
Создав две связи типа «один-ко-многим», мы фактически создали связь, которая носит название «многие-ко-многим». В этом случае любое количество записей из первой таблицы (ТаблицаКниги) может связываться с любым количеством записей из второй таблицы (ТаблицаСведения). ТаблицаАвторы является в данном случае вспомогательным объектом и служит только для обеспечения связи, Поле счетчика St2 не является обязательным и создано «на всякий случай».
7.3. Создание запросов В нашем примере есть две таблицы, содержащие необходимые пользователю данные, и для этих таблиц следует создать запросы. Возьмите за правило сразу делать запрос для каждой таблицы: в формах и отчетах удобнее использовать данные именно из запросов, а не таблиц. Запрос является своеобразным фильтром, который позволяет отбирать нужные записи. Кроме того, в запросе легко создаются новые, вычисляемые поля, которых нет в исходной таблице. 6-870
Глава?
1S2
В данном случае необходимо щелкнуть вкладку Запросы в окне базы данных и выбрать режим Создание запроса с помощью мастера. В окне Добавление таблицы выберем ТаблицаКннги и, выполняя двойные щелчки на названиях полей, добавим все поля в таблицу запроса (рис. 7.2). _,' Запрос! : мпрос на выборку
__-
Д:%$ л'
';
Автор *' НазеаниеКни №дательств; . ГодВыхода . .' v Аннотация '
Н >,
;< i Поле: Л : Имя таблицы: ТаблиилКнигн Сортировка: Вывод ни экран: R /с по вне отбора:
Жанр Та6лии=*<нпги Г/
Страна ТабпииаКнигн V]
Серия ТаблицаКниги
Автор Таблица Книг.)
[7
Г,"
или:
V
<}'"-'
>
Рис. 7.2. Окно конструктора запроса
Закрывая окно, дадим имя новому запросу: ЗапросКнигн. Аналогично сделаем запрос для ТаблицаСведения и дадим ему имя ЗапросСведения. Обратите внимание, что в таблице запроса присутствует строка Сортировка. Если вы знаете, что для определенных полей будет необходим режим сортировки, можно установить для них эту опцию (сортировку по возрастанию или убыванию). Разумеется, к таблице запроса можно вернуться позднее и выбрать необходимые параметры. Для редактирования запросов, так же как и для таблиц, служит кнопка Конструктор.
7.4. Создание формы с помощью мастера Формы могут создаваться для ввода, просмотра или поиска данных, поэтому при построении формы разработчик должен поставить себя на место того, кто будет иметь дело с формой, и представить, насколько легко будет работать. Желательно сразу предвидеть возможные замечания пользователей, чтобы потом не пришлось переделывать готовую работу.
Книжная база данных (пример)
163
Существует множество путей создания форм, но в нашем примере я воспользуюсь только одним. В разделе Формы выберем режим Создание формы с помощью мастера. Используем в качестве источника данных ЗапросКниги и выберем все поля для включения в форму (работа мастера форм проиллюстрирована в главе 6, первый шаг показан на рис. 6.4). После нажатия кнопки Далее, на следующем шаге мастера, выберем вид формы. Режим Выровненный (в одну запись) удобно использовать, когда в форме должно быть много коротких полей. Режимы Ленточный и Табличный предполагают размещение данных в таблице. Представлять нашу форму в виде таблицы неудобно из-за того, что поля достаточно длинные, а еще имеется поле Memo. Поэтому используем опцию Выровненный. В этом случае будет видна только одна запись, но для каждого поля останется больше места (рис. 7.3),
Рис. 7.3. Шаг мастера форм, на котором можно выбрать вариант компоновки полей формы
На следующем шаге мастера можно выбрать стиль художественного оформления. Это, как говорится, дело вкуса, а самый простой вариант - Стандартный (рис. 6.7). Он прекрасно подходит для деловых целей и в тех случаях, когда вкусы заказчика неизвестны. Потом, в режиме конструктора, можно доработать форму, например придать полям различный цвет.
164
Глава?
На последнем шаге мастера необходимо выбрать имя формы. Переключатель «Открыть форму для просмотра и ввода данных» позволяет сразу открыть форму, чтобы посмотреть, как она выглядит. Потом при необходимости можно включить режим конструктора и доработать ее. ~т ФормаКннги -.
П '"*iLi£S™S Жанр 1 Фантастика
s!1 Автор А. Азимов
Страна США
Назван иеКниги Избранное
Серия ГодВькода 1989
Аннотация В сборник классика американской н мировой Фантастики Айзека Авилова включены рассказы из сб. "Путь марсиан" (50-е - 60-е гг.] и роман "Сами боги", написанный писателем о начале 70-и гг. после 1 5- летнего перерыва в литературном творчестве.!
Запись: [к]
*
Г"
~~ПТШЗ£!-м
Рис. 7.4. Форма в режиме просмотра
Готовая форма показана на рис. 7.4. Для проверки можно сразу ввести какиенибудь данные. Если окажется, что характеристики полей выбраны неправильно и в структуру таблицы будут внесены изменения, это не будет автоматически учтено в форме, сформированной на основе этой таблицы. Форму придется создать заново или переделать в режиме конструктора.
7.5. Совершенствование формы Изменение размеров полей При первом взгляде на форму сразу видны ее недостатки. Например, поля st1 и ГодВыхода занимают больше места, чем нужно. И наоборот, длина поля НазваниеКниги явно недостаточна. Откроем форму в режиме конструктора и попробуем изменить размеры полей. Размер поля St1 можно изменить так: 1. Выделить (щелкнуть мышью) само поле. 2. Удерживая клавишу Shift, щелкнуть на подписи к этому полю. Оба поля должны попасть внутрь одной рамки. 3. Перетащить влево правую границу рамки (указатель мыши должен превратиться в двойную горизонтальную стрелку, как показано на рис. 7.5.
Книжная база данных (пример)
Жанр
165
Страна Страна Наз^аниеКфги НаэеаииеКнигч
Рис. 7.5. Форма в режиме конструктора
Снять выделение с поля, щелкнув на свободном месте формы. Расположить указатель мыши выше и левее подписи «Жанр». Нажав левую кнопку мыши, нарисовать прямоугольник так, чтобы внутрь него попали поля Жанр, Страна, Серия и подписи к ним. Границы прямоугольника не должны касаться элементов, которые выделять не нужно. 1. Теперь выделенными оказались сразу шесть элементов. Необходимо передвинуть образовавшуюся группу влево, чтобы использовать свободное место. Указатель надо расположить так, чтобы он превратился в черную раскрытую ладонь. Для того чтобы двигать объект строго влево, можно, удерживая левую кнопку мыши нажатой, несколько раз нажать клавишу «стрелка влево». Это обеспечит более точное позиционирование. 8. Снять выделение с группы. 9. По аналогии выделить поле Серия и его подпись и перетащить правую границу, чтобы увеличить длину поля. После этого, используя уже известные приемы, можно уменьшить длину поля и увеличить длину поля НазваниеКниги.
NB
Режим конструктора форм не имеет средств для изменения масштаба просмотра, а в то усе время границы полей приходится подгонять друг к другу с большой точностью. В этом случае может помочь специальный инструмент Windows «Экранная пупа».
166
Глава?
Еще одна маленькая деталь: выделите поле ГодВыхода и нажмите кнопку По центру в основном окне программы. Это позволит отцентрировать данные поля. Как видите, множество инструментов находится «под рукой», надо только заметить их и использовать. Переключившись в обычный режим формы (кнопкой Вид), можно проверить результат. Он показан на рис. 7.6.
] ФормаКннги $11 Автор А.Азимов
Жанр 1 фантастика
^'
Страна США
'
'.
S'^'—
Ч;
-."
Серия
Название Книги Избранное
ГодБыкодз 198S
Аннотация В сборник классика американской и мироеой Фантастики Айзеке Азимова включены рассказы изсб "Путь марсиан" (50-е - 60-е гг ] и роман "Сами бог-У', написанный писателем в начале 70-к гг. после 1 5-летнего перерьеа в литературном теорчеп ве. '-) Запись; | И | ••
Рис. 7.6. Пример доработанной формы
Обратите внимание, что с точки зрения дизайна вертикальные линии, проходящие слева от полей Страна и НазваниеКниги, должны совпадать.
Добавление нового поля Теперь представим себе, что в исходную таблицу надо ввести новое поле. Допустим, это будет поле с названием издательства. Здесь опять-таки надо подумать, в каком формате представить эти данные. Можно просто указывать название издательства, например «Мир», а можно сформировать строку, которую можно использовать как часть библиографических данных: «М: Мир». Это зависит от задач, которые должны решаться с помощью базы данных. Процесс добавления нового поля можно разбить на этапы. 1. Закройте все объекты, связанные с таблицей (например, ФормаКниги). 2. Откройте таблицу ТаблицаКниги в режиме конструктора. 3. Выделите строку, относящуюся к полю, перед которым надо вставить новое (например, ГодВыхода). 4. Выберите команду Вставка ^=> Строки. 5. Введите имя нового поля; Издательство.
Книжная база данных (пример)
167
В. Выберите формат поля Текстовый и длину 20 символов. Остальные характеристики поля выбираются по умолчанию. 7. Закройте окно конструктора, сохранив изменения в таблице. 8. Откройте запрос ЗапросКнигн в режиме конструктора. 9. Установите текстовый курсор (щелчком мыши) на поле Год Вы хода. 10. Выберите команду Вставка ^> Столбцы. 11. Раскройте список в первой строке новой колонки и выберите поле: Издательство (рис. 7.7). апросКниги : мп рее на выборку
Поле: Серия Иия таблицы: ТаблиилКниги Сортировка: i/ Вывод на экран: Условие отбора;
или;
Автор ТаблицаКниги
F
НазваниеКниги ТаблииаКниги
7.
Издательство ТзолииаКниги
И
"олВыхода ТабпицаКннги г
^п
<
j "
Рис. 7.7. В запрос включено новое поле
12. Закройте окно конструктора запросов. 13. Откройте форму ФормаКниги в режиме конструктора. 14. Расположите указатель мыши над линейкой Примечание формы так, как показано на рис. 7.8,а.
Ф Примечание формы
АнноАия
Рис. 7.8. Редактирование формы: а-перетаскивание линейки примечания: б - перемещение поля
168
Глава?
15. Перетащите линейку вниз, чтобы освободить место для нового поля. 16. Выделите с помощью клавиши Shift одновременно поле Аннотация и подпись к нему и наведите указатель так, чтобы он принял вид раскрытой ладони (рис 7.8,6). 17. Удерживая нажатой левую кнопку мыши, нажмите несколько раз клавишу «стрелка вниз», чтобы поле Аннотация сместилось вниз. 18. Нажмите на панели инструментов Панель элементов кнопку Поле и нарисуйте мышью контуры будущего поля. Обратите внимание, что новое поле состоит из двух элементов: подписи (она имеет имя Text21) и собственно поля, которое первоначально обозначено словом «Свободный» (Unbound), как показано на рис. 7.9.
Свободньрй
I m
м\
I и
•
Рис. 7.9. Вид нового поля в режиме конструктора
19. Установите положение и размеры подписи и поля так, чтобы они соответствовали дизайну формы. 20. Выделите подпись поля Text21 и нажмите кнопку Свойства. Откроется окно свойств элемента. 21. На вкладке Макет в строке Подпись введите слово «Издательство» и закройте окно свойств. 22. Выделите поле и нажмите кнопку Свойства. Откроется окно свойств элемента; 23. На вкладке Данные, в строке Данные выберите из списка «Издательство» и закройте окно свойств. 24. Переключитесь в режим просмотра формы. Легко заметить, что у подписи нового поля не хватает рамки. Создать рамку можно, сравнив свойства существующего элемента со свойствами вновь созданного. На рис. 7.10,а показано окно свойств подписи «Автор», а на рис. 7.10,6 - окно свойств созданного нами поля. Видно, что свойства Тин границы. Достаточно заменить (выбрав из списка) опцию «Сплошная», как рамка появится. Попутно можно установить и одинаковое значение высоты подписи, чтобы элементы выглядели единообразно. В данном случае высота должна быть равна 0,423 см. С помощью
Книжная база да иных (пример}
№
мыши установить точное значение высоты практически невозможно. Разумеется, высоту надо «стандартизировать» и для самого поля Издательство. У меня она получилась несколько больше высоты подписи и оказалась равна 0,503 см.
'Ш
..Т Надпись: Автор__1аЬе1 ДЕтдр_1аЬе1 ^кет
давые
Р«ЧИИ БЫВОДЛ
Тип фона
События
Другие '
.ТНадпис»; LabeliZ
г
UbetZZ
:V.;
1 M*EI
Бее
. . всегда
данные
Режим вызола . . .
. . .Прозрачный
События
Друг™
Все
. . . Всегда
. . Прозрачный
Оформление
, , , обычное
Оформление . . .
Цает границы Ширина границы
.. 0 . , . Свврхтсикая
Цвет границы Ufripi-иэ границы
, . 0 . . Свермоикад
f'ainep шрифте Нэсышенчоеть
... в . оеьр«»й
Раэ*е шрифта . Насыщерность
. , S . . . обыЧНВ11
Подчеркнуты!
. . . Нет
...Нет
ы
.
v |
. обычное
•*
Рис. 7.10. Окно свойсти: а - д л я подписи Автор; б -для подписи нового поля
Часто бывает, что установить с помощью мыши точное расположение по высоте для полей и подписей бывает сложно. Тогда надо воспользоваться окном свойств этих элементов. Открыв окно один раз. его можно не закрывать, а выбирать различные элементы на макете формы и менять параметры в окне. Например, если для подписи «Издательство» значение координаты по вертикали (от верхнего края) равно 2,051 см, а высота элемента равна 0,423 см, то для элемента, расположенного ниже (то есть поля Издательство), значение параметра От верхнего края должно быть равно 2,474см (2,051 + 0,423). Установив точные значения, мы обеспечим совпадение рамок элементов. Скорее всего, таким же способом нужно будет «подогнать» и координаты подписи и поля «Аннотация». Вертикальная координата отсчитывается от верхнего края формы. Как видите, данные расчеты следует производить с точностью до сотых долей миллиметра. Когда мы создавали форму с помощью мастера, расположение полей было выбрано автоматически. Но потом, при переделке формы, такая кропотливая работа оказалась необходима, когда потребовалось обеспечить качественный внешний вид объекта. Переделанная форма показана на рис. 7.11. Как видим, все поля на ней выровнены, и осталось свободное место для какой-нибудь дополнительной информации.
Глава?
170
it!
Жанр 1 Фантастика
Автор А Азимов
Страна США Название Книг и Избранное
ГодВьнода
19SS
Издательство
Мир Аннотация В сборник классика американской н мировой Фантастики Айзека Азимове включены рассказы из сб. "Путь марсиан" (50-*- 60-е гг.] и роман "Сами боги", написанный гмсзт*л*м вначале 70-к гг после 15-летнего перерыва в литературном творчестве.
Рис. 7.11. Форма с новым полем Издательство
NB
В данном примере подразумевалось, что в качестве источника данных для нового поля формы берется поле из запроса ЗапросКниги Это не нужно было проверять, так как изначально вся форма создавалась только на основе этого запроса. Но так бывает далеко не всегда. Проверить, что является источником данных для формы, можно, открыв окно ее свойств. Это делается в режиме конструктора щелчком правой кнопкой мыши на квадратике, расположенном на пересечении горизонтальной и вертикальной линеек. Из контекстного меню надо выбрать команду Свойства, а в окне свойств посмотреть параметр Источник записей на вкладке Данные. Если надо выбрать источник данных для поля из другой таблицы (или запроса^, то в окне свойств этого поля, в строке Данные следует воспользоваться кнопкой с тремя точками. Эта кнопка раскрывает окно построителя выражений, которое позволит выбрать в качестве источника данных любое поле из любой таблицы (или запроса^ или создать вычисляемое поле.
Создание поля со списком. Мастер подстановок Поработав с базой данных какое-то время, вы обнаружите, что она нуждается в дальнейших усовершенствованиях. Например, окажется, что значения некоторых полей необходимо выбирать из списка. Если заполнять поле Жанр произвольным образом, то одно и то же значение может быть записано по-разному: «фантастика», «научная фантастика» или «н/ф». Это приведет к тому, что в дальнейшем будет невозможно проводить сортировку по этому полю или выполнять запросы. В данном случае правильный путь - заранее создать набор допустимых значений и предлагать пользователю выбирать одно из них. В то же время необ-
Книжная база данных (пример}
171
ходимо иметь возможность редактировать этот набор в любое время. Без новой таблицы никак не обойтись. Создадим новую таблицу (назовем ее ТаблшцГЖанры). Она будет содержать два поля. Имя поля st4 /Каир
Формат поля • Счетчик, ключевое поле, индексированное, повторы значений не разрешены Текст, длина 15 символов
Характеристики поля Жанр должны совпадать с характеристиками одноименного поля в ТаблицаКниги - ведь мы будем подставлять данные из одной таблицы в другую. В новой таблице желательно сразу создать несколько записей, чтобы можно было на практике проверить работу списка. Для этой таблицы можно сразу же создать (ЗапросЖанры) и задать режим сортировки по возрастанию для поля Жанр. Тогда в списке подстановки данные тоже будут отсортированы. Теперь можно раскрыть ТаблицаКниги в режиме конструктора и изменить тип поля Жанр. В столбце Тип данных в списке надо выбрать Мастер подстановок. Создать поле подстановок без мастера достаточно сложно. Первый шаг мастера показан на рис. 7.12. Предлагается два варианта хранения значений поля: использовать для них отдельную таблицу или определить значения во время работы мастера. Если выбрать первый вариант, то в таблицу можно будет добавлять новые значения. На втором шаге мастера (рис. 7.13) выберем источник записей. Это будет, естественно, объект базы данных ЗапросЖанры, На третьем шаге мастера (рис. 7.14) надо выбрать поле, которое будет использоваться для выбора данных. В таблице подстановки может быть несколько полей, но показывать их необязательно: поле счетчика должно быть скрыто от пользователя. На четвертом шаге мастера (рис. 7.15) можно выбрать режим сортировки поля подстановки. В нашем случае это необязательно, так как сортировка уже обеспечена в запросе. Но, конечно, пользователю будет удобнее выбирать названия из отсортированного списка.
Глава 7
172 ; Создание подстановки Мастер создает столбец подстановки, в каторсм отображается список значений для выбора. Каким способен столбец подстановки будет получать эти значения? 0 ;О6ъ*кт '"столбец подстановки" будет использовать -значения из таблицы или запроса, О Будет введен фиксированный набор эначен!«1,
Отмена _
I
I
Далее >
i
- ;-
_
Рис. 7.12. Первый шаг мастера подстановок . Создание подстановки Выберите таблицу или запрос со значенияии, которые будет содержать столбец подстановки, Запрос: ЗапросКниги .
-л
,
I
"""" -:,*
ij
-..:, .
. Показать О Таблицы
I
Отмена
(";> ;£апросы j Q Таблицы и запросы
I
< Назад
I Далее >
I
Рис. 7.13. Второй шаг мастера подстановок
На пятом шаге мастера (рис. 7.16) можно визуально определить и установить ширину поля подстановки. Границу поля можно передвинуть мышью. Здесь можно уже нажать кнопку Готово. Остался шестой, заключительный шап но на нем можно только выбрать подпись для поля. В нашем случае имя поля (Жанр) достаточно информативно и создание подписи не требуется.
Книжная база данных (примерJ Создание подстановки Какие пола содержат значения, которые следует включить в столбец подстановют? QTo6pat*»ie поля станут столбцами Е объекте "столбец подстановки",
Рис. 7.14. Третий шаг мастера подстановок
Создание подстановки Выберите порядок сортировки списка. Допускается сортировка записей по во^асташ«о или по убыванию, включающая до 4 полей, по возрастанию по возрастанию
Рис. 7.15. Четвертый шаг мастера подстановок
Теперь полезно проверить, как сделанные в таблице изменения отразились на других объектах базы данных. Откроем Запрос-Книги. Достаточно щелкнуть на поле Жанр, чтобы увидеть список и возможные значения поля.
Глава?
174 Создание подстановки Задайте ширину столбцов, которые содержит столбец подстановки, Перетащите правую границу заголовка столбца на нужную ширину или дважды щелкните ее для автоматического подбора ширины.
Рис. 7.16. Пятый шаг мастера подстановок
Откроем форму ФормаКннги. Поле Жанр не имеет списка, значит, это поле надо доработать. Откроем форму в режиме конструктора. Нам потребуется элемент управления «поле со списком» и его мастер. В первую очередь необходимо убедиться, что кнопка Мастера на панели инструментов Панель элементов находится в нажатом состоянии. Затем надо нажать кнопку Поле со списком на той нее панели и на свободном месте в форме нарисовать контур будущего поля. Появится поле и подпись к нему. Одновременно откроется окно Создание полей со списком (рис. 7.17). Этот мастер очень похож на мастер подстановок, проиллюстрированный выше, поэтому я остановлюсь только на отличиях в работе с ними. На первом шаге мастера мы выбираем верхнее положение переключателя. На втором шаге так же устанавливаем переключатель в положение Запросы и выбираем в качестве источника данных ЗапросЖанры. На третьем выбираем (переносом в правую область) поле Жанр. На четвертом шаге не выбираем ничего, потому что режим сортировки уже задан. Пятый шаг тоже проходим без редактирования, потому что задавать сейчас размеры поля не имеет смысла, мы это сделаем позже и более эффективно. Шестой шаг мастера показан на рис. 7.18. Он самый ответственный — надо выбрать поле таблицы (запроса), в которое будет заноситься выбранное пользователем значение. Напомню, что форма сделана на основе запроса ЗапросКниги, так что нам требуется только поставить пере-
Книжная база данных (пример) идание полей со списком
~Л
Мастер создает попе со списком, в котороп отображается список значений для выбора. Каким способен попе со списком будет получать эти значения? 0126-ъект "голе со стихом" будет использовать значения из |та6лицы или запроса. О будет введен фиксированный набор знамений. Q Поиск ааписн е форме на основе значения, которое содержит поле со списком.
Рис. 7.17. Первый шаг мастера «поля со списком»
ключатель во второе положение и выбрать поле Жанр (фактически мы сейчас выбираем поле из ТаблицаКниги, потому что запрос является только промежуточным объектом в информационном потоке). В этом окне можно нажать кнопку Готово, так как последний (седьмой) шаг мастера значения не имеет, Создание полей со списком Microsoft Office Access позволяет со!^имить выбранное из объекта 'попе со списком" значение в базе данных или использовать зто значение в дальнейшем для выполнения действия, Какое действие будет выполняться при выборе значения из объекта "поле со списком"?
Рис. 7.18. Шестой шаг мастера «поля со списком»: надо выбрать поле, в которое будет записываться информация
Глава 7
176
Мастер закрылся. Что изменилось в конструкторе форм? Теперь в форме есть два поля Жанр. Этот момент отображен на рис. 7.19. Можно переключиться в режим просмотра формы и убедиться, что выбранное из раскрывающегося списка Жанр значение сразу же появляется и в обычном поле Жанр. Для проверки можно открыть ТаблицаКнигв и убедиться, что данные записываются и туда, - нам, разумеется, необходимо, чтобы данные записывались в таблицу. ЛФормаКнити : форма :
i
- .П1
. 1 . 3 • i ' 4 • i • 5 • ' - £• • i • 7 • i • В • У • 9 • i • 10 • i • Ч • 1 • 12 • i • 13 • i
Л
* Заголовок формы * Область данных SI1
_1(1
Жанр Жанр
Автор Haaafe/bCTB ° Издательств Аннотация
"
Страна Страна
Серия Серия
Название Книги Н азе ан и е Книги
]
%ilp1
.
.
|
^Камр •
" •
ГодВс^она ГсиВыхада
j •
.
v !
Рис. 7.19. В форме появилось поле Жанр с раскрывающимся списком и подпись к нему
Теперь можно вернуться в режим конструктора. Надо удалить старое поле и поместить на его место новое. Если вы будете выполнять эту операцию, проводите ее в такой последовательности: 1. Выделите подпись старого поля Жанр, раскройте окно ее свойств и запишите для памяти координаты и размеры: От левого края (величина отступа от левого края формы), От верхнего края (величина отступа от верхнего края формы). Ширина, Высота. 2. Выделите старое поле Жанр и запишите те же характеристики. Закройте окно свойств. Нажмите клавишу Delete, чтобы удалить старое поле. Оно будет удалено вместе с подписью. Выделите подпись нового поля Жанр и в окне свойств введите записанные значения координат и размеров. Установите значение параметра Тип границы (стиль рамки) как Сплошная. 5. Проделайте то же самое и с самим полем. Новые подпись и поле должны точно встать на место старых. Закройте окно свойств.
,1.
Книжная база данным (пример) 6. Выделите подпись и щелкните ее еще раз. Откроется режим редактирования подписи. Замените слово «Жанр!» на «Жанр». Такая подпись выглядит более естественно. Новый вариант формы показан на рис. 7.20. Мы видим, что ширина поля Жанр недостаточна для показа данных полностью, но это не проблема: при необходимости ширину поля можно изменить, и мы уже знаем, как это сделать. ФормлКнигн stl Автор А. Азимов
z S
Жанр Страна 1 iaS ЙЯЩЯЕ; у. США званиеКниги бранное
Детектив Кулинария
Серия ГодВыиодэ 1Э89 "
eMWbl
Издательств " Поэзия Приключения Аннотация Спорт
в сборник кл. ЕНЗЕН^^И ой и мировой Фантастики Айзека Азимове Еключены рассказы из ей "Пчть 1- Эзотерика *"5 е гг.] и роман "Сами боги", написанный FIW ателем в начале 70-я гг. после 1 5- летнего перерыва Е питературпом творчестве
™>: 03 * Г
Г И H]lMfjrf э
Рис. 7.20. Теперь значение ноля Жанр можно выбран, т списка
По аналогии можно было бы снабдить раскрывающимся списком и поля Страна и Серия: здесь тоже важна унификация названий.
7.6. Импорт данных Мы начали эту главу с рассмотрения таблицы, структура которой послужила прототипом для создания нашей таблицы ТаблицаКниги. Может так оказаться, что нам потребуется перенести данные из той таблицы в нашу. Если импортируемая таблица находится тоже в базе данных Access, то перемещение данных выполняется достаточно просто. Для этого надо: 1. Открыть две программы Access с двумя базами данных. 2. Перетащить импортируемую таблицу в окно другой базы данных на вкладку Таблицы. 3. Открыть импортируемую таблицу в конструкторе и изменить имена ее полей так, чтобы они совпадали с именами соответствующих полей основной таблнць . 4. Создать и выполнить запрос на добавление данных (см. главу 5).
178
Глава?
Кроме того. Access может импортировать данные из файлов самых разных форматов. Окно диалога, позволяющее выполнить импортирование, показано на рис. 7.21. Оно похоже на окна открытия и сохранения файлов. Вызывается это окно командой Файл •=> Внешние данные => Импорт. Пользователь должен определить тип файла, который будет служить источником данных, и найти необходимый файл.
Рис. 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 п & Литература -сБлокнот
Файл [Травка Формат Вид 1. 2. 3. 4. 5. 6. 7.
^правка
Джек Лондон Рафаэль сабатини Роберт Луис СТИВЕНСОН Иван Ефремов Джон стейнбек Александр дома МИОИЛ АНЧАРОВ
морской волк ОДИССЕЯ КАПИТАНА БЛАДА остров СОКРОВИЩ на краю ойкумены райские пастбища черный тюльпан СОДА-СОЛНЦЕ
Рис. 7.22. Текстовые данные, подготовленные для импорта
На первом шаге мастер пытается определить формат текстовых данных. Поскольку мы заранее сформировали колонки, переключатель автоматически устанавливается во второе положение: программа определила, что будет иметь дело с колонками «фиксированной ширины». Поскольку это соответствует действительности, менять в окне ничего не надо (хотя теоретически есть и другие варианты), и можно переходить к следующему шагу. текста Предполагается, что данные имеют формат "фиксированной ширины". Если это не так, выберите подходящий формат данных.
О £ разделителями - поля ра:делятотся запятыми или табуляцией (;.! ф-к с проминая щирина полей - интервалы заполняются пробелами
Образцы данных и; файла; D;U АССЁ55гоо31ЛИТЕРДТУРД.ТХТ, 11. Джек Лондон Иорской волк \'., Рафаэль Сабатини ОДИССЕЯ КАПИТДНА БЛАДА З р . Роберт Луис СТИВЕНСОН ОСТРОВ СОКРОВИЩ Иван Ефремов На г.рък ойкумены 5J5. Дкон Стейнбек Райские пастбища 6|6. Александр Дюма Черный тюльпан
,—, Дополнительно...
.
|
__, Отмена
|
. . ; ; . ] Далее >
I I
Готово
Рис. 7.23. Первый шаг мастера импорта
На втором шаге (рис. 7.24) у нас есть возможность изменить границы столбцов. В общем, программа сделала все правильно, но ошиблась в одном - здесь должно быть три столбца, а не четыре. Поэтому третий разделитель (черная вертикальная стрелка) не нужен, его надо удалить, дважды щелкнув мышью.
Книжная база данных (пример) порт текста Предлагается следующее рааделение попей с дамны-и, Если предложения гтастера не соответствуют данным, настройте разделение попей вручную. Липни со стрелками отмечают песта разделения полей. Чтобы создать разделитель, щелкните нужное положение. Чтобы удалить разделителе дважды щелкните его. Чтобы переместить разделитель, перетащите его в нужное положение.
. 4. г . '
1жек Лондон Рафаэль Сабатини Роберт Луис СТИВЕНСОН Иван Ефремов Дкон Стейнбек Александр Дюма
lope ко и волк ОДИССЕЯ КАПИТАНА Б ЛАД А ОСТРОВ СОКРОВИЩ На краю ойкумены Райские пастбища Черный тюльпан .'J
Рис. 7.24. Второй шаг мастера импорта
На третьем шаге мы укажем, что данные сохранятся в новой таблице. Добавлять данные в существующую таблицу нет смысла, это можно сделать и потом. На четвертом шаге можно определить имена будущих полей и их типы. Это немного напоминает работу с конструктором таблиц. У нас задача довольно простая, мы сделаем три поля, все текстовые, и назовем их Номер, Автор и Название. На пятом шаге мастер предлагает создать ключевое поле. Создадим его, это не повредит, а удалить его всегда будет можно. На последнем шаге назовем новую таблицу Литература. Она показана на рис. 7.25. Мы получили полноценную таблицу, а что делать с ней дальше, зависит от конкретной задачи. Можно, например, перенести эти данные в ТаблицаКниги с помощью запроса на добавление.
" Iff "
Литература i таблица Код »
Номер
1 1.
22. 33. 44. 55. 66 77.
i
Автор Джек Лондон Рафаэль Сабатини
Название
СШШ ;
ОДИССЕЯ КАПИТАНА БЛА/JA ОСТРОВ СОКРОВИЩ
Пеан Ефремов
На краю ойкумены
Джон СтейнБек
Райские пастбища Черный тюльпан
Александр Дюна Михаил АНЧАРОВ
г.
Морской волк
Роберт Луне СТИВЕНСОН
(Счетчик)
Запись: QU « 1
|
СОДА-СОЛНЦЕ V
1 L4J4lJft*l
m 7
Рис. 7.25. Таблица после импорта данных
Глава 8 Отчеты В отличие от форм, отчеты предназначены в основном для вывода на печать. Часто они включают много данных и занимают несколько страниц. Но структуры отчетов и форм похожи, и многое из того, о чем рассказывалось в главе «Формы», можно применять и для отчетов. Их создание также проходит в режиме конструктора. Можно, конечно, создавать отчеты и для просмотра на экране. В этой главе мы рассмотрим различные способы создания отчетов, взяв в качестве источника информации базу данных «Борей».
8.1. Быстрое создание автоотчета Проще всего сделать отчет с помощью режима «Автоотчет». Access позволяет строить автоотчеты (то есть отчеты, создаваемые автоматически) двух типов: «в столбец» и «ленточные». Различие между ними ясно из их названий - в отчетах первого типа поля располагаются по вертикали, а в отчетах второго типа - по горизонтали. Для того чтобы построить автоотчет, достаточно нажать кнопку Создать на вкладке Отчеты, выбрать, к примеру, Автоотчет: ленточный и указать имя таблицы (к примеру, Заказано). Этот момент показан на рис. 8,1. Далее программа будет работать самостоятельно. Фрагмент готового отчета, названного, как и таблица, Заказано, показан на рис. 8.2. Предполагается, что макетом отчета является страница (по умолчанию формата А4), поэтому отчет формируется на прямоугольнике белого цвета, имитирующего бумажный лист. Обратите внимание, что в нижней части окна не указано количество страниц. На самом деле их может быть достаточно много. Увидеть число страниц можно в правом нижнем углу документа. В ленточном отчете в каждой строке выводится одна запись. У нас получился отчет потому, что в таблице Заказано всего пять полей. Если бы полей было много, лучше подошел бы отчет «в столбец». Получить хороший ленточный автоотчет можно только для таблицы или запроса, имеющих небольшое количество полей.
Отчеты
/."• Новый отчет
•А Автоматическое создание
Выберите в качестве источника данных таблицу ипи запрос:
Комстр/ктор Мастер отчетов Автоответ: в столбец йвтоотчет: ленточный;, i, Мастеэ дчагоаии Почтйвсв «вклейки
'•if-,.-'.-
Заказано --
Рис. 8.1. Окно для создания автоотчета
*•**»**>
'.тай ^.^^T^IwU Л'
ц ;
Заказано
:
, ' '"
Код заказа Товар
Цена Katweatw 140.0Qp.
23
1024В Chartreuse «rte
35.30fi.
1
10248 •Jack'sNewEnglardaam Ctio
Э8,СОр.
1p
1024Э CammbenPiem*
345
flap.
4
1СС4Э MiihKobeNikij
318
flOp.
5
1CG49 SirRndne/EMamalade
1B5.COO.
9
V j Страница: -4
' \
l i. О,*' J
*
>,
Рис. 8.2. Фрагмент отчета
8.2. Печать отчета Во время вывода отчета на экран автоматически включается режим предварительного просмотра и выводится соответствующая панель инструментов. Подразумевается, что пользователь должен сразу приступить к подготовке печати. Кнопка Масштаб позволяет просмотреть страницу целиком, но в этом случае символы не будут различимы. Все поля не уместились на одном листе, и одна запись таблицы будет выводиться на двух страницах. Кнопка Две страницы позволяет увидеть их одновременно. Пример макета страниц показан на рис. 8.3, Программа автоматически выбрала альбомную ориентацию листов, потому что иначе строки на листе не умещались.
Глава 8
184
Рис. 8.3. Отчет ь режиме предварительного просмотра
Возможно, отчет требуется напечатать, используя книжную ориентацию листов. Есть несколько возможностей для уменьшения ширины отчета. Для начала можно, нажав кнопку Установка, изменить параметры страницы: ширину левого и правого полей (рис. 8.4). Их размеры взяты с запасом, и°можно установить ширину левого поля 20см, а правого - 10см. После этого можно на вкладке «страница» выбрать книжную ориентацию листов и проверить, будет ли текст отчета выходить за границы листа.
Рис. 8.4. Окно для выбора параметров страницы
Отчеты
185
Если этого недостаточно, можно попробовать изменить размер таблицы. Для этого надо: 1. Создать копию таблицы (перетаскиванием ее значка при нажатой клавише Ctrl), 2. Проверить максимальную длину строк в текстовых полях. Необходимая для этого процедура описывается в главе 10. 3. В режиме конструктора уменьшить длину полей. Если есть возможность, удалить ненужные или необязательные поля. 4. Снова построить автоотчет на основе этой таблицы. Уменьшить ширину правого и левого поля страницы в окне параметров. Конечно, все эти меры хороши на один раз, если отчет нужен срочно. Поскольку мы работаем с копией таблицы, информация в ней быстро устареет, и придется все повторять заново. Бывают и другие трудности. В отчет может входить информация из нескольких связанных таблиц. Чтобы узнать из каких, надо на вкладке Отчеты открыть контекстное меню значка отчета и выбрать команду Зависимости объектов. В нашем примере отчет сделан на основе таблицы Заказано, но самое длинное поле отчета выбирается из связанной таблицы Товары. В этом случае целесообразно сделать запрос, включающий поля обеих таблиц, открыть его в режиме конструктора, с помощью инструмента Тип запроса преобразовать в таблицу и потом изменять размеры ее полей. В остальном отчеты распечатываются как обычные документы. Настройка принтера дня печати отчетов осуществляется так же. как и для других программ, работающих под управлением Windows (с помощью команды Файл => Печать).
8.3. Конструктор отчетов Если открыть в режиме конструктора отчет, создание которого описывается в разделе 8.1, то мы увидим окно, очень похожее на конструктор форм (рис. 8.5). Вся область отчета разделена несколькими горизонтальными линейками на зоны: Заголовок отчета, Верхний колонтитул, Область данных, Нижний колонтитул. Примечание отчета. Высоту этих зон можно менять при помощи мыши. Все элементы отчета представлены в режиме конструктора в качестве объектов. После того как объект выбран, он окружается рамкой с черными квадратиками (маркерами). На рисунке выделено поле, в котором помещен заголовок документа. Маркеры, как обычно, служат для изменения размеров объекта. Пользователь может перемещать объекты, задавать их свойства и программировать обработку
Глава 8 событий, связанных с объектом. Каждый объект снабжен контекстным меню, которое позволяет выполнять указанные действия. Кроме этого, объекты можно копировать через буфер обмена. При вставке объект располагается по умолчанию в верхнем левом углу выбранной зоны. Для того чтобы поместить объект в определенную точку отчета, можно создать вспомогательный элемент управления в этом месте, выделить его и выполнить вставку из буфера. Вставляемый объект будет расположен рядом. Затем вспомогательный элемент управления можно удалить. При просмотре отчета в режиме конструктора видно, что многие объекты в отчете располагаются парами. Например, поле и его подпись, флажок и его подпись и т. д. Такие объекты бывает удобно перемещать в связке. Если указатель мыши принимает вид раскрытой ладони, то расположенные рядом объекты можно двигать одновременно. В этом случае их взаимное расположение не изменится. Если указатель мыши имеет вид указующего перста, то перемешать можно один объект. Для удобства позиционирования в поле отчета выведена сетка. Программа позволяет автоматически выравнивать объекты по сетке. Соответствующие команды находятся в меню Формат. Заказано : отчет
• ID • i • ч • ^ - а - < • и • i • 14 • 1 • is • • • к • < • 17 • аголовок отчета
Заказано '
! 1 1
< Верхний колонтитул
Код
Щка:KwtiFtefmsdll
с!яи)кд
* Область данных КодЗз|<аэа
j L Код То в ара
4~
||Ко1ичеет*о \—л—[..._— ,_|
'Скидка! . |.. .-._„[
-f tt-Екний колонтитул
Рис. 8.5. Отчет в режиме конструктора
Для создания в отчете новых объектов - элементов управления - в режиме конструктора на экран, как и в конструкторе форм, выводится Панель элементов. Элементы управления отличаются тем, что их недостаточно просто создать необходимо еще запрограммировать, иначе они бесполезны. Различные аспекты создания элементов управления обсуждаются, в частности, в главах 7, 10 и 11.
/.,
Отчеты
1 j
; Код раказа Говад
\
Щиа Кмичаство \
f Область Д?иных Код Заказа
ЖодТЬвэрэ
* Нижний копс»1титул l
~Nowf
]
* Примечлни отчета
l-*-*--4*>^fi*HT ' >
и
Рис. 8.6. Нижний колонтитул отчета в режиме конструктора
На рис. 8.6 показан нижний колонтитул автоотчета. Программа по умолчанию вставила в колонтитул поле, использующее длинный формат даты, с функцией N o w ( ) (текущая дата), а также поле с выражением, в которое входят переменные Page (Страница) и Pages (Страниц): -"Страница " & [Page] & " из " & [Pages]
Результат такого оформления виден на рис. 8.7. Для создания подобных полей удобно использовать построитель выражений. Он запускается через контекстное меню элемента управления. Из меню надо выбрать команду Свойства, а далее на вкладке Данные использовать кнопку в строке Данные. 10253 Ctocolacle 10254 OutbfCk Lager
160.00р. 36,00р
Страница I из 95
Рис. 8.7. Нижний колонтитул отчета в режиме просмотра
8.4. Сортировка и группировка в отчете В таблице Заказано есть записи с одинаковыми кодами заказов, и в отчете, сделанном на основе этой таблицы, можно сгруппировать записи по номерам заказов. Для подобных операций в Access предусмотрен специальный инструмент. Создадим на базе нашего автоотчета отчет Группировка, в котором записи будут отсортированы и сгруппированы по номерам. Для этого надо выполнить следующие действия:
Глава 8
188
Скопируйте отчет Заказано в буфер обмена и вставьте его на вкладку Отчеты, дав ему новое имя. Откройте отчет в режиме конструктора. 2. Нажмите кнопку Сортировка и группировка на главной панели инструментов (или выберите эту команду из контекстного меню, связанного с линейкой Область данных). Откроется окно с тем же именем. Выберите из списка в первом столбце поле КодЗаказа (рис. 8.8), а в столбце Порядок сортировки укажите значение «По возрастанию». I.
[<- Сортировка и группировка Поле/выражепче
I Порядок сортирован По возрастанию
Свойства группы Заголовок группы Примечание группы Группировка Интервал Не разрывать
Да Нет По полному знача* 1 Нет
н Отображение заголовка группы
Рис. 8.8. Окно для выбора параметров сортировки и группировки
3,
•i
5
б
Установите опцию Заголовок группы как «Да». Закройте окно Сортировка и группировка. В отчете появится новая линейка, которая создаст зону заголовка группы, как показано на рис. 8.9. Создайте в зоне заголовка группы новое поле. Его надпись будет определена программой автоматически. Нам потребуется ее изменить. Раскройте контекстное меню надписи, выберите команду Свойства и на вкладке Макет задайте новую подпись «Заказ». Теперь выделите само поле и укажите источник данных для него, то есть для заголовка группы. Напомню, что это можно сделать, открыв вкладку Данные и отредактировав одноименное свойство. Используйте имя поля, которое было выбрано в окне Сортировка и группировка. В нашем примере это поле КодЗаказа. На вкладке «макет» задайте более крупный шрифт, например: размер 12 пунктов и полужирное начертание.
Отчеты
189
' 1 • 1 • I
"j J
1 .I <
{•!']' l ' 4 ' l - l
* Верхний во понтитул
КадЪахазф To^fp
I
"1
Щна Щитв^пио
Скидка
* Заголовок группы 'КодЗаказа'
'Заказ:
,Ki дЗаказ|х
* Область данных |КодЗ*ааа
'|КодТрвавв 1
* Ни*н1Й юэлонтитуя
* Причечани отчета ,...,..
,
U ,
Рис. 8.9. Зона заголовка группы
Теперь данные в отчете будут разбиты на группы. Каждую группу будет предварять ее заголовок с номером заказа, как показано на рис. 8.10. Первая колонка отчета теперь лишняя. Убедившись, что новые заголовки правильно показывают номера заказов, первую колонку можно убрать. Для этого достаточно выделить и удалить поле и заголовок колонки (открыв отчет в режиме конструктора). Освободившееся место можно занять другими полями.
Закюано Цена Количество
Код захаш Товар Заказ:
Скидка
10248 35,30р.
10348 Chartreuse vette 10246 Jadi'sHev.EnglardClamCho 10246 С am ал bail Pierrot 10248 MlsHMoteNiku
<'
Рис. 8.10. Отчете группировкой данных
NB
Если-во время работы в окне Сортировка и группировка значение Заголовок группы установлено как «Нет», группы создаваться не будут, но данные в отчете будут отсортированы по выбранному полю. Обеспечить группировку записей можно и в том случае, когда отчет строится с помощью мастера отчетов.
Глава 8
190
8.5. Мастер отчетов Отчет можно построить и с помощью мастера. Перед его запуском необходимо выбрать таблицу или запрос, которые будут служить источником данных для отчета. Используем таблицу Заказы. На первом шаге мастера, изображенном на рис. 8.11, необходимо выбрать поля для отображения в отчете. Выберем (из списка «Доступные поля») КодЗаказа, КодКлиента, ДатаРазмещения, ДатаНазначения, ДатаИсполнения. Это вполне подходящее количество полей для одного отчета. Если полей слишком много, то программе не всегда удается правильно расположить данные.
Выберите поля для отчета. Допу'Хается выбор нескольких таблиц или запросов.
Выбранные поля:
Стоииость Доставки НазеаниеП о л уч а теля Ад р е сП олучэт еля ГородПолучателя ОбластьПо пучателя ИндексПолучателя С транэПо лу ч а теля
На втором шаге мастера (рис. 8.12) можно определить параметры группировки, о которой говорилось выше. Правая часть окна мастера представляет собой упрощенный макет отчета, который наглядно показывает принцип группировки. Поле, значения которого будут сгруппированы, надо выбрать из левого списка. Выберем два поля: КодКлиента и КодЗаказа. При том положении, которое они займут в окне мастера, список заказов в отчете будет сгруппирован по клиентам и номерам. Иерархию группировки можно менять при помощи кнопок Уровень. Один из уровней группировки всегда является текущим. Он выделяется полужирным шрифтом, и к нему относятся все операции в окне, в том числе команды изменения уровня.
Отчеты
191
Кнопка Группировка позволяет определить интервалы группировки. Это особенно важно для числовых данных и данных типа дата/время, потому что позволяет избежать слишком большого числа групп или обеспечивает создание таких групп, какие нужны пользователю. Создание отчетов Добавить уровни группировки? КйдКлиента Код За к аз а
ДатаНазначения ДатаИсполнения
Дат зР а зиещения, Да т а Назначения, ДатаИсполиения
[ LU f—Л
и
,Уровен?
I •'
Группировка...
I
Отмена
I
<Цазад
II
Далее >
I
Готово
Рис. 8.12. Второй таг мастера отчетов Создание отчетов Выберите порядок сортировки записей. -гк
Допускается сортировка записей по возрастанию или по убыванию, включающая до •) полей. i 1. Дат заполнения 2. 3 , 1'
Рис. 8.13. Третий шаг мастера отчетов
v; [по возрастанию v j по возрастанию ' - • , : . , - - - .
Глава 8
W2
На третьем шаге (рис. 8.13) выбирают поля, по которым будет проведена сортировка данных. Здесь можно задать вычисление итоговых значений для числовых полей. Нам можно использовать для сортировки поле ДатаИсполнения. Как всегда, имеется возможность выбрать принцип сортировки «по возрастанию» или «по убыванию». На четвертом шаге планируется общий вид отчета. Здесь вид окна мастера зависит от .того, как была определена операция группировки. В зависимости от этого программа предлагает набор макетов отчета. В нашем примере (рис. 8.14) мастер предложил достаточно большое число макетов, но так бывает не во всех случаях. Картинка в левой части окна помогает понять, как будет выглядеть отчет, если выбрать определенный макет. Нам подойдет, например, макет «блок», так как он обеспечивает компактное расположение данных. Cojflat|ние отчетов т
0 Настроить ширину полей для размещения на одной странице.
Рис. 8.14. Четвертый шаг мастера отчетов
Пятый шаг мастера (рис. 8.15) позволяет определить стиль отчета. Стиль это, скорее, дело вкуса, но даже он может повлиять на успех: от размера использованных шрифтов зависят размеры заголовков и текста, которы в свою очередь влияют на возможность напечатать отчет. Выберем, для примера, стиль «Полужирный». На шестом шаге (рис. 8.16) указывается имя отчета. Я выбрал имя Заказы по датам. Теперь мы можем посмотреть на результат. Он показан на рис. 8.17. Нельзя сказать, что все получилось идеально. Данные сгруппированы и отформатированы
Отчеты
193 Создание отчетов Выбери те требуеный стиг.ь,
Рис. 8.15. Пятый шаг мастера отчетов i
Создание отчетов Задайте имя отчета: Заказы по датаи
Указаны все сведения, неооходиные для создания отчета с помощью мастера, Дальнейшие действия: ® Просмотреть отчет, (. j Изменить пакет отчета.
(_"] Вывести справку по работе с отчетом?
Рис. 8.16. Шестой шаг мастера отчетов
правильно, так что отчет можно использовать. Обратите внимание, что имя отчета становится заголовком отчета - имя надо выбирать подходящее. Но, в крайнем случае, заголовок можно изменить в режиме конструктора.
7-870
Глава 8 ',j Злнаэы по датам
Заказы по датам Код Клиента
КодЗаказа
|А1_Ш
ANATR
JANTON Страница:
ГЕЕЙ
[эта 11сполнекия1ата размещения™ назначения 10702
31-10-1997
13-10-1991
2ФП-1997
10952
24-03-1998
16-03-1998
27-04- 199Е
11011
13-041998
09-04-1993
07-05-1398
1030S
24-09-1996
13-09-1996
16-10-1996
10625
14Ж-1997
OS-OS- 1997
05-09- 1Р97
10759
12-12-1397
28- U- 1997
26-12-1997
10926
11-03-199?
04-03-1998
0144-1998
10365
02-12-1996
27-11-1996
25-12-1996
10507
22-04-1397
15-04-1997
13-05-1397
Рис. 8.17. Отчет, сделанный при помощи мастера
Легко заметить, что ширина столбцов недостаточна для размещения заголовков (часть букв пропала). Это произошло, конечно, не потому, что в Access плохо работает процедура форматирования отчета. Просто в строке оказалось слишком мало места, чтобы разместить все заголовки. Только на боковые поля листа отводится около пяти сантиметров. Выходом из положения может стать уменьшение размера шрифта или иное позиционирование заголовков. Все это легко выполняется в режиме конструктора (вручную, конечно). Доработка отчета предполагает частое переопределение типа и размера шрифтов. В этом случае целесообразно вывести списки-инструменты Шрифт и Размер на панель инструментов, которая всегда находится на экране, или подключить панель инструментов Формат (форма/отчет). Выбирая объект в режиме конструктора, вы сразу увидите по этим спискам, возможно ли переназначение шрифта для этого объекта. Так, если вы захотите изменить настройки шрифта для данных в отчете, то придется настраивать шрифт для каждого поля в области данных отдельно.
8.6. Анализ данных с помощью отчетов Допустим, мы хотим выяснить, какие клиенты сделали больше всего заказов, и отразить это в отчете. Для этого надо выполнить определенную последовательность действий. 1. Вначале надо создать запрос для поиска повторяющихся записей в поле КодКлиента в таблице Заказы. Перейдите на вкладку запросов. Нажмите кнопку Соз-
Отчеты
195
дать и начните создание нового запроса типа Повторяющиеся записи. На первом шаге мастера запросов выберите таблицу Заказы. На втором шаге мастера укажите в качестве поля повторов КодКлиента. На третьем шаге не делайте ничего. На последнем шаге мастер даст запросу имя Поиск повторений для Заказы. После выхода из мастера раскроем запрос в режиме конструктора и изменим условие отбора для поля Повторы: КодКлиента. Там было записано: >1. Зададим новое условие: >0. Это позволит включить в запрос записи, встречающиеся в таблице Заказы один раз. В результате мы получим запрос, изображенный на рис. 8.18. __-fl Поиск повторений для Заказы : запрос на выборку КодКлиента поле
]
„
П ,
Повторы
,л
ALFKI
4 7 13 17
AWATR ANTON AROUT BERGS
8 12
BLAUS BLONP SOLID
• писы(К]
1 |
Г|Т>1] * из as
< >
Рис. 8.18. Запрос на поиск повторений-источник данных для отчета
2. Теперь можно приступить к созданию отчета. Мы будем строить его, как было упомянуто выше, с помощью мастера. Перейдите на вкладку Отчеты. Нажмите кнопку Создать и выберите Мастер отчетов. На первом шаге мастера выберите оба поля построенного запроса: КодКлиента поле, содержащее информацию о клиентах, и Повторы, где хранится информация о количестве сделанных заказов. 3. На втором шаге не используйте группировку, 4. На третьем шаге задайте сортировку поля Повторы по убыванию. 5. На четвертом шаге выберите макет «табличный». 6. На пятом шаге можно указать любой стиль. Я рекомендую «Деловой». 7. На шестом шаге назовите отчет Сводка по клиентам. Готовый отчет показан на рис. 8.19. Можно ли улучшить этот отчет? Я думаю, да. В режиме конструктора можно поменять местами колонки отчета - это будет выглядеть более естественно. И, кроме того, не помешает дать колонкам более понятные заголовки - мастер отчетов использовал имена полей запроса.
Глава 8 Сводка но клиентам
Сводка по клиентам Повторы А'адКяиента паае 31 SAVEA 30 ERNSH 28 ОШСК 19 HUI4GC 19 FOLKO Страница: " Н
г CEOD <:<
Рис. 8.19. В отчет включены только те данные, которые были нужны
Еще одна задача. Создадим список товаров с группировкой их по видам. Для ее решения выполните следующие действия в мастере отчетов: 1. На первом шаге мастера отчетов выберите из таблицы Товары поля КодТипа. КодТовара, Марка, ЕдиницаИзмерения, Цена, НаСкладе. 2. На втором шаге задайте для группировки поле КодТипа. 3. На третьем шаге выберите для сортировки поле Марка. 4. На четвертом шаге выберите макет «ступенчатый». 5. На пятом шаге можно указать любой стиль, но лучше «Сжатый». 6. На шестом шаге назовите отчет Группы товаров. Готовый отчет показан на рис. 8.20. Как видно из рисунка, этот отчет также нуждается в доработке - необходимо отрегулировать ширину колонок в режиме конструктора, потому что заголовки колонок выведены не полностью.
8.7. Построение диаграмм Создадим запрос (Запрос Сот рудники), в котором будут поля Фамилия и Имя из таблицы Сотрудники и поле КодКлиента из таблицы Заказы. Поскольку обе таблицы связаны, построение такого запроса возможно (рис. 8.21).
Отчеты
197 Группы товаров
Группы товаров Код Типа
Март
Ц.»
КОЕ тх np.a Ещошил Hi ^ |. -,<
; ШИ
1 Chil
64 10 .Оробс.1
Chang
BO » вртчл'и 10365
Chartieuie veil*
ВД 750 мл вуты ' р
Cots at Slaye
39 1г бугыпй. oTS 10 12 блно< по ' 44 1В SaHoi по
(
'
856.00р.
17
8ЮВОр.
ве
11 857.500.
г
i -i-
.
202 50р
,.,
2 070.00р.
30 500 ни
UkkjUtoon
I
810.00р.
• .
810.00р.
•• --
LjugMng Lumbeitack LJ
21 24 бутылм 10355
езо.оор
Oulbau. Lags г
24 М бугчши ЮЭбЯ
675,00р.
Rhonorau Hoslsrbier
2в г46^ыл!и
3^S.75f.
i •
SiiqualchHJe
35 246угилч« поЭ55
еэз.оор.
и
Siteleye Stout
38 24 бутылки по ЭЙ
810,00р.
г
Antesd Syrup
8В
ПвЯбО
450,00р.
Ch*f AMortsCajunStat
67 ив Баношо 177 н
еао.оор.
12 б\ЛЫЛОЕ
•
1имер отчега с группировкой данных
ЗалросС отруд н ик и запрос на выборку
П
Фамилия | И ы я Белова Мария Белова Мария Белова Мария Новиков Павел Новиков Павел Новиков Павел Новиков Павел Новиков Павел -.исы [IT] ч |
1-. ;1П11Йя
Клиент Tortuga Reslauranle LILA-Supermercado Rattlesnake Canyon Grocery aiandel pere et tils Morgenstern Gesundkost Berglunds snabbkop Vinette bislro Maoazzini Alirnentari Riuniti
i CQ5DO] из 8эо
[л,
f.,
Рис. 8.21. Исходные данные для построения диаграммы
При рассмотрении запроса видно, что поле Фамилия содержит повторяющиеся значения. Если мы захотим сравнить количество заказов, обработанных менеджерами, то информацию удобно представить в виде диаграммы. Построение диаграммы можно разбить на следующие этапы: 1.
Перейдите на вкладку Отчеты. Нажмите кнопку Создать и выберите Мастер диаграмм. Укажите в качестве источника данных запрос ЗанросСотрудники. Будет запущен мастер диаграмм.
198 2.
Глава 8 На первом шаге мастера диаграмм (рис. 8.22) выберите два поля запроса: Фамилия и КодКлиента - они будут отображены на диаграмме. | Создание диаграмм Выберите поля с данными, которые необходимо отобразить в диаграмме. Доступные поля:
Поля диаграммы' Фамилия
£••••••
_ .)
I
., -
Отмена
:
Далее >
•
I [
готово
Рис. 8.22. Перьый шаг мастера диаграмм 3.
На втором шаге мастера укажите тип диаграммы - «Гистограмма» - как наиболее подходящий для нашего случая (рис. 8.23). | Создание диаграмм Выберите тип диаграммы,
L_ L /'Ж
Отгчеиа
|
Рис. 8.23. Второй шаг мастера диафамм
I
Правильный тип диаграммы позволяет наглядно представить значения выбранных полей. Гистограмма Отображает изменения за период времени или показывает относительные значения элементов, Категории данных располагаются по горизонтали, изменяющиеся по времени значения - по вертикали.
< Назад
jj
Далее >
|
QOTOBO
Отчеты
_
199
Создание диаграмм , г.^ „ иЬр^зец
Выберите тип отображения данных на диаграмме.
"9>
Перетащите кно*тки попей в область образца. Если требуется изменить вид групгирОЕКН им Бь^спений, дваадь. щелкните на диаграмме числовое поле или поле типа дать
___^_____^_^ I Числе, КодКливнтв! в у
1;
Ряды
о
i
I «аз
КодКлиента
i
I
ВзЬ
t. i i i .
Ссс
Фамилия
От-чена
|
< Цаэад
JI
Далее >
[ |
Готово
Рис. 8,24. Третий шаг мастера диаграмм
На третьем шаге мастера определяется внешний вид диаграммы. Для того чтобы в гистограмме для каждого менеджера была предусмотрена отдельная колонка, поле КодКлиента надо перетащить в зону вертикальной оси. В этом окне имена полей перемещаются при помощи мыши. На рис. 8.24 показано, как должно выглядеть окно мастера. Зона «Ряды» должна остаться пустой: тогда мы получим только один ряд данных, и все столбики диаграммы будут одного цвета. В других задачах эта область позволит создать разноцветную диаграмму. Итак, в нашем случае по вертикальной оси должны располагаться коды клиентов, а по горизонтальной оси - фамилии менеджеров. 5. На последнем, четвертом шаге мастера (рис. 8.25) можно выбрать имя для новой диаграммы. Назовем ее ДиаграммаСотрудникн, Вы уже знаете, что имя, заданное в мастере, попадет в отчет в качестве заголовка и будет напечатано самыми крупными буквами. Поэтому в реальных задачах есть резон придумать естественное информативное имя. Диаграмма построена. Но нет никаких гарантий, что она вас удовлетворит. Возможно, у вас получится что-нибудь наподобие показанного на рис. 8.26. Очевидно, что работу, начатую мастером, надо продолжить.
4.
1. Откройте отчет с диаграммой в режиме конструктора (рис. 8.27). Диаграмма представлена в виде макета, и надписи, расположенные на ней, не имеют ничего общего с реальными данными.
Глава 8 Создание диаграмм Задайте название диаграммы: Д награчиаСотруднихи Показатв /слоеные обозггзчвния?
Рис. 8.26. Диаграмма, полученная в результате работы мастера
2.
Выделите диаграмму так, чтобы она окружалась рамкой с маркерами. С первого раза это может не получиться, тогда надо несколько раз щелкнуть мышью. 3. Выберите команду Диаграмма => Параметры диаграммы. Откроется окно Параметры диаграммы. На вкладке Легенда отключите легенду. Закройте окно. 4. В окне конструктора увеличьте площадь зоны отчета и увеличьте размер диаграммы перетаскиванием маркера.
Отчеты
201 ГраммаСо т рудники : отчет
I < Еерхиий колонтитул J
J
Рис. 8,27. Конструктор отчетов с диаграммой •-J ДнаграммаСотрудннки : отчет
ДиаграммаСотрудники 200 |Н
1011 60
о ч/ ^
Страниц И
Рис. 8.28. После доработки диаграмма выглядит лучше
Теперь диаграмма смотрится намного интереснее (рис. 8.28). Ее несложно превратить в рисунок и вставить в любой офисный документ.
NB
В режиме конструктора можно раскрыть контекстное меню, связанное с диаграммой, и выбрать из него команду Объект Диаграмма =2> Изменить. Будет запущена программа 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-страницу (рис. 9.1). ^•Jtovari - Microsoft Internet Explorer Файл
Правка
Вид
Избранное
•..-к
L*J l*d :.*•• х .
UJ
k'/
.Л .Vi
Сервис Л
' -._ " С £правк Поиск
'•<' "f Избранное
s
^J| Медиа
^р}>
-
. „ ; ""
--I
&
"i
Адрес 1 1^ D:\l Access 2003\Bope£f|tovari.ritm!
L-J.
Jj Переход
LJ
tovan ....
697,50р.
39
1
785,25р.
29
В
[ 7 6 20 банок по 1 кг
1755,00р.
0
С
4 Carnarvon Tigers
7 S 16 кг у паковка
2812.50р
42
0
5 Teatime Chocolate Biscuits
:-; 3 10 коробок по
414,00р
25.
0
3645,00р.
40
0
Genen Shouyu
2 Pavlova 3 Alice Mutton
6 Sir Rodney's Marmalade
7 Sir Rodney's Scones 8 Gustafs Knackebrod
6
f
:s
2 24 бутылки по 250 мл
з 32 коробки по 500 г
12 шт
• 30 коробок
8 3 24 упаковки по 4 шт. 9 5 24 упаковки по 500 г
.|lt] Готово
450,00р.
5 Г
10 0 0 5 • i
0' 1 0 0 0
3 41
945,00р. 104
50 0 25 0
«JMyComputer
Рис. 9.1. Пример статического документа HTML
При желании несложно просмотреть код такой страницы. Это можно сделать прямо в броузере, использовав команду Вид => Просмотр HTML-кода. В этом случае в качестве текстового редактора по умолчанию используется программа Блокнот. Настройки броузера позволяют подключать другой текстовый или гипертекстовый редактор. Приведу здесь код этого документа, оставив две строки таблицы (в смысле HTML-форматирования они все одинаковы):
ALIGN^LEFT>32 коробки по 500 r AL!GN=RIGHT>785,25p ALIGN=RIGHT>29 ALIGN=RIGHT>0 ALIGN=RIGHT>10 ALIGN=RIGHT>0
С точки зрения Web-дизайна это очень простой документ, и содержит он только основные теги. Конструкция DIR=LTR совершенно не обязательна. Она указывает, что текст выводится слева направо, но это и так делается по умолчанию. Из всех элементов МЕТА использован только тот, который указывает на кодировку
Подготовка данных для Интернета
205
русских букв (windows-1251). Опытный веб-мастер добавил бы еще подобные элементы для ключевых, слов, описания страницы и т. д. Элемент TITLE не несет смысловой нагрузки: совершенно незачем в заголовке окна броузера помещать название файла. Целесообразнее ввести туда текст, который облегчил бы пользователям поиск этой страницы и увеличил посещаемость сайта. Поскольку текст этого элемента индексируется поисковыми системами (Alta Vista, Google, Rambler, Yandex и др.), то желательно сделать его как можно более информативным, например:
В элементе BODY можно использовать все допустимые атрибуты (например, для задания желтого фона может использоваться конструкция bgcolor="yellow"). Код таблицы заключен между тегами
и
. Для формирования таблицы использованы теги строки
и теги ячейки таблицы
. В таблице также использован довольно редко применяемый тег заголовка
. Он опять-таки содержит только имя файла и не дает полезной информации. Я бы удалил его, а перед тегом
поместил обычный заголовок: <Н1>Перечень товаров коммерческой фирмы Борей Н1>
Информация из таких заголовков тоже индексируется поисковыми машинами и влияет на посещаемость страницы. Вариантов форматирования Web-страницы очень много. Можно изменить толщину рамки таблицы, выбрать другой цвет текста, выровнять таблицу и заголовок по центру и т. д. Такую страницу несложно доработать в любом гипертекстовом редакторе (MS FrontPage, Macromedia Dreamweaver или другом) и применить к нему форматирование на уровне HTML 4. Например, если страница предназначена для сайта, в нее можно ввести оформление с помощью каскадных таблиц стилей (CSS), принятое для всего сайта, чтобы не нарушать стилевого единства. Разумеется, ничто не мешает дополнить страницу новыми необходимыми элементами: рисунками, гиперссылками, счетчиками, баннерами и т. д. Можно поступить наоборот: выделить и скопировать в буфер обмена весь код, находящийся между начальным тегом и конечным тегом , и вставить в какую-нибудь другую Web-страницу.
206
Глава 9
9.2. Динамические файлы в формате HTML (ASP) Для обеспечения работы динамических файлов в формате HTML на сервер должно быть установлено соответствующее программное обеспечение. При использовании Microsoft Internet Information Services (IIS) таблица из базы данных может быть преобразована в файл типа htx, который преобразуется сервером в обычный html-файл и отправляется на компьютер пользователя. Для извлечения данных из базы используется дополнительный файл типа idc, содержащий запрос на языке 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 обычно устанаапивают Personal Web Server, а на новых - Internet Information Server. Задача заключается в эмуляции работы через сеть, поэтому здесь требуются определенные настройки. Рассмотрим ситуацию, когда на компьютере установлена операционная система Windows XP. Для установки IIS надо открыть Панель управления и выбрать режим Установка компонентов Windows. В окне диалога необходимо выбрать IIS (рис. 9.2). Даже из подсказки в окне диалога ясно, что этот компонент требуется для работы с ASP. После его установки на системном диске автоматически создается папка Inetpub\wwwroot, которая представляет собой «Web-сайт по умолчанию» (Default Web Site). Файлы для тестирования надо копировать в нее. Теперь требуется проверить, будет ли работать на компьютере механизм ASP. Для этого надо создать тестовую страницу, например asptest.asp, с несложным кодом:
Подготовка данных для Интернета
207
Мастер компонентов Windows Компоненты Window) Вы можете добавить или чаалить компоненты Windows XР.
Чтобы аобзвкть или удйпчгь компонент, установите или сни!*п-е фпажои. Затененньй флажок, означает частичную установку компонента Выяснить его состав позволяет кнопка "Состав", Компоненты: ; ПИЙ Fax Services
4,1МБ А
1 Г" 'pJIndexhgService
0.0 ME •
У •$ Internet Explorer
0,0 МБ !
'У' ^Internet Information bervicesfliS) . 16,5 МБ j. i T^^M^n^nprwnt and Mnnihncinn Tnnls .__ 7 F MR . ^ Описание: Includes Web and FTP support, along wkh support loi FrontPage, Wansactions, Active Server Pages, and database connection:. Требуется на диске: Свобоцно наднск*:
102,6МБ 31Б37.Э МБ
I
состав
Рис.9.2. Установка IIS <%@ LANGUAGE=JavaScript %> <TITLE>Tecr ASP
Здесь используется стандартная функция DateO для вывода текущей даты (и времени) в окне броузера. Если открыть такую страницу в броузере, то, скорее всего, она работать не будет (появится только текстовый заголовок) или будет выведено сообщение об ошибке «HTTP 403.1 Forbidden: Execute Access Forbidden Internet Information Services», Тогда настройку IIS надо продолжить. Выберите на Панели управления компонент Администрирование, а потом Internet Information Services (рис. 9.3).
Глава 9
208 flf). Inter net Information Service* l Консоль
Действие
Вил
.
Справк a
4* -!• т.ш.щ $ л !jj Internet Information 5ervioss A - jj$ ALEXEY (локальный компьк - LJ Веб-уэлы - ^ Default Web Sits fjfc USHelp ^ btauxdir 2^ _vti_bin
Элемент «Default Web Site» - это папка lnetpub\wwwroot. Надо выбрать этот элемент и нажать кнопку Свойства. На вкладке Веб-узел (рис. 9.4) надо задать IP адрес своего компьютера: 127. 0. 0.1. Кроме этого, надо проверить вкладку Домашний каталог: на ней должен быть указан действительный путь к папке wwwroot. Теперь необходимо дать разрешения для определенных файлов, входящих в «узел». Выделите необходимый файл (например, asptest.asp) в окне US и раскройте его контекстное меню. Выберите команду Все задачи => Мастер разрешений. На втором шаге (первый пропускается) надо установить переключатель в режим «Выбрать настройки безопасности на основе шаблона». На третьем шаге выбрать «Public Web Site», Четвертый шаг пропускается (там можно прочитать полезную информацию), пятый шаг финишный. Если в дальнейшем вы захотите переименовать файл, мастер надо будет запустить заново. После этого можно открыть броузер (Internet Explorer версии 5 и выше) и имитировать доступ к «Web-странице», набрав в строке Адрес: http://127.0.0.1/asptest.asp После этого броузер должен правильно отработать скрипт и показать дату (рис. 9.5).
Подготовка данных для Интернета
209 ;
Сеонства:'ОеГаи11 Web Site
' > ?
Безопасность каталога
Заголовки НТТг*
.Специальные ошибки Веб-цэел
Server Extensions
^ Фильтры ISAPI
Домашний к.ат а лог
Документе
Идентификация ееб-углэ 1
Описание
Defaull Web Site
IP-адрес:
127 О ОЛ
TCP-порт
80
vj
Дополнительно.
Подключения Зремя ожидания
' I: .
3 Разрешить поддержка открытых соединений НТГР (3 Вести шурнал Формат текущего журнала ^Формат Файла журнала Microsoft US
QK,
| |
'v*
Отмена
j
',"
••..
Двойства... j
[
Справка
Рис. 9.4. Настройка локального «Web-узла» :*;'jTecT ASP -Microsoft Internet Explorer |l Файл
Правка
• Назад -
Вид ,(
Избранное Ы~\
Сервис
£\
'(]
Справка / '• Псжск
•-''.- Избранное
(ДчМедиа
4ff\
tLi^.http://127.0.0.iyasptest.asp
Вывод даты:
Моп Feb 16 14:39:35 2004 Рис. 9.5. Файл ASP в броузере
Теперь можно приступать к тестированию страниц, созданных в Access. Для этого надо сделать следующее: 1.
Создайте пустую базу данных; назовите ее, к примеру, baza1.mdb и сохраните в папке lnetpub\wwwroot.
210
Глава 9
2. Откройте две программы Access с базами данных «Борей» и bazal. 3. Перетащите таблицу Товары из базы данных «Борей» в базу данных baza!. 4. Выберите таблицу Товары в файле baza1.mdb и выберите команду Файл ^ Экспорт. 5. Выберите при сохранении тип файла «Microsoft Active Server Pages» и дайте имя файлу, например tovari. 6. В открывшемся окне параметров обязательно заполните строку Название источника (bazal) и при необходимости выберите опции, например пароль доступа. 7. В окне IIS запустите мастер разрешений для файла tovari.asp, как было сделано в предыдущем примере. 8. На Панели управления раскройте компонент Источники данных (ODBC). Выберите вкладку Системный DSN. Здесь надо установить драйвер для базы данных. Нажмите кнопку Добавить. Выберите «Microsoft Access Driver (*.mdb)». Нажмите кнопку Готово. 9. В появившемся окне Установка драйвера ODBC для Microsoft Access введите в строке «Имя источника данных» имя файла: bazal. 10. Нажмите кнопку Выбрать и укажите местонахождение файла baza1.mdb (рис. 9.6). Закройте окно, нажав кнопку ОК. __-•
Имя источника данных, указанное при генерации asp-документа, должно совпадать с именем источника данных, указанного при установке драйвера ODBC. В противном случае при открытии страницы будет выдано сообщение о внутренней ошибке сервера.
Теперь, как и в предыдущем примере, можно использовать броузер для просмотра asp-файла (рис. 9.7). Вместо запуска Internet Explorer можно воспользоваться контекстным меню файла в окне IIS. Команда для открытия ASP в броузере называется Обзор. ASP по праву считается одним из самых проблематичных направлений Webконструирования, и кажущаяся простота этого примера не должна вас обманывать. В реальных задачах дело обстоит, конечно, несколько сложнее. ASP - отдельная ветвь программирования со своими тонкостями, приемами и «подводными камнями». Использовать в качестве основы файл, созданный в Access, конечно, можно. Но, скорее всего, его придется доработать в зависимости от конкретной задачи. Для этого желательно применять «продвинутый» гипертекстовый редактор с поддержкой ASP, например MS FrontPage.
Подготовка данных для Интернета Установка дрлнвера ODBC для Microsoft Access Имя источника данных: ;Ьа*а1 1 Описание: База товарос База денной Базайэнньгх
9.3. Создание страницы доступа к данным Еще одним вариантом подготовки данных для Интернета является создание страниц доступа к данным. И в этом примере используем данные из базы «Борей».
Глава 9
212
На вкладке Страницы выберем режим Создание страницы доступа к данным с помощью мастера. В мастере выберем таблицу Товары и ее поля КодТипа, Марка, ЕдиницаИзмерения, Цена, НаСкладе. ПоставкиПрекращены, как показано на рис. 9.8. Мастер страниц Какие поля следует добавите на страницу? Допускается выбор нескольких таблиц или запросов.
Таблицы и запросы Таблица: Товары Доступные паля: -!
КодТоварэ КодПостанцика МипниаиьныйЗапас
|I
Выбранные поля: | Г7СП .Марка ; Цена ! | | НаСкладе i I. . . .I Пост авкиПре к ращены
и
Отмена
|
]
Далее >
] |
Готово
Рис. 9.8. Выбор полей для страницы доступа к данным
На втором шаге мастера выберем для группировки поле КодТипа (рис. 9.9). Это очень похоже на создание отчета с группировкой, но результат будет другой. На третьем шаге выберем сортировку по возрастанию для поля Марка (рис. 9.10). Здесь можно выбрать для сортировки даже четыре поля, но на самом деле вряд ли стоит использовать больше двух. На последнем шаге остается только задать имя страницы, например Товары. После этого страницу можно открыть для просмотра в обычном окне или для переделки в конструкторе. Как выглядит страница, показано на рис. 9.11. Поле группировки снабжено знаком «плюс» для раскрытия группы (после чего значок превращается в «минус»). Из-за группировки появились и две строки управления записями. Это не очень удобно, и их надо отделить друг друга и снабдить комментариями. Все это можно сделать, отредактировав код страницы.
Подготовка данных для Интернета
213
Мастер страниц Добавить уровни группировки'
Марка, ЕдиницаИзмерения, Цена НаСкладе, ПоставкиПрекращень Марка
tulila :Цена •НаСкладе ПоставкиП рекращены Уровень
Группировка,.,
I
Отмена
| [
<Назад
Ц
Далее >
| |
Готово
Рис. 9.9. Выбор поля для группировки данных Мастер страниц Задайте требуеиый порядок сортировки. Допускается сортировка записей по возрастанию или по убыванию, включающая до 4 попей.
1. Марка! I
, v i по возрастанию
!яа
v
1 i Отмена
] |
по возрастанию
1 i < Цадад
][ Далее > J ]
Рис. 9.10. Выбор поля для сортировки данных
LOTOBO
Глава 9
214
КодТипа Марка: Единица Цена: На складе
39
ПоставкиПрекращеО
j Товары! m 12
Тоеары-КодТипа 1 из 8
Рис. 9.11. Пример страницы доступа к данным
Если использовать команду Вид ^> Источник HTML, то страница будет открыта во встроенном редакторе (рис. 9.12). Как правило, страницы, созданные программным способом, имеют большой объем кода, и это достаточно неудобно. Данная страница построена в соответствии с несколькими спецификациями: HTML, XML, CSS и Java Script. Во время правки кода необходимые руководства желательно держать под рукой. Данный редактор хорош, кстати, тем, что в его встроенном справочнике есть информация по скриптовым языкам и HTML. На вкладке Страницы в базе данных помещается только ярлык, а сама страница сохраняется в виде html-файла. Просмотр таких страниц в локальном режиме обычно не вызывает проблем, но у пользователя на компьютере должны быть установлены Web-компоненты для MS Office 2003. Это достаточно серьезное неудобство, ограничивающее возможность публикации данных для широкого круга пользователей. Указанные компоненты можно, конечно, загрузить с сайта Microsoft, но объем файла достигает семнадцати мегабайт, и нет гарантии, что они установятся (например, при наличии более ранней версии MS Office). Другое дело — публикация для определенных пользователей, например работников предприятия. При создании файла программа указывает в нем ссылку на базу данных с указанием локального пути. Перед размещением базы и страницы в Интернете этот путь надо удалить. Это можно сделать даже в Блокноте, отыскав параметр «Data Source» (рис. 9.13). Или можно искать имя папки. Например, в моем случае база данных находилась в папке Борей, и это слово легко найти, потому что оно больше не встречается в коде. Найденный путь нужно заменить именем файла базы данных. Причем можно использовать и другой файл. В нашем примере сюда
Подготовка данных для Интернега
215
в Страница! - Microsoft Script Editor - Стрлница1 File
Edit
yiev* A -J
Tool? I
VVmdow
Help
'
CIDOCTYPE HTML PUBLIC "-,Л'¥ЗС//DTD HTKL 1.0 Transitior
"Lirnischemas-irilcroaofC-conl of f ice : access" xmlns : J'- = "uuia:C2Ftl010-65B3~lldl-A29F-aOAAaOCHSB2"><TITLE>TDB*pH rr