[an error occurred while processing this directive] | |
1. Базы данных в Microsoft Access 2000 2. Пользовательский интерфейс Microsoft Access 2000 |
4. Работаем с базой данных4.1. Открываем базу данныхЗадание Открываем базу данных. Откройте базу данных Продажа_книг_1.mdb, которая находится в папке Примеры_Access_2000_RUS\Продажа_книг\Задания. Для этого:
Рисунок 10. База данных Продажа_книг_1.mdb
На данный момент в базе данных нет ничего, кроме таблиц, названия которых отображаются в списке при нажатой кнопке «Таблицы». Задание Изучаем базу данных Продажа_книг_1.mdb.
Выделите в списке имя таблицы: Авторы и нажмите на кнопку «Открыть» или на клавишу [ENTER]. Рисунок 11. Данные в таблице Авторы
Теперь данные, которые находятся в таблице, доступны для просмотра и редактирования (см. рис. 11). В каждой строке таблицы - информация об одном из авторов. Вы можете отредактировать имя, дату рождения и биографию автора, изменив значение в соответствующей ячейке таблицы. Чтобы закрыть таблицу Авторы, нажмите на кнопку в заголовке окна «Авторы: таблица». Если Вы что-то меняли в таблице или в свойствах полей, система выведет на экран диалоговое окно для подтверждения изменений. На всякий случай нажмите в нем на кнопку «Нет». Если Вы уверены, что сделанные Вами изменения следует сохранить, нажмите на кнопку «Да».
Нажмите на кнопку «Таблицы» и выделите в списке имя таблицы: Авторы, а затем нажмите на кнопку «Конструктор». Рисунок 12. Структура таблицы Авторы
Вы видите список полей таблицы Авторы (см. рис. 12). В соответствующих колонках этого списка для каждого из полей таблицы указывается имя, тип данных и, если необходимо, вводится произвольный комментарий для других пользователей. В этой таблице три поля. Им соответствуют три колонки, которые Вы видели, когда просматривали находящиеся в таблице данные (см. рис. 11). Если щелкнуть мышью по строке, где содержится информация о некотором поле таблицы, в нижней части окна будут отображены свойства этого поля. На закладке «Общие» Вы можете работать со свойствами, которые задают характер самих данных. Так, щелкнув по верхней строке списка, Вы получите доступ к свойствам поля Автор. Как видите, его максимальная длина – 50 байт, в поле обязательно должны быть введены данные (в раскрывающемся списке «Обязательное поле» проставлено значение Да). Поле Автор является уникальным ключом, и по нему построен индекс - об этом свидетельствует значение Да (Совпадения не допускаются) в раскрывающемся списке «Индексированное поле». Теперь переключитесь на закладку «Подстановка». Там задаются свойства, которые регулируют способ ввода данных в поле. В частности, в раскрывающемся списке «Тип элемента управления» можно указать, каким образом система будет предлагать пользователю вводить значение в это поле таблицы. Для ввода имени автора будет использоваться обычное поле ввода (значение Поле). Для того чтобы закрыть таблицу Авторы, нажмите на кнопку в заголовке окна «Авторы: таблица». Если Вы что-то меняли в таблице или в свойствах полей, система выведет на экран диалоговое окно-подтверждение. На всякий случай нажмите в нем на кнопку «Нет». Если Вы уверены, что сделанные Вами изменения следует сохранить, нажмите на кнопку «Да».
4.2. Добавляем в базу данных таблицы4.2.1. Использование в базе данных внешней таблицы (в формате DBF)Создадим в базе данных таблицу для хранения сведений о клиентах. Предположим, что для работы с клиентами используется не Microsoft Access 2000, а та или иная специализированная система, отказываться от которой мы не собираемся. Эта система хранит информацию о клиентах в файле формата DBF. В Microsoft Access 2000 имеются функции импорта данных, с помощью которых можно считать данные из внешней таблицы и создать для них таблицу аналогичной структуры внутри базы данных. Импорт данных решает большинство проблем при переходе от одной системы к другой, но в нашем случае он не вполне подходит. Если импортировать данные из внешней таблицы в нашу базу данных, то изменения, которые произойдут в таблице после этого (скажем, у одного из клиентов изменится адрес), не будут «видны» в Microsoft Access 2000. Вообще, дублирования данных рекомендуется избегать. К счастью, в Microsoft Access 2000 предусмотрена возможность включить в базу данных внешнюю таблицу и работать с ней, как со всеми остальными таблицами (правда, с некоторыми ограничениями, например средствами Microsoft Access 2000 не получится изменить структуру такой таблицы). Для этого между внешней таблицей и базой данных устанавливается связь. Связать таблицу с базой данных возможно только в том случае, если Microsoft Access 2000 «понимает» формат этой таблицы. В Microsoft Office 2000 имеются средства для работы с таблицами в формате Microsoft Access разных версий, Microsoft Excel, DBF различных реализаций, с текстовыми файлами, документами в формате HTML, а также, при наличии соответствующих драйверов, с любыми ODBC-совместимыми источниками данных. Таблица, которую мы будем связывать с базой данных, хранится в папке Примеры_Access_2000_RUS\Продажа_книг\Задания, имя файла - clients.dbf. Задание Добавляем в базу данных таблицу Клиенты.
Рисунок 13. Выбор способа создания таблицы
Рисунок 14. Диалоговое окно «Связь». Выбор внешней таблицы для использования в базе данных
В раскрывающемся списке «Тип файлов» выберите формат dBase III. После этого в списке папок и файлов станет видно имя файла clients.dbf. Выделите в списке имя файла clients.dbf. Нажмите на кнопку «Связь». После этого на экране появится сообщение о том, что связь с таблицей clients установлена. Нажмите в диалоговом окне сообщения на кнопку «OK». В диалоговом окне «Связь» нажмите на кнопку «Закрыть». После этого таблица clients будет добавлена в базу данных. Расположенная слева от пиктограммы стрелка обозначает, что таблица находится не внутри базы данных, а является внешней по отношению к ней. Замечательно, что когда данные таблицы clients, будут модифицированы в среде приложения, с помощью которого она была создана, эти изменения будут отражены и в среде Microsoft. Щелкните мышью по названию таблицы clients. Нажмите на клавишу [F2]. После этого название сделается доступным для редактирования. Введите новое название таблицы и нажмите на клавишу [ENTER]. Мы будем считать, что Вы назвали ее Клиенты.dbf Access 2000.
Естественно, это имя будет актуально только в пределах нашей базы данных, сам файл clients.dbf переименован не будет. Щелкните мышью по названию таблицы clients. Нажмите на клавишу [F2]. После этого название станет доступным для редактирования. Введите новое название таблицы и нажмите на клавишу [Enter]. Мы будем считать, что вы назвали её Клиенты (рис. 15). Рисунок 15. В базе данных появилась связь с таблицей Клиенты
Выберите в списке имя таблицы: Клиенты. Для просмотра таблицы дважды щелкните мышью по ее значку в списке в окне базы данных либо нажмите на кнопку «Открыть». После этого откроется окно просмотра и редактирования таблицы. Поскольку таблица содержит поля со служебной информацией другого приложения - не пугайтесь, если значения в некоторых столбцах выглядят несколько «странно». Найдите в таблице столбцы COMPANY, NAME, ADDR1, CITY, ZIP, COUNTRY, PHONE и SALUTATION. Эти поля мы будем использовать для формирования таблицы продаж и формирования отчетов о продажах. Названия столбцов говорят сами за себя, в комментариях нуждается, пожалуй, только поле SALUTATION - в нем хранится обращение к клиенту. Его можно использовать для формирования писем клиентам. Закройте окно просмотра и редактирования таблицы. Вы можете просматривать структуру внешней таблицы, однако возможности ее изменения ограничены. Например, невозможно менять типы полей. 4.2.2. Создание новой таблицыТеперь нужно приспособить нашу базу данных для хранения информации о продажах книг. Очевидно, существует много разных способов сделать это, а выбор способа определяется содержательной постановкой задачи. Иными словами, прежде чем создавать в базе данных таблицу Продажи, следует решить, для чего и как мы собираемся использовать сведения о продажах. Предположим, что нам потребуется решать следующие задачи:
Перечисленные выше задачи можно будет решать в том случае, если структура базы данных позволит построить запрос, который соберет в одну запись сведения о каждой проданной книге, дату ее продажи и цену, по которой она была продана, сведения о клиенте, который ее приобрел; иначе говоря, нам нужно будет для каждой проданной книги получать записи с полями Автор, Произведение, Издательство, Объем, Год издания, Цена, Дата продажи и Клиент; найдется способ запретить повторный ввод сведений о продаже ранее проданной книги. Способ, который, как говорится, лежит на поверхности, состоит в следующем. В базе данных создается таблица Продажи со всеми необходимыми полями. Всякий раз, продавая книгу, мы будем добавлять в эту таблицу новую запись, и копировать в нее данные из соответствующих записей таблиц Произведения, Книги и Клиенты. Затем из таблицы Книги нужно будет удалить запись, которая соответствует проданной книге. Данный способ, несмотря на свою очевидность, достаточно трудоемок и неудобен. Сначала нужно собрать данные из нескольких таблиц, затем создать новую запись в таблице Продажи и поместить в нее собранные данные, затем удалить запись из таблицы Книги. В нашем случае существует более изящное решение. Создаем таблицу Продажи с полями Код книги, Дата продажи и Клиент, причем поле Код книги делаем уникальным ключом. Эту таблицу связываем с таблицей Книги по полю Код книги отношением типа «один к одному». Всякий раз, продавая книгу, мы будем создавать для нее запись в таблице Продажи. Если книга уже продана, то попытка создать для нее еще одну запись в этой таблице автоматически приведет к неудаче, следовательно, необходимость вручную удалять записи из таблицы Книги отпадает. Чтобы получить полные сведения обо всех проданных книгах, будем использовать запрос, предусматривающий внутреннее объединение таблиц Книги и Продажи (см. п. 1.6). Чтобы получить список всех непроданных книг, будем использовать запрос, который предусматривает левое внешнее объединение этих таблиц и выбирает из результирующей таблицы только те записи, у которых значение в поле Дата продажи отсутствует (т.е. связанных записей в таблице Продажи нет). Итак, приступим. Задание Добавляем в базу данных таблицу Продажи.
Наберите в ячейке название добавляемого поля: Код книги. Нажмите на клавишу [TAB] - курсор переместится на одну ячейку вправо, в столбец «Тип данных». Ячейка превратится в раскрывающийся список. Выберите в этом раскрывающемся списке тип поля: Числовой. Это означает, что поле Код книги имеет тип Числовой. Теперь сделаем поле Код книги уникальным ключом таблицы Продажи. Для этого нажмите на кнопку в панели инструментов. Обратите внимание: в узкой колонке слева от названия поля появился значок . Кроме того, внизу окна на закладке «Общие» в раскрывающемся списке «Индексированное поле» автоматически появилось значение Да (Совпадения не допускаются). Последнее означает, что таблица будет проиндексирована по своему ключевому полю. Сделаем поле Код книги обязательным для ввода (чтобы не было записей, у которых это поле не заполнено). Для этого щелкните мышью в раскрывающемся списке «Обязательное поле» и выберите в раскрывающемся списке значение: Да.
Переключитесь на закладку «Подстановка». В раскрывающемся списке «Тип элемента управления» выберите способ ввода Поле со списком. После этого на закладке появится группа полей, предназначенных для описания свойств раскрывающегося списка, с которым будет работать пользователь. В раскрывающемся списке «Тип источника строк» выберите: Таблица или запрос. Это означает, что строки, которые будут появляться в раскрывающемся списке и из которых пользователь сможет выбрать название продаваемой книги, будут формироваться из записей некоторой таблицы или некоторого запроса. В поле ввода «Источник строк» введите значение: SELECT Книги.[Название книги], Книги.[Код книги] FROM Книги ORDER BY Книги.[Название книги]; Это текст запроса на языке SQL. Данный запрос берет из таблицы Книги два поля: Название книги и Код книги. Каждый пункт раскрывающегося списка, предназначенного для выбора продаваемой книги, будет соответствовать одной записи из таблицы Книги и содержать значения перечисленных выше полей. Предложение ORDER BY Книги.[Название книги] нужно для того, чтобы книги в списке были отсортированы по названиям в алфавитном порядке. Заметьте, что среди этих полей нет поля Автор. Как Вы помните, нет соответствующего поля и в таблице Книги. Чтобы при выборе книги видеть еще и поле Автор, потребовался бы более сложный запрос. Но поскольку мы еще не дошли до конструирования запросов, придется выбирать книги по названию. В поле ввода «Присоединенный столбец» введите номер столбца раскрывающегося списка, в котором находится значение, предназначенное для ввода в поле Код книги. Поскольку вводить нужно код, а в запросе он стоит на втором месте, следует ввести значение 2. В поле ввода «Число столбцов» введите количество столбцов раскрывающегося списка. В нашем раскрывающемся списке 2 столбца. В раскрывающемся списке «Ограничиться списком» выберите значение Да. Это заблокирует возможность ввести в поле Код книги несуществующий код. Рисунок 16. Описание способа ввода значения в поле Код книги
Щелкните мышью в ячейке на пересечении второй строки списка полей и столбца «Имя поля». Наберите в этой ячейке имя поля: Дата продажи. Нажатием на клавишу [TAB] перейдите в соседнюю ячейку (вторая строка, столбец «Тип данных») и выберите в раскрывающемся списке тип: Дата/время. Переключитесь на закладку «Общие». Введите в поле ввода «Значение по умолчанию» строку: Date(). Тогда при создании в таблице Продажи новой записи в поле Дата продажи автоматически будет заноситься текущая дата. Рисунок 17. Описание поля Дата продажи
SELECT Клиенты.NAME FROM Клиенты; Рисунок 18. Описание способа ввода значения в поле Клиент
Нажмите на кнопку в заголовке окна конструирования таблицы. В диалоговом окне подтверждения нажмите на кнопку «Да». В диалоговом окне «Сохранение» введите в поле имя созданной нами таблицы: Продажи и нажмите на кнопку «OK». Окно закроется, а в списке таблиц в окне базы данных появится таблица Продажи. Как, по-вашему, можно ли уже начинать продавать книги? В принципе да, но на самом деле еще нет. Вы, вероятно, помните, что таблица Продажи должны быть связана с таблицей Клиенты (по полю Клиент из таблицы Продажи и полю NAME из таблицы Клиенты) и с таблицей Книги (по полю Код книги). Поэтому теперь нужно поместить таблицы Клиенты и Продажи на схему данных, создать необходимые связи и позаботиться о целостности данных. 4.2.3. Создаем связи между таблицамиЗадание Добавляем таблицы на схему данных, создаем и настраиваем связи между таблицами.
Рисунок 19. Добавление таблицы Клиенты на схему данных
Нажмите на кнопку «Добавить». После этого на схеме данных появится таблица Клиенты. В списке можно выделить сразу несколько таблиц. Для добавления на схему данных одной таблицы достаточно дважды щелкнуть мышью по соответствующему пункту списка. Самостоятельно добавьте на схему данных таблицу Продажи. Нажмите на кнопку «Закрыть».
Сделайте так, чтобы в таблицах Продажи и Клиенты были видны поля Клиент и NAME соответственно. Таблицы (точнее, списки полей таблиц) можно растягивать мышью, как обычные окна, а также прокручивать с помощью вертикальных полос прокрутки. Отбуксируйте мышью поле Клиент из таблицы Продажи на поле NAME в таблице Клиенты. После этого откроется диалоговое окно «Изменение связей» (рис. 20). Нажмите в нем на кнопку «Создать». Связь будет создана. Рисунок 20. Параметры связи между таблицами Продажи и Клиенты
Некоторые переключатели в окне, изображенном на рис. 20, недоступны. Это объясняется тем, что средства автоматического поддерживания целостности данных для внешних таблиц, каковой является таблица Клиенты (см. п. 4.2.1), не работают. Впрочем, в данном случае в этом нет необходимости. Иначе обстоит дело в случае с таблицами Продажи и Книги и связями между ними.
Отбуксируйте мышью поле Код книги из таблицы Книги в таблицу Продажи (но не наоборот! Почему - см. дальше). После этого откроется диалоговое окно «Изменение связей» (рис. 21). Опишем подробно, как устанавливаются связи между таблицами. Обратите внимание: в нижней части диалогового окна выведен тип устанавливаемого отношения. Теперь посмотрите, пожалуйста, внимательно на таблицу, которая расположена в этом диалоговом окне. Каждая строка таблицы соответствует связи по одному из полей. В левом столбце выведены поля главной таблицы, а в правом - связанной с ней. Главная - это та, из которой Вы отбуксировали поле в связанную, в данном случае главная таблица - Книги, а связанная - Продажи. Почему мы сделали именно так, а не наоборот? Дело в том, что при удалении некоторой записи из таблицы Книги связанные с ней записи из таблицы Продажи (если такие имеются) «повиснут в воздухе». Они лишатся смысла, и целостность базы данных будет нарушена. В этой ситуации было бы разумно запретить удалять из таблицы Книги записи, имеющие связанные с ними записи в таблице Продажи. Если хочешь удалить книгу - прежде удали все ее продажи. Каким может быть «физический смысл» этой последовательности операций? Например, таким: Вы продали книги с типографским браком, через некоторое время покупатели вернули их Вам, а Вы - типографии. Итак, чтобы запретить удаление записей главной таблицы (если в связанной таблице имеются связанные с ними записи), установите во включенное состояние переключатель «Обеспечение целостности данных». Рисунок 21. Свойства связи
Книгу, с которой связаны записи в таблице Продажи, удалить нельзя. Если затем установить во включенное состояние переключатель «каскадное удаление связанных записей», то при удалении записи в главной таблице связанные с ней записи из связанной таблицы будут удалены автоматически. Нажмите на кнопку «Объединение». После этого откроется диалоговое окно «Параметры объединения» предназначенное для выбора типа объединения: внутреннее - кнопка выбора «1», левое внешнее - «2», правое внешнее - «3» (рис. 22). Нам в данном случае нужно устанавливаемое обычно по умолчанию внутреннее объединение. Убедитесь в том, что во включенное состояние установлена кнопка выбора «1» и нажмите на кнопку «OK». (Если кнопка выбора «1» уже была установлена во включенное состояние, можно нажать на кнопку «Отмена».) В диалоговом окне «Изменение связей» нажмите на кнопку «Создать». После этого диалоговое окно закроется, а нужная связь будет создана. Рисунок 22. Выбор типа связей между таблицами
Рисунок 23. Полученная в результате схема базы данных должна выглядеть примерно так
Задание Рассмотрите устройство других связей, изображенных на схеме. Чтобы открыть диалоговое окно «Изменение связей», следует дважды щелкнуть мышью по соответствующей линии, которая обозначает связь. 4.2.4. Просматриваем связанные таблицыВ Microsoft Access 2000 предусмотрена возможность, которой не было в более ранних версиях системы. Просматривая данные в таблице, Вы можете, не покидая последней, просмотреть записи из других таблиц, связанных с ней. Обратимся к таблице Авторы на рис. 11. Столбцу Автор в ней предшествует безымянный столбец, в ячейках которого расположены значки . Иными словами, каждая запись открывается таким значком. Чтобы увидеть записи, связанные с данной записью главной таблицы, щелкните мышью по значку слева от этой записи. После этого строки главной таблицы раздвинутся и прямо под данной записью отобразятся записи, связанные с ней (значок же примет форму ). В данном случае это будут записи из таблицы Авторство. Однако поле Автор в них будет отсутствовать (попробуйте объяснить, почему!). Чтобы вернуть таблицу в исходное положение, щелкните мышью по значку еще раз. Вообще говоря, не все таблицы обладают этим свойством. Так, таблицы Авторство и Продажи не имеют в своем составе столбца с такими значками; следовательно, для их записей мы не можем просматривать связанные с ними записи из других таблиц. На первый взгляд, это положение дел предопределено их «служебным» характером в общей схеме данных. Однако и для них существует возможность непосредственно в режиме просмотра и редактирования таблицы создать дополнительные связи ее с другими таблицами. Тогда Вы сможете и для их записей просматривать связанные с ними записи от других таблиц. Чтобы сделать это возможным, необходимо ввести какую-либо таблицу как связанную с данной. Для того чтобы создать такие дополнительные связи для таблицы (в нашем случае Авторство), в меню «Вставка» выберите пункт «Подтаблица». На экране появится диалоговое окно «Вставка подтаблицы» (рис. 24). Выберите в списке название таблицы, которую Вы хотите ввести как связанную или подчиненную. Щелкните по этому названию мышью. Выберите в раскрывающихся списках «Подчиненные поля» и «Основные поля» название полей связанной таблицы и главной таблицы, по которым осуществляется связь. Нажмите на кнопку «OK». Между таблицами будет создана связь. В безымянном столбце слева от полей появятся значки . Рисунок 24. Диалоговое окно «Вставка подтаблицы»
Чтобы разорвать отношения данной таблицы со связанными таблицами, выберите в меню «Формат» пункт «Подтаблица», а в следующем меню выберите пункт «Удалить». Следует сказать, что связанные таблицы могут располагаться в несколько ярусов: для каждой записи первой отображаются несколько записей второй, для каждой записи второй отображаются несколько записей третьей и т. д. Задание Введите таблицу Книги как подчиненную таблице Авторство. 4.2.5. Используем созданные таблицы...Ну а теперь можно продавать книги? Можно! Задание Вводим данные в таблицу Продажи.
Щелкните мышью в нижней (и единственной пока) ячейке столбца Код книги. После этого в ячейке появится кнопка для вызова, раскрывающегося списка. Нажмите на нее и вызовите список. В списке перечислены не названия, а экземпляры книг - каждое из названий может быть упомянуто несколько раз. Чтобы увидеть названия полностью, Вы можете увеличить ширину столбца, отбуксировав вертикальный разделитель. Выберите в списке какую-нибудь книгу. Рисунок 25. Ввод данных о продаже книг
Нажмите на клавишу [TAB]. После этого курсор переместится в столбец Дата продажи. В ячейке уже должна быть введена текущая дата. Для перемещения в столбец Клиент снова нажмите на клавишу [TAB]. Выберите в раскрывающемся списке клиента, который приобрел книгу.
Задание Попробуйте еще раз продать книгу, которую Вы только что продали (сообщение об ошибке будет выдано при попытке покинуть запись). Возможно, Вы обратили внимание на некоторые шероховатости полученного решения. Во-первых, проданная книга снова появляется в раскрывающемся списке в столбце Код книги. Зачем?! Во-вторых, цена книги, введенная в соответствующем поле таблицы Книги, при продаже ни разу не появляется на экране. На практике это было бы очень неудобно. Оба недочета можно исправить, редактируя не таблицу Продажи, а использующий ее запрос. Прочитав следующий пункт и выполнив приведенные в нем задания, Вы сможете сделать это самостоятельно. 4.3. Конструируем запросы4.3.1. Что такое запросы и какими они бывают в Microsoft Access 2000Мы спроектировали и создали базу данных, заполнили ее информацией. Но все это будет оставаться «вещью в себе» до тех пор, пока мы не научимся получать из базы данных ответы на всевозможные вопросы и в зависимости от полученных ответов предпринимать те или иные действия, в том числе, связанные с изменением базы данных. Для решения подобных задач в реляционных базах данных служат запросы. В Microsoft Access 2000 поддерживаются запросы следующих видов:
Запросы различных типов можно комбинировать. Например, можно сначала получить набор записей, удовлетворяющих определенным условиям (запрос на выборку), а затем поместить эти записи в отдельную таблицу (запрос на добавление). Для описания запросов к реляционным базам данных используется язык SQL. Поскольку для пользователей, не знакомых с программированием, его освоение может представлять определенные трудности, в Microsoft Access 2000 предусмотрен визуальный конструктор, который дает возможность составлять достаточно сложные запросы примерно тем же способом, каким мы конструировали таблицы и настраивали связи между ними (кстати, для описания структуры реляционных баз данных тоже существует специальный язык - DDL). Кроме того, для создания запроса будем использовать мастер запросов. 4.3.2. Запросы на выборкуДля начала рассмотрим простейший случай запроса на выборку - поиск записей внутри одной таблицы. Задание Ищем данные по всем авторам, которые родились до войны.
Рисунок 26. Создание запросов с помощью мастера запросов
Рисунок 27. В результирующую таблицу будут включены поля Автор, Дата рождения автора и Биография автора из таблицы Авторы
Рисунок 28. Последнее диалоговое окно мастера запросов
Нажмите на кнопку «Готово». После этого запрос будет открыт в режиме конструктора (рис. 29).
Рассмотрите внимательно нижнюю часть окна. Там находится таблица полей запроса. Каждый столбец этой таблицы соответствует одному из полей результирующей таблицы. Строки задают свойства полей. Первая (верхняя) строка таблицы - названия полей. Вторая строка - названия таблиц, из которых берутся эти поля. Далее (до переключателей) могут быть расположены строки для ввода условий сортировки и группировки строк в результирующей таблице. Переключатель определяет, будет ли значение поля выведено на экран (или будет использоваться только для формирования запроса). Ниже переключателей - условия отбора, т.е. условия, которым должны удовлетворять записи, для того чтобы попасть в результирующую таблицу. Щелкните мышью в ячейке на пересечении столбца Дата рождения автора и строки Условия отбора. Наберите в ячейке условие отбора записей: <22.06.1941 (т.е. включать в результирующую таблицу только те записи, у которых значение в поле Дата рождения автора меньше 22.06.1941). Нажмите на клавишу [ENTER]. Рисунок 29. Изменение структуры запроса в режиме конструктора
Обратите внимание: дата заключена между символами #, как строка в кавычки.
Рисунок 30. Текст запроса
Вы можете в любой момент посмотреть результаты запроса (рис. 31), дважды щелкнув мышью по его названию в списке в окне базы данных, причем, если с момента создания запроса данные в таблицах изменятся, результирующая таблица все равно будет сформирована правильно (т.е. запросы «следят» за теми изменениями в базе данных, которые их касаются). Рисунок 31. Результаты запроса
Теперь научимся формировать запросы с использованием нескольких таблиц. Задание Ищем данные по всем отечественным авторам, которые публиковались за рубежом.
В раскрывающемся списке «Таблицы и запросы» выберите: Таблица: Отечественные авторы. Переместите в список «Выбранные поля» все поля, кроме поля Автор. Нажмите на кнопку «Далее >». В следующем диалоговом окне «Создание простых запросов» снова нажмите на кнопку «Далее >». Рисунок 32. Подготовка запроса, использующего две таблицы
Установите во включенное состояние кнопку выбора «Изменить макет запроса», чтобы можно было отредактировать запрос. Нажмите на кнопку «Готово». После этого откроется окно запроса в режиме конструктора (рис. 33).
Щелкните мышью в ячейке на пересечении столбца Издавался за рубежом и строки Условие отбора. Наберите в ячейке условие отбора записей: Истина (т.е. включать в результирующую таблицу только те записи, у которых значение этого поля принимает значение Истина). Переключатель в этом столбце установите в выключенное состояние - ведь в результирующую таблицу заведомо попадут только те записи, у которых значение этого поля является истинным, - так зачем его отображать?! Обратите внимание на верхнюю часть окна. Там находятся две используемые в данном запросе таблицы и определена связь между ними. Связи в запросах, вообще говоря, могут отличаться от связей на схеме данных. Рисунок 33. Запрос, использующий две связанные таблицы
4.3.3. Запросы с параметрамиЗначения, с которыми в запросе сравниваются значения полей, не обязательно должны быть константами. Наряду с постоянными значениями в запросах можно использовать параметры, которые при выполнении запроса Microsoft Access 2000 попросит пользователя ввести. Создать запрос с параметром очень легко: вместо константы в конструкторе запросов в строку Условие отбора следует ввести имя параметра, заключенное в квадратные скобки, например, так: [Мой параметр]. Задание Самостоятельно переделайте запрос Авторы, которые родились до войны (см. п. 4.3.2) в параметрический, в качестве параметра выбрав дату рождения. При выполнении задания обратите внимание, что вводить можно конкретные даты, но не условия, т.е. в нашем случае с помощью такого параметрического запроса можно найти автора, родившегося, например, 25 апреля 1973 г., но не список авторов, родившихся в определенный период. Для этого в строке Условие отбора в конструкторе запросов следовало бы ввести, например: >[От] And <[До]. База данных Продажа книг 1.dbf Вам больше не понадобится; закройте ее. Для этого выберите в меню «Файл» пункт «Закрыть». 4.3.4. Запросы с группировкой и сортировкой записейЕсли в каком-либо поле таблицы встречаются одинаковые значения, то группы записей, у которых значения этого поля совпадают, можно «свернуть» в одну запись. Что при этом происходит с остальными полями? Группу численных значений можно свести в одно с помощью статистических функций, таких как сумма (функция Sum) или среднее арифметическое (Avg), максимальное или минимальное значение (функции Min и Max), среднеквадратичное отклонение (функция StDev). Для всех типов полей, за исключением Поле МЕМО и OLE, можно вычислить количество различных значений в группе (функция Var) и количество любых значений, т.е. по сути дела количество записей в группе (функция Count). Можно заменить все значения одним, взятым у первой или у последней записи группы (функции First и Last). Можно указать в качестве значения поля выражение, которое использует перечисленные здесь функции, например среднее арифметическое между максимальным и минимальным значением поля. Кроме того, имеется возможность включать в группы только записи, удовлетворяющие определенным условиям. Иными словами, Вы можете еще до того, как будет выполнена группировка, исключить некоторые записи из рассмотрения (например, чтобы они «не портили статистику»). Все последующие задания выполняются с базой данных Примеры_Access_2000_RUS\Продажа книг\Задания\Продажа книг 2.mdb. Откройте ее. Задание Знакомимся с возможностями группировки и сортировки данных (на примере запроса Прайс-лист на книги).
Выделите в списке запрос Прайс-лист на книги. Нажмите на кнопку «Конструктор». После этого структура запроса будет доступна для просмотра и редактирования в окне конструктора (рис. 34). Рисунок 34. Структура запроса Прайс-лист на книги
Легко заметить, что он задействует четыре таблицы: Книги, Авторство, Произведения, и Продажи. В основном вся информация, которую обычно включают в прайс-лист, содержится в таблице Книги. Отсутствуют там только имена авторов и аннотации, которые мы берем из таблиц Авторство и Произведения соответственно. Таблица Продажи нужна нам здесь для того, чтобы отличать проданные книги от непроданных. Если у записи в результирующей таблице в поле Дата продажи находится непустое значение, значит, книга уже была продана и в прайс-лист ее включать нельзя. Для связи таблицы Продажи с таблицей Книги используется левое внешнее объединение (см. п. 1.6), поскольку при использовании внутреннего объединения в результирующую таблицу не могла бы попасть ни одна запись из таблицы книги, не имеющая связанной записи в таблице Продажи, и прайс-лист всегда был бы пустым! Похожая ситуация с таблицей Авторство. Если использовать внутреннее, а не левое внешнее объединение, то в прайс-лист не попадут книги, не имеющие авторов. Теперь поговорим о том, каким образом в этом запросе следует группировать записи. Наиболее очевидное решение - группировать книги по авторам и названиям. При этом все книги одного и того же автора и с одним и тем же названием будут свернуты в одну строку, причем для них нужно будет с помощью какой-нибудь статистической функции рассчитать единую цену. Но такая группировка была бы некорректной, поскольку, скажем, прижизненное издание Эразма Роттердамского стоит на несколько порядков дороже, чем современное. Кроме того, выпуски одного и то же произведения, сделанные разными издательствами или одним и тем же издательством в разные годы, будут отличаться и по объему (зависит от формата, оформления и т. п.), и по цене. Что же касается группировки по имени автора, то это вообще приведет к неправильному результату. Книга, у которой более одного автора, будет встречаться в результирующей таблице столько раз, сколько у нее авторов, потому что для каждой пары Автор - Название книги будет сформирована отдельная группа. Итак, в данной ситуации лучше всего группировать записи по названию книги, году издания и названию издательства (см. рис. 34). Кроме того, из группировки надо заранее исключить проданные книги, т.е. условием включения записи в группировку должно быть пустое значение в поле Дата продажи (рис. 35). Рисунок 35. Включение в группировку только непроданных книг
А как быть с остальными полями? Что касается объема, будем считать, что у одного и того же произведения он одинаков при одинаковых издательствах и годах издания. Поэтому можно, не мудрствуя лукаво, взять его из любой записи в группе, например из первой (см. столбец Объем). Несколько сложнее обстоит дело с ценой. Вообще говоря, у разных экземпляров она, в зависимости от их состояния и особенностей, бывает разной. В этой ситуации можно было бы помещать в результирующую таблицу среднюю, минимальную или максимальную цену. Можно также создать еще одно поле и формировать в нем строку, в которой будет показана средняя цена плюс-минус утроенное среднеквадратичное отклонение. В нашем примере выражение в правом столбце дает одну цену, если разброса цен нет, и границы диапазона, если он есть. Выполнять вычисление с этим полем нельзя, зато его очень удобно использовать в отчетах. Что делать с полем Код книги? Поскольку включать его в отчеты нет никакого смысла, воспользуемся им для подсчета количества экземпляров книг, соответствующих каждой записи результирующей таблицы. Для этого используем статистическую функцию Count (см. столбец Код книги).
В отношении авторов мы проявили определенный волюнтаризм: если у книги несколько авторов, то мы помещаем в результирующую таблицу одного, первого по алфавиту, для чего используем статистическую функцию Min (см. столбец Автор).
Задание Самостоятельно ознакомьтесь с запросом Прайс-лист на книги для VIP-клиентов. Этот запрос формирует список книг, объем которых превышает 500 страниц. Кроме того, этот запрос выводит цену, вдвое большую указанной в базе данных. 4.3.5. Редактирование и добавление записей в запросахЗапросы с достаточно простой структурой допускают редактирование и добавление записей. В ряде случаев это дает возможность сделать ввод данных более удобным, чем при использовании одних только таблиц. В п. 4.2.5 для ввода данных о продажах книг мы использовали собственно таблицу Продажи (см. рис. 25). У этого способа было несколько недостатков. Во-первых, проданные книги не исчезали из списка доступных для продажи. И хотя повторно ввести запись о продаже ранее проданной книги система не позволяла, присутствие лишних записей в списке создавало неудобства. Во-вторых, при выборе книги мы видели только ее название, а другие поля (Цена, Издательство, Год издания) были недоступны для просмотра, что на практике затрудняло бы работу пользователя. Покажем, как в данном случае можно организовать ввод продаж с помощью запроса. В базе данных Продажа книг 2.mdb есть запрос Ввод продаж, структура которого показана ниже (рис. 36). Рисунок 36. Структура запроса Ввод продаж
Этот запрос создает левое внешнее объединение таблиц Книги и Продажи, но не включает в него записи, у которых значение поля Дата продажи непустое. Следовательно, в результирующую таблицу попадают только те записи из таблицы Книги, у которых нет связанных записей в таблице Продажи. Отсутствие последних по определению левого внешнего соединения восполняется пустыми записями, структура которых соответствует таблице Продажи. Если у такой записи в поля Дата продажи и/или Клиент ввести данные, то в таблицу Продажи будет добавлена заполненная этими данными запись. Поле Код книги в новой записи будет заполнено значением из поля Код книги соответствующей записи таблицы Книги. Таким образом, у записи из таблицы Книги появляется связанная запись в таблице Продажи (рис. 37). Рисунок 37. Использование запроса Ввод продаж
4.3.6. Перекрестные запросыВ базе данных Продажа книг 2.mdb есть запрос Проданные книги. Каждая запись в этом запросе соответствует продаже некоторой книги некоторому клиенту. Кроме того, в данном запросе есть еще поля, отображающие дату и сумму сделки. Продажи - традиционный объект исследования менеджеров и экономистов. Каковы динамика и структура продаж, наблюдаются ли сезонные колебания, в том числе по отдельным позициям, и т.п. - знание этих обстоятельств может существенно облегчить принятие важных управленческих решений. Предположим, мы хотим узнать, как продавалось каждое литературное произведение в каждый из месяцев. То, что в таблице указаны даты, а не месяцы - не проблема, по дате всегда можно получить месяц. Но нам нужна «прямоугольная» таблица, в которой, предположим, по вертикали идут названия литературных произведений, а по горизонтали - номера месяцев. При этом на пересечении строки и столбца должна быть проставлена сумма, вырученная от продажи этого произведения в течение этого месяца. Вместо этого у нас есть «длинная» таблица с фиксированным набором столбцов. Как быть? Нужно средство, которым можно было бы «разрезать» таблицу Проданные книги «вдоль столбцов», а затем «повернуть» столбец Дата перпендикулярно столбцу Название. Затем мы сгруппировали бы данные по названиям («в вертикальном направлении») и по датам («в горизонтальном направлении»). Таким образом, сначала были бы получены суммы продаж каждого произведения каждый день, а затем мы сложили бы их для дат внутри каждого месяца. К счастью, в Microsoft Access 2000 существует средство, называемое перекрестным запросом, которое решает эту задачу автоматически практически от начала до конца. Единственное, что в данном случае потребуется сделать самостоятельно - это подставить для каждой записи таблицы Проданные книги номера месяцев вместо дат. В базе данных Продажа книг 2.mdb для этого сформирован очень простой запрос Продажи книг по месяцам. Итак, построим перекрестный запрос, отражающий продажу каждого литературного произведения за каждый месяц. Задание Создаем перекрестный запрос Продажи произведений по месяцам.
Выберите в списке имя таблицы, на основе которой будет построен перекрестный запрос. Поскольку в нашем случае эта таблица - запрос (Продажи книг по месяцам), нужно установить во включенное состояние кнопку выбора «Запросы», а затем выбрать в списке запрос Продажи книг по месяцам (рис. 38). Для перехода к следующему этапу нажмите на кнопку «Далее >». После этого будет открыто следующее диалоговое окно «Создание перекрестных таблиц». Рисунок 38. Создание перекрестного запроса. Шаг 1
Выделите в списке «Доступные поля» имя поля Min_Автор. Затем нажмите на кнопку «>». После этого имя поля Min_Автор будет добавлен в список «Выбранные поля». Таким же образом поместите в список «Выбранные поля» имя поля First_Название книги. Обратите внимание на иллюстрацию в нижней части диалогового окна (рис. 39). Нажмите на кнопку «Далее >». Рисунок 39. Создание перекрестного запроса. Шаг 2
Выберите поле, значения которого будут отождествляться со столбцами перекрестного запроса (что пойдет по горизонтали). В нашем случае это поле Месяцы. Нажмите на кнопку «Далее >». Рисунок 40. Создание перекрестного запроса. Шаг 3
В списке «Поля» выберите поле First_Цена, а в списке «Функции» - функцию Сумма. Обратите внимание на переключатель в левой части диалогового окна. Если он установлен во включенное состояние, для каждой строки будет рассчитано итоговое значение. Итоговые значения размещаются в отдельном столбце. Установите этот переключатель во включенное состояние, если он выключен, - нам ведь не помешают итоговые суммы за все исследуемые месяцы. Нажмите на кнопку «Далее >». Рисунок 41. Создание перекрестного запроса. Шаг 4
Наберите в поле название запроса, скажем: Продажи произведений по месяцам. Установите во включенное состояние кнопку выбора «Просмотреть результаты запроса» (иначе запрос сначала откроется в режиме конструктора). Нажмите на кнопку «Готово». Рисунок 42. Создание перекрестного запроса. Шаг 5
Рисунок 43. Результаты перекрестного запроса
4.4. Конструируем отчетыМы научились использовать запросы для поиска в базе данных нужной информации и ее представления в виде таблиц. Теперь разберемся в том, как составлять на основе этих таблиц внятные и хорошо оформленные печатные документы. Для этого в Microsoft Access 2000 предусмотрены средства создания отчетов. Как правило, отчет создается на основе запроса при помощи соответствующего мастера и задает формат вывода строк этого запроса на печать. Если автоматически построенный отчет не будет устраивать Вас какими-либо деталями (шрифтами, расположением полей и т.п.), это можно быстро исправить с помощью конструктора отчетов. Создать отчет «с нуля» с помощью конструктора также можно, но необходимость в этом у большинства пользователей практически никогда не возникает. Посмотрим, как в Microsoft Access 2000 организовано создание отчетов. Если помните, в базе данных Продажа книг 2.mdb имеется запрос Прайс-лист на книги для VIP-клиентов. Создадим на его основе отчет, который можно будет распечатать и использовать в качестве прайс-листа как такового. Задание Создаем отчет на основе запроса Прайс-лист на книги для VIP-клиентов.
В раскрывающемся списке выберите таблицу, на основе которой должен быть создан новый отчет. В данном случае это запрос Прайс-лист на книги для VIP-клиентов. Нажмите на кнопку «OK». После этого откроется первое диалоговое окно «Создание отчетов».
Переместите в список «Выбранные поля» поля Автор, Название книги, Издательство, Год издания, First_Объем, Count_Код книги, First_Аннотация и VIP-Цена, - желательно, именно в таком порядке (рис. 44). Для переноса в список «Выбранные поля» всех полей из списка «Доступные поля» можно было бы один раз нажать на кнопку «>>». Однако при этом поля были бы перенесены из левого списка в той последовательности, в которой они там находятся. Но порядок полей в правом списке нам важен, поскольку при автоматизированном создании отчета поля в нем расставляются слева направо в той последовательности, в которой они идут в правом списке сверху вниз. Отчет, конечно, потом можно будет отредактировать в конструкторе, но лучше с самого начала сделать все правильно. Скажем, в прайс-листах цену принято показывать последней справа - вот мы и поставили ее последней в списке «Выбранные поля». Для перехода к следующему этапу нажмите на кнопку «Далее >». Рисунок 44. Создание отчета. Выбор полей для вывода в отчет
Добавьте на схему поле Автор (если оно не было добавлено туда автоматически) и поле Название книги. Нажмите на кнопку «Далее >». Рисунок 45. Создание отчета. Задание способа группировки
В раскрывающемся списке «1» выберите поле Год издания. Нажмите на кнопку . Обратите внимание, что после этого пиктограмма на ней изменится - сверху теперь буква «z», что символизирует порядок сортировки по убыванию. В раскрывающемся списке «2» выберите поле Издательство. Если бы нам нужно было вычислить итоги по группе, мы могли бы задать способ их вычисления в диалоговом окне, которое открывается при нажатии на кнопку «Итоги». Это бывает очень полезно, например, при создании отчетов, предназначенных для формирования финансовых документов: счетов, накладных, счетов-фактур и т.п. Нажмите на кнопку «Далее >». Рисунок 46. Создание отчета. Выбор способа сортировки строк внутри групп
Последовательно установите во включенное состояние каждую из кнопок выбора в группе «Макет» (при этом обратите внимание на иллюстрацию слева от группы). Решите, какой способ отображения информационных блоков наиболее подходит для прайс-листа. Оставьте во включенном состоянии соответствующую кнопку выбора. Выберите ориентацию страницы. Нажмите на кнопку «Далее >». Рисунок 47. Создание отчета. Выбор ориентации страницы и вида макета
Последовательно выберите в списке каждый из пунктов (при этом обратите внимание на иллюстрацию слева). Решите, какой стиль оформления отчета Вы предпочитаете. Оставьте выбранным соответствующий пункт списка. Нажмите на кнопку «Далее >». Рисунок 48. Создание отчета. Выбор стиля оформления отчета
Установите во включенное состояние кнопку выбора «Просмотреть отчет» - тогда отчет будет выведен на экран сразу после его создания. В противном случае отчет будет открыт в режиме конструктора (мы в нем еще поработаем). Нажмите на кнопку «Готово». Рисунок 49. Создание отчета. Завершающая стадия
Рисунок 50. Отчет в окне предварительного просмотра
Задание Редактируем отчет в режиме конструктора.
Рисунок 51. Отчет в окне конструктора
Заголовок поля Автор расположен в разделе Заголовок группы «Автор», слева. Сначала его надо выделить. Поскольку это первое поле в отчете, оно, скорее всего, уже выделено. Посмотрите, если по краям поля имеются черные квадратики, значит, так оно и есть. Если нет, выделите это поле, щелкнув по нему мышью. Для удаления поля нажмите на клавишу [Del]. После этого поле исчезнет. Теперь передвинем на его место поле, в котором выводится собственно имя автора. Для этого нужно отбуксировать его мышью влево. Поле Название книги и его заголовок находятся в разделе Заголовок группы «Название книги». Удалите заголовок и передвиньте поле влево таким же образом, как Вы это только что сделали с полем Автор.
В разделе Заголовок группы «Название книги» выделите заголовок поля Год издания. Подведите курсор мыши к левой границе заголовка. Курсор должен принять форму двойной горизонтальной стрелки: . Нажмите на левую клавишу мыши и отбуксируйте левую границу заголовка влево. Таким же образом расширьте поле Год издания в разделе Область данных (чтобы поле располагалось под своим заголовком).
В разделе Заголовок группы «Название книги» выделите заголовок поля First_Объем. Нажмите на клавишу [F2] - заголовок станет доступным для редактирования и будет работать как поле ввода в диалоговом окне. Удалите префикс First_. Для завершения редактирования с сохранением сделанных изменений нажмите на клавишу [ENTER] (для отказа от изменений нужно было бы нажать на [ESC]). Если необходимо, измените длину заголовка, как Вы это сделали в предыдущем пункте.
Освободите в разделе Заголовок группы «Название книги» место для аннотации. Для этого можно расширить его по вертикали. Подведите курсор мыши к верхней границе разделителя Область данных. Курсор должен принять форму двойной вертикальной стрелки: . Нажмите на левую клавишу мыши и отбуксируйте верхнюю границу разделителя вниз. Теперь передвинем вниз заголовки полей. Для этого их надо выделить и отбуксировать мышью вниз, поближе к перемещенному только что разделителю. Чтобы выделить несколько заголовков (полей) одновременно, щелкните мышью по первому из них, а затем нажмите на клавишу [SHIFT] и, не отпуская ее, щелкните мышью по всем остальным (другой способ выделить несколько полей и заголовков - «резиновая нить»). Отбуксируйте мышью вниз выделенные заголовки раздела Заголовок группы «Название книги». Теперь отбуксируйте мышью поле First_Аннотация из раздела Область данных в раздел Заголовок группы «Название книги». Расположите его между полем Название книги и заголовками полей. Увеличьте размер поля по вертикали и горизонтали. Аннотация может быть достаточно объемной. Из раздела Заголовок группы «Название книги» удалите ставший теперь ненужным заголовок First_Аннотация.
4.5. Конструируем экранные формы4.5.1. Создаем автоформуДо сих пор для просмотра и редактирования данных в таблицах и запросах мы использовали стандартные окна просмотра и редактирования таблиц. Между тем, просматривать и редактировать данные можно в формах - диалоговых окнах, элементы которых связаны с полями таблиц или запросов. Окна просмотра и редактирования таблицы представляют собой частный случай формы. В формах могут иметься поля, не связанные с полями таблиц или запросов. Они бывают нужны, например, в тех случаях, когда значения полей не вводятся вручную, а вычисляются по введенным пользователем данным. Обычно формы создаются на основе таблиц или запросов примерно тем же способом, которым мы в предыдущем пункте создавали отчет. Вначале с помощью мастера форм выполняется основная работа, затем полученную форму можно отредактировать в режиме конструктора. Самый простой способ создания формы на основе таблицы или запроса - автоформа. Задание Создаем автоформу для работы с таблицей Авторы.
Рисунок 52. Автоматически созданная форма
Обратите внимание, что в нижней части окна автоматически созданной формы в особой панели отображается таблица, связанная с той таблицей, на основе которой была создана форма. Так, в нашем случае в нижней части окна формы Авторы отображается таблица Авторство, вернее только одно ее поле Название книги. Этот способ отображения данных называется подчиненной формой. Подчиненная форма имеет свою собственную конструкцию Запись для перемещения между записями таблицы. Две конструкции Запись, формы и подчиненной формы, очень похожи друг на друга; однако первая из них (именно о ней идет речь в предыдущем абзаце) находится ниже. В отличие от традиционных диалоговых окон формы, создаваемые автоматически, допускают изменения размера, максимизацию и минимизацию, а также не являются модальными, т. е. не блокируют меню и другие окна. В режиме конструктора можно создавать практически любые формы, в том числе работающие как традиционные диалоговые окна.
Введите данные в поля формы. Поле Автор является обязательным (это свойство было задано при создании таблицы Авторы). Если Вы оставите его незаполненным, при попытке перехода к другой записи будет выведено сообщение об ошибке. То же самое произойдет, если Вы введете в это поле уже имеющееся в таблице имя автора (это уникальный ключ данной таблицы). Для отказа от ввода новой записи можно нажать на клавишу [ESC].
Переключим форму в режим таблицы. Подведите курсор мыши к заголовку окна формы. Нажмите на правую клавишу мыши и выберите в динамическом меню пункт «Режим таблицы». После этого форма превратится в окно для работы с таблицей. Текущей записью в таблице будет та, которую Вы перед этим просматривали в форме. Перейдите в таблице к другой записи. Переключим форму обратно в режим формы. Подведите курсор мыши к заголовку окна формы. Нажмите на правую клавишу мыши и выберите в динамическом меню пункт «Режим формы». После этого форма примет первоначальный вид, причем в ней будет доступна запись, которую Вы только что выбрали в таблице. Для редактирования записей удобно использовать режим формы, а для поиска записей и просмотра списка - режим таблицы.
Предположим, она будет называться Авторы. Введите это имя формы и нажмите на кнопку «OK».
Чтобы вызвать форму на экран, в окне базы данных нажмите на кнопку «Формы», выделите ее в списке, после чего нажмите на кнопку «Открыть» (либо просто дважды щелкните мышью по ее значку). 4.5.2. Ленточная форма. Конструктор формПомимо режимов формы и таблицы существует еще режим ленточной формы. Познакомимся с этим режимом, а заодно с конструктором форм. Однако прежде чем приступить к созданию ленточной формы, выполните следующее задание. Задание Создайте самостоятельно автоформу Авторство на основе одноименной таблицы. Задание Работаем с конструктором форм. В диалоговом окне базы данных нажмите на кнопку «Формы». Выделите в списке созданную в предыдущем задании форму Авторство. Нажмите на кнопку «Конструктор», после чего форма будет загружена в окно конструктора форм (рис. 53). Увеличьте окно конструктора. Конструктор форм устроен примерно так же, как конструктор отчетов, с которым мы работали в предыдущем пункте. Рисунок 53. Конструкция форм
Назначьте для формы Авторство режим ленточной формы. Для этого переместите курсор мыши за пределы формы (он должен оказаться в темно-серой области окна конструктора). Нажмите на правую клавишу мыши и выберите в динамическом меню пункт «Свойства». После этого откроется окно редактирования свойств формы. На закладке «Макет» в поле со списком «Режим по умолчанию» (вторая строка сверху) выберите пункт «Ленточная форма» (рис. 54). Чтобы узнать назначение того или иного свойства, устанавливаемого в диалоговом окне свойств формы, перейдите в соответствующее поле со списком и нажмите на клавишу [F1]. После этого на экран будет выведен нужный раздел справочной системы Microsoft Access 2000. Закройте окно редактирования свойств формы. Рисунок 54. Окно редактирования свойств формы
Теперь посмотрим на результат. Выберите в меню «Вид» пункт «Режим формы». Получилось нечто среднее между таблицей и формой (рис. 55). Закройте окно формы. Рисунок 55. Ленточная форма
В ленточной форме, как в таблице, можно выделить несколько соседних записей (см. п. 3.4). Для этого нужно щелкнуть мышью в столбце слева от первой выделяемой записи, а затем, не отпуская левую клавишу мыши, переместить курсор к последней выделяемой записи. Форма, построенная на основе таблицы, по своим функциям отличается от обыкновенной таблицы незначительно. Создание более сложных форм требует определенной квалификации и, как правило, не обходится без написания программного кода на языке Visual Basic и макросов. Эти вопросы выходят за рамки данного курса. С другой стороны, многие задачи, требующие, казалось бы, создания сложных форм, можно решить, вдумчиво спроектировав базу данных и построив адекватные задачам запросы. 4.5.3. Создаем подчиненную формуОдин случай более сложной формы все же заслуживает более подробного рассмотрения. Это создание подчиненных форм. Подчиненной мы называем форму, расположенную внутри другой формы и связанную с последней по одному или нескольким полям. Выше мы уже давали краткое описание подчиненной формы, автоматически создаваемой вместе с автоформой (см. п. 4.5.1). Теперь нам предстоит освоить создание подчиненных форм «вручную» для тех форм, в которых они не создаются автоматически. Задание Создаем в форме Продажи подчиненную форму Авторство, в которой бы отображался автор (авторы) для текущей записи в главной форме. В окне базы данных Продажа книг 2.mdb дважды щелкните по значку таблицы Продажи. На экране появится таблица. Выберите в раскрывающемся списке в панели «Таблица в режиме таблицы» пункт «Автоформа», создав тем самым форму Продажи. Обратите внимание, что эта форма не содержит подчиненной формы, в отличие от формы Авторы, описанной в п. 4.5.1. Это и понятно: ведь таблица Продажи не имеет связанных таблиц. Однако мы можем создать в форме Продажи подчиненную форму, в которой, к примеру, указывается имя (имена) авторов проданной книги. Нажмите на кнопку в панели «Form View». Форма откроется в режиме конструктора (рис. 56). Рисунок 56. Форма Продажи в режиме конструктора
Если на экране нет панели инструментов «Панель элементов», вызовите ее. Для этого щелкните правой клавишей мыши поверх любой панели инструментов и выберите в динамическом меню пункт «Панель элементов». В панели инструментов «Панель элементов» нажмите на кнопку . Курсор примет форму . Щелкните мышью в окне формы; там появится заготовка для подчиненной формы. На экране появится диалоговое окно мастера подчиненных форм. Чтобы создать подчиненную форму на базе таблицы или запроса, в диалоговом окне мастера подчиненных форм установите кнопку выбора «Имеющиеся таблицы и запросы» во включенное состояние и нажмите на кнопку «Далее >». Чтобы создать подчиненную форму на базе таблицы Авторство, выберите в раскрывающемся списке «Таблицы и запросы» имя таблицы: Таблица: Авторство. Чтобы отобразить в форме поле Автор (поле Название Вам уже не нужно, поскольку название произведения уже отображено в главной таблице), выберите название этого поля в списке «Доступные поля» и нажмите на кнопку «>». Название поля переместится в список «Выбранные поля». Нажмите на кнопку «Далее >». Нажмите на кнопку «Далее >» еще раз и в последнем диалоговом окне в поле ввода введите название вновь образуемой подчиненной формы: Авторы проданных книг. Нажмите на кнопку «Готово». Нажмите на кнопку в панели «Конструктор форм», чтобы выйти из режима конструктора. Результат отображен на рис. 57. Рисунок 57. Подчиненная форма Авторы проданных книг в составе формы Продажи
Создание и применение подчиненных форм оказывается весьма полезной и удобной возможностью при работе с базами данных. Связи между данными приобретают в этом представлении выразительность и наглядность. При создании автоформы на основе таблицы, если последняя имеет связанную таблицу, подчиненная форма создается автоматически. 4.6. Передаем данные в другие приложения Microsoft Office 2000Данные из таблиц и запросов можно передавать в Microsoft Word и Microsoft Excel. Познакомимся с этими возможностями на конкретных примерах. Задание Передаем данные из запроса в документ Microsoft Word.
4.7. Импортируем данные из файлов предыдущих версий Microsoft AccessБазы данных Microsoft Access 2000 представляют собой файлы принципиально нового формата, по сравнению с базами данных, созданных в предыдущих версиях системы. Благодаря этому новому формату файлов, Microsoft Access 2000 поддерживает стандарт Unicode - широко распространенный стандарт кодировки, позволяющий программам и программным комплексам корректно работать с текстами практически на любом из языков мира. Однако именно в результате этой смены формата, при попытке загрузить данные из файла более ранней версии системы в Microsoft Access 2000 возникают дополнительные сложности. Базы данных, созданные в предыдущих версиях Microsoft Access, должны быть конвертированы в новый формат, прежде чем пользователь получает возможность редактировать, пополнять и обновлять их. Для того чтобы начать работать в Microsoft Access 2000 с данными из базы, созданной в более ранней версии системы, нажмите на кнопку в панели «База данных» или выберите в меню «Файл» пункт «Открыть». На экране появится диалоговое окно «Открыть». В раскрывающемся иерархическом списке «Папка» выберите имя папки, в которой находится база данных. Выберите имя базы данных в списке файлов и дважды щелкните мышью по его значку. На экране появится диалоговое окно «Преобразование или открытие базы данных» (рис. 58). Рисунок 58. Диалоговое окно «Преобразование или открытие базы данных»
Чтобы конвертировать базу данных в новый формат (формат Microsoft Access 2000), установите кнопку выбора «Преобразовать базу данных» во включенное состояние и нажмите на кнопку «OK». После этого база данных будет конвертирована в новый формат и на экране появится окно базы данных. Отныне Вы сможете работать со старой базой в новой версии системы, однако для старых версий Microsoft Access база будет недоступна. Это не всегда и не всякого пользователя устраивает, поэтому в Microsoft Access 2000 предусмотрена и другая возможность. Чтобы открыть базу данных только для просмотра, не конвертируя ее в новый формат, установите кнопку выбора «Открыть базу данных» во включенное состояние и нажмите на кнопку «OK». После этого на экране появится диалоговое окно-предупреждение. Нажмите в нем на кнопку «OK». На экране появится окно базы данных, однако данные в ней не будут доступны для изменения. Впоследствии, при попытке загрузить эту базу в Microsoft Access 2000 диалоговое окно «Преобразование или открытие базы данных» более не появляется на экране, а появляется сразу диалоговое окно-предупреждение. Однако это не означает, что Вы не сможете ее в дальнейшем все же конвертировать в новый формат. Для того чтобы конвертировать базу данных, созданную в одной из более ранних версий Microsoft Access, в формат Microsoft Access 2000,
4.8. Экспортируем данные в другие форматыДанные, доступные для просмотра в таблицах, запросах, отчетах и формах, можно записывать в файлы различных форматов, в том числе в HTML-файлы. Последняя возможность значительно облегчает публикацию в Internet прайс-листов, каталогов, справочников и другой информации, которая обычно нуждается в периодическом и достаточно оперативном обновлении. 4.8.1. Экспорт данных в табличные форматыЭкспорт таблиц, запросов, форм и отчетов в форматы, использующие табличное представление данных, достаточно прост и не требует сложной настройки. Чтобы экспортировать данные из таблицы, запроса, формы или отчета в один из поддерживаемых Microsoft Access 2000 табличных форматов,
Вообще, экспорт одних и тех же объектов в разные форматы может приводить к различным результатам. Так, экспорт формы в XLS-файл - это представление просматриваемых в форме данных в виде таблицы Microsoft Excel. В то же время, экспорт формы в MDB-файл - это создание в другой, уже существующей, базе данных Microsoft Access 2000 такой же формы. Отдельного рассмотрения заслуживает экспорт данных из базы Microsoft Access 2000 в текстовый файл. 4.8.2. Экспорт данных в текстовый файлЗадание Экспорт рейтинга клиентов в текстовый файл. В диалоговом окне базы данных нажмите на кнопку «Запросы». Выделите в списке запрос, данные из которого мы будем экспортировать, а именно Рейтинг клиентов. Выберите в меню «Файл» пункт «Экспорт». В диалоговом окне «Экспорт объекта:<тип объекта>'<имя объекта>' в»: Выберите в списке папку, в которую Вы намерены поместить файл, в котором, в свою очередь, будут записаны данные. В поле ввода «Имя файла» введите имя записываемого файла. В раскрывающемся списке «Тип файла» выберите формат файла: Текстовые файлы (*.txt, *.csv, *.tab, *.asc). Нажмите на кнопку «Сохранить», после чего будет открыто диалоговое окно «Экспорт текста», в котором можно задать настройки, определяющие, каким образом данные будут преобразованы в текст. Рассмотрим диалоговое окно «Экспорт текста» (рис. 59). В панели «Образец формата экспорта» показано, как будут выглядеть экспортированные данные в текстовом файле. Каждая запись таблицы преобразуется в одну строку этого файла. Значения полей могут быть разделены точками с запятой, запятыми, символами табуляции или пробелами. Сами строки могут быть заключены в кавычки, в апострофы или не иметь ограничителей. Другой вариант - использовать фиксированные поля, т.е. в строке текстового файла для каждого поля будет отведено определенное количество символов (неиспользованные позиции заполняются пробелами). Способ экспорта задается в данном диалоговом окне установкой во включенное состояние соответствующей кнопки выбора. Выберите экспорт в файл с фиксированной шириной полей. Для этого установите кнопку выбора «фиксированная ширина полей - интервалы заполняются пробелами» во включенное состояние. Рисунок 59. Выбор способа экспорта данных в текстовый формат
Нажмите на кнопку «Дополнительно». После этого откроется диалоговое окно «<имя объекта> - спецификация экспорта». В нашем случае «Рейтинг клиентов - спецификация экспорта» (рис. 60). В нем задайте следующие параметры экспорта:
В диалоговом окне «<имя объекта> - спецификация экспорта» нажмите на кнопку «OK». Рисунок 60. Параметры экспорта в текстовый файл с фиксированными полями
В следующем диалоговом окне «Экспорт текста» Вы можете в визуальном режиме установить позиции, отводимые под каждое из полей. Для этого Вы можете буксировать мышью линии, отделяющие столбцы списка друг от друга. В списке должны быть видны все экспортируемые записи; это позволяет удостовериться, что все значения уместятся в отведенных для этого полях. Установив границы полей, нажмите на кнопку «Далее >». В последнем диалоговом окне «Экспорт текста» нажмите на кнопку «Готово». После этого текстовый файл будет сформирован и записан в указанную Вами папку. На экране появится окно - сообщение о завершении экспорта. В этом окне нажмите на кнопку «OK». Откройте этот файл стандартной программой NotePad и посмотрите, что получилось (рис. 61). Теперь эти данные можно импортировать в какой-нибудь овеянный дыханием старины DOS-овский, но очень мощный статистический пакет. Рисунок 61. Результаты экспорта запроса в текстовый файл
4.8.3. Об экспорте данных Microsoft Access 2000 в формат HTMLMicrosoft Access 2000 обладает расширенными возможностями публикации данных на Web-страницах. Благодаря новому мастеру, Вы получаете возможность создавать документы в формате HTML, которые напрямую связаны с данными в базе. Эта функция является, пожалуй, одним из главных преимуществ новой версией перед старыми. К сожалению, объем настоящего пособия не позволяет подробно рассмотреть открывающиеся перед пользователем перспективы. Мы скажем лишь, что обеспечение доступа к данным Microsoft Access 2000 в формате HTML представляет собой качественно новый шаг на пути дальнейшей интеграции составных частей Microsoft Office и Internet-технологий. |
[an error occurred while processing this directive] |