Десять шагов в Microsoft Access
Автор: Белый Евгений Константинович (доцент, пенсионер)
Тип документа: Другое. Аудитория: Преподаватели и учителя информатики. Дата публикации: 18.05.2021
Описание: Учебное пособие предназначено для студентов первых курсов технических факультетов, изучающих курс «Информатика», и может быть использовано как для самостоятельного изучения Microsoft Access, так и при проведении лабораторных работ. Пособие позволяет в течение десяти академических часов, проведенных за компьютером, получить первые необходимые навыки разработки приложений Access

Федеральное агентство по образованию  
Государственное образовательное учреждение  
 высшего профессионального образования  
ПЕТРОЗАВОДСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ  
 
 
 
 
Е. К. Белый  
 
Десять шагов в Microsoft  Access  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Петрозаводск  
Издательство ПетрГ У 
2005  
 
  
2 ББК  32.97  
УДК 681.3  
Б 439  
 
Рецензенты : 
 
Н. А. Будникова , доцент кафедры Информатики и математического 
обеспечения  ПетрГУ, канд. физ. -мат. наук ; 
Н. В. Коцобан,  начальник Центра информационных технологий и т е-
лемедицины Республиканской больницы МЗ РК  
 
Печатается по решению  
редакционно -издательского совета  
Петрозаводского государственного университета  
 
 
 
Белый Е. К.  
Б 439 Десять шагов в Microsoft  Access : Учеб. пособие. – Петрозаводск : 
Изд-во ПетрГУ, 2005. – 92 с.  
ISBN  5-8021 -0505 -4 
 
Учебное пособие пр едназначено для студентов первых курсов техн и-
ческих факультетов, изучающих курс «Информатика», и может быть 
использовано  как для самостоятельного изучения Microsoft  Access , так 
и при проведении лабораторных работ . Пособие позволяет в течение 
десяти академи ческих часов, проведенных за компьютером, получить 
первые необходимые навыки разработки приложений Access . 
 
  ББК 32.97  
  УДК 681.3  
 
 
 
 
ISBN  5-8021 -0505 -4    © Белый Е. К., 2005  
© Петрозаводский государственный  
    университет, 2005  
 
  
3  
 
 
Предисловие  
 
 Резул ьтатом можно только восхищаться, а  про-
цесс можно научиться применять.  
     Эдвард де Боно  
 
 
Подготовка квалифицированного инженера предполагает формиров а-
ние навыков эффективной  работы с данными. Традиционно в курсе 
«Информатики» для технических факультет ов значительное внимание 
уделяется вопросам обработки данных, а вопросы разработки и п о-
строения баз данных отходят на задний план. В какой -то мере, учит ы-
вая специфику профессиональной деятельности инженера, это опра в-
данно.  Однако обработке данных всегда п редшествует построение 
информационной модели исследуемого процесса, разработка структ у-
ры таблиц, организация сбора и обновления данных. Таким образом, 
без должной подготовки данных до этапа обработки можно просто не 
дойти. Привить необходимые для построени я баз данных навыки, в ы-
полняя серию разрозненных заданий и упражнений по созданию о т-
дельных объектов Microsoft  Access , нереально, тем более в жестких 
временных рамках учебного процесса. Поэтому мы пошли по пути 
обучения в процессе разработки приложения. Пр и таком подходе 
свойства таблиц, запросов, форм, отчетов и других объектов Microsoft  
Access  будут раскрываться в их  взаимосвязи. Известный французский 
психолог Эдвард де Боно, слова которого взяты в качестве эпиграфа, 
считал, что нельзя научить человека т ворчески мыслить, заставляя его 
делать последовательность правильных, безукоризненно логичных 
шагов. В процессе разработки приложения мы иногда будем прин и-
мать не самые лучшие решения, наблюдать, что в результате получ и-
лось, и снова возвращаться для дорабо тки «неудачных» фрагментов 
приложения. В литературе большое внимание уделяется этапу прое к-
тирования базы данных, однако применить эти рекомендации на пра к-
тике, в полной мере, может только человек, разработавший не одну 
базу. Мы будем смотреть на процесс ра зработки приложения  Microsoft  
Access  глазами «новичка».  
 
  
4 Поскольку пособие отражает процесс разработки приложения, естес т-
венно было разбить материал на шаги, соответствующие этапам раб о-
ты. Всего таких шагов десять. Средний студент в состоянии преод о-
леть од ин шаг за академический час. Если вначале читатель практич е-
ски работает под диктовку автора, то далее с каждым шагом ему пр е-
доставляется все большая и большая самостоятельность.  
В качестве объекта для разработки базы данных мы выбрали склад. 
Почему именно  склад ? Во-первых, эта задача позволяет достаточно 
полно раскрыть возможности Microsoft  Access . Во-вторых, задача им е-
ет практическую направленность, поскольку ни одно предприятие не 
обходится без склада. На складе завода хранятся запасы сырья, кот о-
рое заку пается большими партиями, а затем в процессе производства 
распределяется по цехам, на складе хранятся запасы готовой проду к-
ции. В любом медицинском учреждении есть фармацевтический отдел, 
который обеспечивает закупку медикаментов и предметов медици н-
ского н азначения у поставщиков и распределение их по отделениям. 
Бумага, на которой подготовлено настоящее пособие, также поступила 
на кафедру с университетского склада. Во всех приведенных  выше 
примерах необходим учет прихода, расхода и наличия товаров, и все 
перечисленные примеры можно объединить одной информационной 
моделью. Приложение, которое мы собираемся разработать, предн а-
значено для работы в среде Microsoft  Access  версии  97 и выше.  
Пособие можно использовать как для самостоятельного изучения Mi-
crosoft  Access, так и при проведении лабораторных работ по курсу 
«Информатика». В последнем случае задания внутри группы студе н-
тов легко можно сделать индивидуальными, предоставив каждому 
студенту возможность выбрать свой набор хранящихся на складе тов а-
ров.  
Замечан ия и предложения вы можете направлять по адр е-
су: belyi@petrsu.ru.  
 
  
5 1. Шаг первый. Работа с таблицами и запросами  
 
1.1. Создание новой базы данных.  Для начала создайте папку. Если 
пособие используется в лабораторных работах, студент может включить 
в названи е папки номер своей зачетной книжки или фамилию. Напр и-
мер:  «Склад_0350268».  После первого запуска Microsoft  Access  в окне 
приложения появится диалоговое окно, в котором Вам будет предлож е-
но открыть одну из созданных ранее баз данных (если таковые имеются)  
либо создать н овую, пока пустую.  
Сохраните новую базу данных в только что созданной папке, присвоив 
файлу название, например,  «Петров и компания» (рис. 1). Нажмите 
кнопку «Создать» ( Create ). На экране появится окно базы данных.         
В окне базы данных  представлены основные объекты базы данных : таб-
лицы, запросы, формы и другие. Если Вы располагаете версией  Mi-
crosoft Access  97, интересующий Вас класс объектов можно выбрать, 
щелкнув левой клавишей мыши по соответствующей заставке в верхней 
части окна баз ы данных. В версиях, начиная с 2000 -й, классы объектов 
располагаются в левой части окна базы данных (рис. 2).  
  
1.2. Создание таблицы. Таблица – объект базы данных, предназначе н-
ный для хранения данных. Каждая таблица содержит информацию о 
предметах опред еленного типа. Перед созданием таблицы следует о п-
ределить набор важных для пользователя характеристик (свойств, пар а-
метров) предмета.  
Рис. 1.  Создание новой базы данных

 
  
6 Рис. 2.  Окна баз данных Access  97 и Access  2000  
 
Рис. 3.  Выбор способа создания та блицы  
 
Принятая почти во всех современных СУБД реляционная модель пре д-
полагает, что каждому предмету соответствует одна запись –    строка 
таблицы, а каждой характеристике выделено поле фиксированной дл и-
ны – столбец таблицы. Таким образом, запись также име ет фиксирова н-
ную длину, что значительно облегчает доступ к  записям таблицы.  

 
  
7 Начнем формирование базы данных с организации ввода информации о 
поставщиках. Каждому поставщику будет соответствовать запись та б-
лицы. Для реализации замысла прежде всего требуе тся создать структ у-
ру соответствующей таблицы. Выделим набор наиболее важных хара к-
теристик поставщика : название фирмы, адрес, директор, контактные т е-
лефоны и другая полезная информация… Список может оказаться д о-
вольно внушительным.  
Для создания таблицы на до войти в раздел «Таблицы» окна базы да н-
ных, нажать кнопку «Создать», в открывшемся диалоговом окне (рис. 3) 
выбрать пункт меню «Конструктор» и нажать «ОК». На экране появится 
окно «Конструктора таблиц» (рис. 4). В этом режиме формируется 
структура таблиц ы. Верхняя часть представляет собой таблицу, состо я-
щую из трех столбцов : имя поля, тип данных, описание. Имя поля об о-
значает соответствующий параметр предмета. Тип данных выбирается 
из списка : Текстовый, Поле MEMO , Числовой, Дата /время, Денежный, 
Счетчик, Логический, Поле объекта OLE , Гиперссылка, Мастер подст а-
новок. Поскольку данное пособие не претендует на роль справочника, 
типы данных мы будем рассматривать по ходу разработки структур 
таблиц. В столбце «Описание» для каждого из полей можно ввести п о-
яснит ельный текст. Итак, приступим к формированию структуры та б-
лицы.  
 Первому полю дадим имя «поставщик» и присвоим тип данных 
«Счетчик». Этот тип данных представляет собой натуральное число. В 
первой записи устанавливается значение поля 1. Далее при вводе ка ж-
дой новой записи это значение автоматически увеличивается на един и-
цу. Таким образом, при заполнении таблицы это поле заполняется авт о-
матически и естественным образом обеспечивается уникальность его 
значения. Сделаем это поле ключевым. Для этого щелкнем клави шей 
мыши по значку «ключик» на соответствующей панели инструментов 
окна приложения. Убедимся, что слева от имени поля «поставщик» по я-
вился «ключик». Объявление поля «ключевым» обеспечивает уникал ь-
ность содержимого этого поля. Поскольку поле типа «Счетчик» и так 
имеет уникальное значение, может возникнуть впечатление, что «кл ю-
чик» при нем – просто излишество. Тем не менее в дальнейшем мы уб е-
димся, что последнее действие не лишено смысла.  
 Следующему полю (рис. 4) дадим имя «название» и присвоим 
тип «Текстовый ». Это поле будет хранить название фирмы -поставщика. 
Теперь настало время обратить внимание на набор свойств поля, расп о-
ложенный внизу окна конструктора. В общем случае этот набор зависит 
 
  
8 от типа поля. Так, для типа «Текстовый» первым будет свойство «Ра з-
мер поля». По умолчанию размер обычно равен 50. Допустив, что наши 
поставщики не имеют таких длинных названий, исправим последнее 
значение на 30. Сделаем это поле обязательным, установив в соответс т-
вующей строке значение «Да». Теперь система откажется вносит ь но-
вые записи, в которых это поле не заполнено. Остальные поля обяз а-
тельными делать не будем, дабы не брать на себя заботу повсеместно 
заполнять их!  
Рис. 4.  Создание таблицы в режиме конструктора  
 
 Поле «адрес» также сделаем текстовым длины 40.  
 «Директор » пусть будет текстовым полем длины 25.  
 «Телефон» также определим как текстовое поле. Выбор длины 
оставляем на усмотрение разработчика. При этом в качестве маски вв о-
да введем соответствующей длины последовательность цифр «9». Т е-
перь на этих местах могут ст оять только цифры или пробелы. Любой 
другой символ при вводе будет отвергнут. Маска может не только обе с-
печить ввод форматированных данных, но и преобразовать, например, 

 
  
9 все вводимые символы к верхнему регистру или вставить в нужные п о-
зиции скобки и дефисы .  
 Особое место занимает поле « MEMO ». Как уже было отмечено 
выше, реляционная модель предполагает равенство в каждой записи 
длин соответствующих полей. Часто пользователь хочет оставить за с о-
бой возможность ввода дополнительной текстовой информации о пре д-
мете. Во -первых, не все можно предусмотреть на стадии разработки. 
Во-вторых, текстовая строка, которую Вы хотели бы разместить в да н-
ном поле, может иметь широкий диапазон длин. Тогда, зарезервир овав 
небольшую длину, Вы лишаете себя возможности в некоторых з аписях 
хранить весь текст. Зарезервировав же максимально возможную длину, 
Вы существенно увеличиваете объем каждой записи, а значит , и всей 
таблицы, что ведет не только к неэффективному использованию памяти, 
но и к замедлению значительной части операций на д данными таблицы. 
Поле « MEMO » решает эту задачу путем компромисса : текст овое поле 
имеет неограниченную длину, но зато хранится вне таблицы. В таблице 
хранится только ссылка на текст. Таким образом, доступ к информации, 
хранящейся в полях « MEMO », значитель но замедляется и эти поля н е-
целесообразно брать за основу сортировки или использовать в операц и-
ях типа поиска. Такие поля, как правило, служат для того, чтобы пол ь-
зователь имел возможность получить более подробную или не уклад ы-
вающуюся в структуру таблицы информацию об отдельном предмете.  
Сформировав структуру таблицы, выйдем из «Конструктора». Нажмем 
«крестик» в правом верхнем углу окна «Конструктора» и в появивше м-
ся диалоговом окне на вопрос «Сохранить изменения ?» ответим «Да».  
В окне «Сохранение» дадим  таблице имя «поставщики». Любым объе к-
там базы данных желательно присваивать имена, непосредственно ук а-
зывающие на их назначение! Теперь в разделе «Таблицы» окна базы 
данных появится имя первой таблицы (рис. 5).  
Рис. 5.  Создана таблица «Поставщики»  
 

 
  
10 В да льнейшем, если возникнет необходимость изменить структуру та б-
лицы, надо выделить ее имя  и нажать кнопку «Конструктор» в окне б а-
зы данных. Теперь можно приступить к вводу данных. При вводе поле 
«поставщик», которому мы присвоили тип «Счетчик», заполняется ав-
томатически. Для удобства ввода можно расширить изображение люб о-
го столбца на экране, установив указатель курсора на границе между 
названиями соответствующих полей, нажав левую клавишу мыши и п е-
редвинув границу вправо. Но при большой длине записи нам при дется 
постоянно пользоваться полосой прокрутки.   
Рис. 6.  Заполненная таблица «поставщики»  
 
В любом случае в таблице неудобно заполнять поля « MEMO », соде р-
жащие произвольной длины текст. Итак, у нас возникло два противор е-

 
  
11 чивых желания. С одной стороны, мы хотели бы иметь возможность 
просматривать все записи, ограничиваясь небольшим количеством на и-
более важных полей. С другой стороны, иногда желательно видеть о д-
новременно всю информацию о предмете. Разрешением этого против о-
речия мы займемся в следующем разде ле. 
 
1.3. Создание запроса.  Запрос представляет собой логическую таблицу 
и позволяет пользователю получить нужные данные из одной или н е-
скольких таблиц. Запросы можно создавать на выборку, обновление, 
удаление или добавление данных. С помощью запросов, ис пользуя и н-
формацию из одной или нескольких таблиц, можно создать новую та б-
лицу. Более подробно с запросами мы познакомимся по ходу разрабо т-
ки приложения, а пока организуем просмотр списка поставщиков. Для 
этого перейдем в раздел «Запросы» окна базы данных и нажмем «Со з-
дать».  
Рис. 7.  Окно диалога «Новый запрос»  
 
Выберем пункт меню «Простой запрос» и нажмем « OK». Появится окно 
«Создание простых запросов» (рис. 8). В поле «Таблицы /запросы» ра з-
вернем меню и выберем таблицу «поставщики» (других таблиц у нас 
пока и нет!).   Внизу окна слева размещается список всех полей указа н-
ной таблицы, а справа список отобранных полей. Стрелки между сп и-
сками означают : 
> Перенести поле в список отобранных полей  
>> Перенести все поля в список отобранных полей  

 
  
12 < Исключить одно  поле из списка отобранных полей  
<< Исключить все поля из списка отобранных полей  
Рис. 8.  Отбор полей для запроса  
 
Мы отберем для запроса поля : поставщик, название, директор и тел е-
фон. Нажимаем «Дальше». В следующем окне предлагается дать имя 
запросу. Оставим предложенное системой имя «поставщики Запрос» и 
нажмем «Готово». На экране появится таблица (рис. 9). Эта таблица с о-
держит выбранные нами поля таблицы «поставщики».  
Рис. 9.  Результат выполнения запроса  

 
  
13 Закроем таблицу и на вопрос «Сохранить измен ения ?» ответим «Да». 
Теперь в разделе «Запросы» окна базы данных появился первый объект 
– запрос «поставщики Запрос».  Откроем созданный запрос в режиме 
конструктора. Для этого выделим запрос и нажмем «Конструктор». На 
экране появится окно «Конструктора зап росов» (рис. 10).  
Рис. 10.  Окно конструктора запросов  
 
Следует заметить, что в режим конструктора мы могли бы перейти ср а-
зу, не закрывая запрос. Для этого достаточно нажать на изображение 
«зеленого угольника» в левом верхнем углу окна приложения.  
Как видн о из рисунка, в верхней части окна конструктора расположены 
таблицы (в данном случае одна таблица), которые послужили источн и-
ком данных для запроса. В нижней части – таблица, столбцы которой 
представляют поля запроса, а в строках указываются характеристики  
полей.  
 Поле.  В этой строке задаются имена полей, которые должны п о-
пасть в запрос или используются только для задания условий отбора и 
сортировки данных из таблицы.  
 Имя таблицы. Указывается имя таблицы, из которой выбрано поле.  
 Сортировка. В этой строке  для любого поля можно развернуть м е-
ню и выбрать способ сортировки (по возрастанию или по убыванию) 
либо отказаться от сортировки.  

 
  
14  Вывод на экран. В этой строке помечены «галочкой» поля, которые 
должны выводиться на экран. Щелчком левой клавиши мышки можно  
изменить соответствующую характеристику поля.  
 Условие отбора. Здесь задаются условия отбора записей из табл и-
цы. Более подробно этот вопрос мы рассмотрим в процессе разработки 
приложения.  
Припишем полю «название» в строке «Сортировка» характеристику «по 
возрастанию».  
При формировании структуры таблицы мы обратили внимание на то, 
что поля могут обладать рядом свойств (рис. 4). Поля, представленные в 
запросе, наследуют свойства соответствующих полей таблицы. Если 
возникнет необходимость изменить некоторые из них, Вы можете 
щелкнуть правой клавишей мыши на интересующем Вас поле и в ра з-
вернувшемся меню выбрать пункт «Свойства». Появится диалоговое 
окно, в котором Вы можете изменить ряд свойств поля.  
Итак, мы создали запрос в режиме диалога, а затем в режиме кон стру к-
тора внесли в него необходимые изменения. В большинстве случаев т а-
кой подход наиболее целесообразен, хотя запрос можно строить и изн а-
чально в режиме конструктора.  
Теперь выйдем из конструктора, сохранив изменения, и откроем запрос 
«поставщики Запрос».  Вы можете убедиться, что данные представлены 
в алфавитном порядке (по названиям поставщиков). Таким образом, о д-
но из наших пожеланий удалось выполнить. А именно, мы получили 
возможность, пользуясь полосами прокрутки, быстро найти нужного 
поставщика и наиб олее важную информацию о нем.  
 
 
 
2. Шаг второй. Формы и элементы управления  
 
В предыдущем разделе мы заметили, что ввод, редактирование и пр о-
смотр данных непосредственно в таблицах и запросах не всегда прия т-
ное занятие. Кроме того, на предприятии с одной б азой данных могут 
работать разные категории удаленных пользователей, у которых разные 
интересы и разные права доступа. Это также одна из причин примен е-
ния форм – основного средства организации интерфейса между польз о-
вателем и базой данных. Форма – объект Microsoft  Access , предназн а-
ченный для ввода и просмотра данных, а также для управления работой 
приложения.  
 
  
15  
2.1. Создание формы с полями, расположенными в столбец . Теперь 
пришло время осуществить второе желание – предоставить пользоват е-
лю возможность просм отра одновременно всех полей, относящихся к 
конкретному поставщику. Для этого перейдем в раздел «Формы» окна 
базы данных и нажмем «Создать».  
Рис. 11.  Создание автоформы «в столбец»  
 
На экране появится диалоговое окно «Новая форма» (рис. 11). Выберем 
«авто форму в столбец», в нижней части окна развернем меню и в кач е-
стве источника данных для формы назначим таблицу «поставщики». 
Теперь для создания формы достаточно нажать « OK». На рис. 12 пре д-
ставлена первая созданная нами форма «в столбец». Справа от названи й 
полей расположены сами поля ввода /вывода. В этих полях Вы можете 
просматривать и редактировать данные о конкретном производителе. 
Полю «дополнительно» мы приписали тип « MEMO », и, таким образом, 
это поле может хранить текстовую строку произвольной длины. При 
вводе данных в этом поле справа появляется полоса прокрутки. Часть 
формы, в которой расположены поля ввода /вывода, называется обл а-
стью данных. В правом верхнем углу находятся кнопки оконного меню, 
которые в комментариях не нуждаются. В левой части окна  формы Вы 
видите помеченную стрелкой область выделения. Если по этой области 

 
  
16 щелкнуть левой клавишей мыши (область окрасится в черный цвет) и 
нажать на клавиатуре компьютера клавишу « Delete », текущая запись 
будет удалена. Внизу формы расположено поле номер а записи (рис. 13).  
Рис. 1 2.  Форма «в столбец»  
 
Пользуясь элементами управления этого поля, Вы можете перемещаться 
по записям, а также вводить новые записи. Закроем форму и на вопрос 
«Сохранить изменения ?» ответим «Да». В диалоговом окне «Сохран е-
ние» за дадим имя формы «поставщики_столбец». Теперь в разделе 
«Формы» окна базы данных появился первый объект.  
Рис. 13.  Поле номера записи  
 

 
  
17 Созданная в автоматическом режиме форма не всегда удовлетворяет 
нашим требованиям. Так, в представленной на рис. 12 форме  не полн о-
стью умещается название поставщика. Для корректировки формы о т-
кроем ее в режиме конструктора. Это делается точно так же, как для 
таблиц и запросов. В результате на экране появится окно конструктора 
форм (рис. 14).  
Рис. 14.  Форма в режиме констру ктора  
 
Объект базы данных «Форма» сам является контейнером для объектов, 
которые принято называть «элементы управления». Все поля вв о-
да/вывода и надписи, которые мы видели на рис. 12 , являются элеме н-
тами управления (в дальнейшем мы познакомимся с рядом дру гих). Для 
простейших манипуляций с любым из представленных на рис. 14 эл е-
ментов управления прежде всего надо выделить нужный элемент. Т е-
перь, если Вы нажмете на клавиатуре компьютера клавишу « Delete », 
элемент управления будет удален. Если Вы установите ука затель курс о-
ра в левый верхний угол элемента, курсор примет форму «указыва ю-
щей» руки. Тогда, нажав (и не отпуская) левую клавишу мыши, Вы м о-
жете переместить элемент управления. Установив указатель на одном из 
черных прямоугольников, расположенных по углам или на сторонах 

 
  
18 прямоугольника, ограничивающего выделенный элемент управления 
(курсор тогда примет форму ), и нажав левую клавишу мыши, Вы 
можете соответствующим движением руки изменить размер элемента 
управления. Наконец, нажав левой клавишей на невыдел енный элемент 
управления (появляется ладонь ), Вы, не отпуская клавиши, можете п е-
реместить элемент управления.  
Если пользователь работает с созданной Вами формой часто, с некот о-
рого момента, возможно, его начнет раздражать необходимость каждый 
раз при выход е нажимать на маленький крестик. В таком случае можно 
предусмотреть кнопку выхода. Кнопку следует взять с «Панели элеме н-
тов» (рис. 15).  Но, прежде, поясним назначение представленных на п а-
нели объектов.  
 Выбор объектов (по умолчанию кнопка этого инструмента  нажа-
та) – инструмент используется для выделения, изменения размеров, п е-
ремещения и редактирования элементов управления.  
 Кнопка «Мастера» активизирует «Мастера по созданию элеме н-
тов управления». Эту кнопку мы всегда будем держать в состоянии, 
изображенном на рис. 15.  
 Надпись – инструмент, предназначенный для создания элемента 
управления, содержащего постоянный текст.  
 Поле – инструмент для создания элемента управления, предн а-
значенного для отображения, редактирования и ввода текстов, чисел, 
даты, времени и вычисляемых полей.  
 Группа переключателей – инструмент для создания группы пер е-
ключателей. Когда переключатели объединены в группу, каждому пер е-
ключателю соответствует отдельное числовое значение. Одновременно 
всегда установлен лишь один переключатель. Числ енное значение, пр и-
писанное установленному переключателю, является значением всей 
группы.  
 Выключить – инструмент, создающий элемент управления «В ы-
ключатель», принимающий одно из двух значений Вкл /Выкл, Ист и-
на/Ложь или Да /Нет. Вкл, Истина и Да представляютс я значением « –1». 
Выкл, Ложь и Нет представляются значением «0».  
 Переключатель – инструмент, создающий элемент управления 
«Переключатель», иногда называемый также радиокнопкой и прин и-
мающий одно из двух значений Вкл /Выкл, Истина /Ложь или Да /Нет. 
Вкл, Истин а и Да представляются значением « –1». Выкл, Ложь и Нет 
представляются значением «0».  
 
  
19  Флажок – создает одноименный элемент управления, прин и-
мающий одно из двух значений Вкл /Выкл, Истина /Ложь или Да /Нет. 
Вкл, Истина и Да представляются значением « –1». Выкл, Ложь и Нет 
представляются значением «0».  
 
Рис. 15.  Панель элементов  

 
  
20  Поле со списком – создает элемент управления, который задает 
поле и список. Значение поля выбирается из списка.  
 Список – создает элемент управления, содержащий перечень 
возможных значени й. Список всегда раскрыт, а выделенное значение 
присваивается элементу управления.  
 Кнопка – создает командную кнопку, запускающую макрос или 
процедуру встроенного в Microsoft  Access  языка Visual  Basic  for Appl i-
cations  (VBA ). 
 Рисунок – позволяет поместить в форму статический рисунок.  
 Свободная рамка объекта – используется для включения в форму 
объекта из приложения, поддерживающего OLE  (Object  Linking  and 
Embedding ). Технология OLE  позволяет устанавливать связь с объект а-
ми другого приложения или внедрять не которые объекты в базу данных 
Access . 
 Присоединенная рамка используется для включения в форму 
объекта OLE , хранящегося в таблице Access . 
 Разрыв страницы используют для создания многостраничной 
формы.  
 Набор вкладок – инструмент, позволяющий создать в форме не-
сколько вкладок, в которых можно разместить различные элементы 
управления.  
 Подчиненная форма используется для внедрения в текущую 
форму некоторой другой формы.  
 Линия – инструмент, позволяющий включать в форму прямые 
линии.  
 Прямоугольник – инструмент для создания в форме прямоугол ь-
ников. Например, в прямоугольник можно заключить набор  близких по 
содержанию полей.  
 Дополнительные элементы – кнопка, открывающая список уст а-
новленных в системе дополнительных элементов управления. Однако 
не все эти элементы мог ут работать в Access . 
Итак, приступим к созданию кнопки. Для этого щелкнем левой клав и-
шей мыши по элементу «Кнопка», а затем щелкнем той же клавишей в 
примечании формы (ниже заголовка «Примечание формы»). Появится 
диалоговое окно (рис. 16).  
 
 
 
  
21 Рис. 16.  Вы бор назначения кнопки  
 
Рис. 17.  Выбор оформления кнопки  
 

 
  
22 В разделе «Категории» диалогового окна выберем пункт меню «Работа 
с формой», а в разделе «Действия» – «Закрытие формы». Теперь н а-
жмем  «Далее». Появится диалоговое окно (рис. 17). В новом диалог о-
вом окне задается оформление кнопки. Если выбрать переключатель 
«текст» и в поле, расположенном справа от переключателя, ввести 
текст, этот текст будет расположен непосредственно на кнопке. Мы о с-
тавим значение переключателя «рисунок». В левой части окна изоб ра-
жен рисунок, который будет находиться на кнопке. Если Вы хотите в ы-
брать другой рисунок, то должны установить «флажок», расположе н-
ный возле надписи «Показать все рисунки». Тогда в поле «рисунок» 
развернется список имеющихся в нашем распоряжении стандартны х 
рисунков, и Вы можете выбрать тот, который Вас больше устраивает.   
В данном случае предложенный рисунок нас вполне устраивает и мы 
сразу нажмем «Далее». На экране появится последнее диалоговое окно, 
в котором следует задать имя элемента управления. Имя,  предлагаемое 
системой, нам ничего не говорит. По ряду причин полезно давать об ъ-
ектам содержательные имена. В дальнейшем мы еще коснемся этого в о-
проса. Итак, дадим кнопке имя «Выход» и нажмем «Готово».  
На этом работу в режиме конструктора закончим, закрое м форму и, как 
прежде, подтвердим желание сохранить изменения. Откроем форму в 
рабочем режиме и убедимся, что при нажатии на кнопку «с дверью»  
форма действительно закрывается.  
Созданная форма удобна для просмотра, ввода и редактирования и н-
формации, относя щейся к конкретному поставщику. Однако при бол ь-
шом количестве записей найти нужного производителя в такой форме 
не легко. Прежде чем приступить к разрешению противоречия между 
эффективностью поиска и удобством просмотра, мы должны создать 
еще одну форму.  
 
2.2. Создание ленточной формы.   В разделе «Формы» окна базы да н-
ных нажмем кнопку «Создать». На экране появится диалоговое окно 
«Новая форма» (рис. 19). Выберем в меню ленточную форму. Затем в 
нижней части окна развернем меню, выберем источник данных для 
формы – запрос «поставщики Запрос» и нажмем « OK». На экране по я-
вится форма (рис. 20). Закроем форму и подтвердим желание сохранить 
ее. В диалоговом окне «Сохранение» зададим имя формы «поставщ и-
ки_лента».  
 
  
23 Рис. 18.  Окончательный вид формы  
Рис. 19.  Создание  ленточной формы  
 
Теперь в окне базы данных выделим объект «поставщики_лента» и н а-
жмем кнопку «Конструктор». Ленточная форма открыта в режиме ко н-

 
  
24 структора (рис. 21). Если есть необходимость, расширим рамку формы. 
Для этого установим указатель курсора на ра мку (курсор при мет вид 
) и, не отрывая руки от клавиши, переместим рамку. Затем, таким 
же образом, увеличим ширину фо рмы.  
Рис. 20.  Ленточная форма  
Рис. 21.  Ленточная форма в режиме конструктора  
 
Теперь рассмотрим окно конструктора формы. Окно разбито  на три о б-
ласти: заголовок формы, область данных (рис. 21) и примечание фо рмы. 
Перетащим вправо поле «телефон» и его заголовок, а затем расш ирим 
поле «директор» так, чтобы текст полностью умещался в данном поле. 
При необходимости увеличим размер поля «пост авщик». Наконец, так 
же, как и в предыдущем разделе, создадим кнопку выхода. Очеви дно, ее 
надо поместить в примечание формы. Закроем конструктор, по дтвердив 
сохранение. Итак, мы создали две формы. Первая удобна для просмотра 
отдельной записи, но неудобна д ля поиска записи. Вторая, наоборот, 

 
  
25 удобна для поиска записи, но не дает возможность просмотреть всю 
информацию о поставщике.  
 
 
3. Шаг третий. Свойства форм  
 
3.1. Установка связи между формами.  Следующая наша задача – свя-
зать две ранее созданные  нами фор мы. Для этого откроем форму «п о-
ставщики_лента» в режиме конструктора, возьмем с панели элеме нтов 
кнопку и поместим ее в примечание формы. В открывшемся диал оговом 
окне «Создание кнопок» выберем категорию «Работа с формой» и де й-
ствие «Открытие формы» (рис. 22). 
Рис. 22. Открытие формы  
 
Нажмем «Далее», в списке выберем форму «поставщики_столбец» (рис. 
23) и опять нажмем «Далее».  
Рис. 23. Выбор формы  
Рис. 24. Выбор способа открытия формы  
 

 
  
26 Нас интересует только конкретная, выбранная в форме «поставщ и-
ки_лента » запись, поэтому установим переключатель «Открыть форму 
для отобранных записей» (рис. 24) и нажмем «Далее».  
Рис. 25. Установка соответствия между полями форм  
 
В диалоговом окне (рис. 25) Вы видите два списка полей : «поставщ и-
ки_лента» (слева) и «поставщик и_столбец» (справа). Выделим в обоих 
списках поле «поставщик». Мы знаем, что это поле  содержит уникал ь-
ный код поставщика, и поэтому целесообразно именно его использовать 
для создания связи между таблицами. Нажмем  кнопку , распол о-
женную между списками п олей. Ниже заголовка «Соответствующие п о-
ля» появится текст «поставщик  поставщик». Теперь, при наж атии 
на создаваемую нами кнопку, должна открываться форма «поставщ и-
ки_столбец» с одной лишь записью, соответствующей выбранному п о-
ставщику. Нажмем «Далее», оставим переключатель в положении «Р и-
сунок», но будем считать, что на этот раз предложенный системой р и-
сунок нас не устраивает. Поэтому установим «флажок» в поле «Пок а-
зать все рисунки». В поле «рисунок» появится список названий ста н-
дартных рисунков. При дв ижении по списку в поле с заголовком «Обр а-
зец» будет появляться сам рисунок. Выберем «Бинокль 1» (рис. 26) и 
нажмем кнопку «Далее». В поле под заголовком «Задайте имя кнопки» 
(рис. 27) зададим имя «вход». Мы сейчас не претендуем на самый  удач-
ный выбор имен . Главное, чтобы имя говорило разработчику о назнач е-

 
  
27 нии объекта и, иногда, желательно, чтобы имя не было сли шком 
длин ным.  
Рис. 26. Выбор рисунка  
Рис. 27. Имя кнопки  
 
Нажмем «Готово».  После закрытия диалогового окна мы обнаружим в 
конструкторе ленточной  формы новую кнопку. Переместим ее в прим е-
чании формы в место, которое нам представляется наиболее удачным, и 
выйдем из режима конструктора, подтвердив сохранение изм енений.  
Рис. 28. Новая кнопка  
 
Откроем форму «поставщики_лента». В нижней части формы Вы уви-
дите кнопку с изображением бинокля. Теперь, чтобы получить подро б-
ную информацию о поставщике, Вам достаточно, пользуясь полосами 
прокрутки, выбрать нужного поставщика и нажать «Бинокль».  

 
  
28 Рис. 29. Получение подробной информации о поставщике  
 
3.2. Ввод и удаление записей. Теперь, когда мы разработали просте й-
шую систему для поиска и просмотра записей о поставщиках, настало 
время определиться, в какой из форм будет производиться ввод и уд а-
ление записей. Очевидно, эти действия, дабы избежать противоречивых 
ситуаций, должны производиться в ленточной форме! Почему ? Предл а-
гаем читателю подумать над этим. Откроем ленточную форму. Для вв о-
да новой записи достаточно в поле номера записи нажать значок «Новая 
запись» (рис. 13). Тогда в положении «текущая» окажется пу стая запись 
(рис. 30). Этого же эффекта можно добиться, опустив вниз до конца п о-
лосу прокрутки. Для ввода записи необходимо заполнить об язательное 
поле «название», так как поле «поставщик» заполняется а втоматически, 
а остальные поля – необязательные. Если записей сли шком много и Вам 
не хочется каждый раз пользоваться полосой прокрутки, то можно со з-
дать еще одну кнопку – «Добавление записи».  

 
  
29 Рис. 30. Пустая запись  
 
 Для этого в режиме конструктора возьмем с панели элементов кнопку, 
поместим ее в примечани е формы и в открывшемся диалоговом окне 
выберем категорию «Обработка записей» и действие «Добавление зап и-
си» (рис. 31).  
Рис. 31. Создание кнопки «Добавление записи»  
 
Нажмем «Далее» и посмотрим предлагаемый системой рисунок. Пусть 
вид этого рисунка нас «уст раивает» и мы еще раз нажмем «Далее», д а-
дим кнопке имя «добавить», нажмем «Готово» и выйдем из режима 
конструктора. Откроем ленточную форму и для проверки введем новую 
запись.  
Внимание!  При вводе новой записи в области выделения (слева от з а-
писи) появляет ся изображение карандаша. Пока высвечивается изобр а-
жение карандаша, запись фактически не является сохраненной в табл и-
це и «биноклем» пользоваться мы не можем. Сохранить текущую з а-
пись можно, например, выделив другую запись. Однако лучше в р ежиме 
конструкто ра создать еще одну кнопку. В соответствующем диалоге 
выберем категорию «Обработка записей» и действие «Сохранение зап и-
си». Дадим кнопке имя «сохранить». Теперь после ввода, по крайней 
мере, поля «название» и нажатия кнопки «сохранить» мы можем нажать 
«бин окль» и внести более подробную информацию.   
Примечание формы содержит уже четыре кнопки. На случай, если пол ь-
зователь забудет их назначение, мы можем в режиме конструктора д о-
бавить к ним надписи. Для этого возьмем соответствующий объект с 
«Панели элементо в» (рис. 15). На рис. 32 представлен окончательный 
вид ленточной формы. Поставщик с кодом 27 только что введен нами 
для проверки работы приложения.  
 

 
  
30 Рис. 32.  Окончательный вид ленточной формы  
 
Для удаления записи нужно щелкнуть левой клавишей по полосе выде-
ления слева от соответствующей записи. Полоса окрасится в черный 
цвет. Теперь для удаления записи достаточно нажать клавишу « Delete ». 
На рис. 33 после нажатия этой клавиши будет удалена запись, соотве т-
ствующая поставщику с кодом 27 (название – «проверо чка»).  
Рис. 33.  Поставщик «проверочка» подготовлен для удаления  
 
3.3. Свойства формы. Каждый объект Microsoft  Access  обладает нек о-
торым набором свойств, определяющих форму, параметры этого объе к-
та, а также его реакцию на события, которые могут с этим объе ктом 
происходить. Свойства, приписанные объекту при его создании, не вс е-
гда устраивают нас. Так, если мы в ленточной форме нажмем на «б и-
нокль», то на фоне ленточной формы появится форма «в столбец». Т е-
перь, допустим, мы случайно щелкнули левой клавишей мыш и за пр е-
делами формы «в столбец» по ленточной форме. Тогда на первый план 
выйдет ленточная форма, закрыв собой форму, интересующую нас. К о-
нечно, это не катастрофа и мы можем просто сдвинуть на экране ле н-
точную форму. Однако есть и другие проблемы. Так, мож но закрыть 
ленточную форму до закрытия формы «в столбец». В данном случае и 
это не страшно. Но, иногда, имеет принципиальное значение такой п о-
рядок, при котором первой должна закрываться только форма, о ткрытая 

 
  
31 последней. Установить такой порядок можно, изм енив значение 
соответствующего свойства, сделав окно «модальным».  
Рис. 34.  Левый верхний  угол окна формы  
Рис. 35.  Окно свойств  
 
Для просмотра и изменения свойств формы достаточно дважды щел к-
нуть левой клавишей по квадратику, расположенному в левом верх нем 
углу окна формы слева от линейки (рис. 35). Этот квадратик устанавл и-
вается или убирается вместе с линейкой командой меню окна прилож е-
ния « Вид  Линейка ». Окно свойств имеет пять заставок : Макет, 
Данные, События, Другие, Все . Каждая заставка представляе т собой 
список, в левой части которого указано свойство (то есть название сво й-
ства), а в правой – значение свойства. При щелчке левой клавиши мыши 
в соответствующей строке списка  иногда появляется направленная вниз 
стрелка – предложение развернуть меню. В  таком случае значение сво й-
ства выбирается из меню. Изменим значения ряда свойств.  Для этого 
выберем заставку «Макет» и установим следу ющие свойства.  

 
  
32 Свойство  Установленное 
значение  Комментарий  
Подпись  Информация о 
поста вщике  Эта подпись всегда располож ена 
вверху формы  
Допустимые р е-
жимы  Форма  Теперь нельзя в процессе работы 
перейти в режим таблицы  
Полосы  
прокрутки  Отсутс твуют  
 В рассматриваемой форме мы 
работаем только с одной зап и-
сью. Кроме того, мы договор и-
лись в этой форме не удалять и 
не добавлять записей  Область  
выделения   
Нет 
Поле  номера з а-
писи  
Кнопка  
оконн ого меню  Нет В рабочем режиме мы не будем 
менять размеры окна или свор а-
чивать окно  Кнопки  
разм еров окна  Отсутс твуют  
Теперь перейдем к заставке «Данные». В первой строке установлен и с-
точник данных – таблица «поставщики». Установим значения «Нет» для 
свойств «Разрешить удаление» и «Разрешить добавление». Пропу стим 
заставку «События» и сразу перейдем к заставке «Другие».   
Рис. 36.  Окно поставщика после изменения значений свойств  

 
  
33  
Свойс тву «Модальное окно» присвоим значение «Да», чтобы форма не  
перекрывалась другими окнами.  Закроем окно свойств и покинем р е-
жим конструктора. Форма «поставщики_столбец» теперь будет иметь 
вид, представленный на рис. 36 (сравните с рис. 12).   В этой форме     
Вы не можете перемещаться по записям, удалять или вводить новые з а-
писи!  
 
3.4. Последний штрих.  При работе с ленточной формой для получения 
или ввода более подробной информации о поставщике мы сначала уст а-
навливаем запись, как текущую, щелкнув в соотве тствующей строке л е-
вой клавишей мышки, а уже затем нажимаем «бинокль» внизу формы. 
Эту операцию можно упростить.  Откроем ленточную форму в режиме 
конструктора и дважды щелкнем левой клавишей мышки по кнопке с 
изображением бинокля. Откроется окно свойств эл емента управления 
(рис. 37).  
Рис. 37.  Окно свойств элемента управления  
 

 
  
34 Обратите внимание на присвоенную окну подпись «Кнопка : вход». 
Здесь указан класс, к которому принадлежит элемент управления – 
«Кнопка», и заданное нами в диалоговом окне при создании  кнопки имя 
представителя класса – «вход». Выберем заставку «События». С любым 
элементом управления могут происходить некоторые события. Набор 
событий в общем случае зависит от класса, к которому принадлежит 
объект, и каждому событию можно предписать опред еленные действия. 
Набор событий, которые могут происходить с кнопкой, представлен на 
рис. 37. Подробное истолкование этих событий можно найти в любом 
справочнике по Microsoft  Access . Нас сейчас интересует событие «Н а-
жатие кнопки». Этому событию, как видно из рисунка, соответствует 
«Процедура обработки событий». Дело в том, что когда, при создании 
кнопки, мы в диалоговом окне задавали параметры элемента управл е-
ния и, в частности, связанные с этой кнопкой действия, система сама 
написала за нас процедуру (то е сть небольшую программу) на встрое н-
ном языке Visual  Basic  for Applications  (VBA ). 
Чтобы увидеть текст этой процедуры, надо щелкнуть клавишей мышки 
по соответствующей строке. В конце строки появится маленькая кнопка 
с троеточием.  После нажатия на эту кнопк у откроется «Окно модуля» 
(рис. 38).  В этом окне расположены тексты процедур на VBA , но не 
всех, а только обслуживающих данную форму. В таких случаях говорят 
о модуле формы.  
Обратите внимание! В верхней части «Окна модуля» слева расположено 
название элемен та управления (вход), а справа – название события 
(Click ). Событие Click  как раз и есть нажатие кнопки. Пользуясь пол о-
сой прокрутки, просмотрим содержимое окна.  
В самом верху Вы увидите две инструкции : 
 Option  Compare  Database  – задает сравнение строк на ос нове п о-
рядка сортировки, определяемого национальной настройкой базы да н-
ных, в которой производится сравнение строк.  
 Option  Explicit  – налагает на уровне модуля требование на явное 
описание всех переменных этого модуля.  
Дальше следуют тексты четырех процеду р, соответствующих четырем 
созданным нами кнопкам : Private  Sub выход_ Click (), Private  Sub 
вход_ Click (), Private  Sub добавить_ Click (), Private  Sub сохр а-
нить_ Click (). Каждая процедура начинается с одного из приведенных 
выше заголовков и заканчивается операто ром End Sub. Все, что расп о-
ложено между заголовком и End Sub, является телом процедуры, с о-
 
  
35 держащим собственно ее код, то есть последовательность операторов 
языка.  
Рис. 38.  Окно модуля формы  
 
Первое ключевое слово в заголовке – Private  означает, что данна я про-
цедура может быть вызвана только из  «своей» формы. Далее следует 
имя процедуры. Имя состоит из двух частей : имени элемента управл е-
ния (или другого объекта), с которым связана процедура, и события, к о-
торое обрабатывается этой процедурой (в данном случ ае Click ). Вот п о-
чему мы дали кнопкам содержательные имена! По имени процедуры мы 
сразу можем сказать, нажатие какой из четырех кнопок она обслужив а-
ет. 
Приняв к сведению рассмотренный выше материал,  закроем окно м о-
дуля, а затем и окно свойств. Таким образ ом, мы вернемся в ленточную 

 
  
36 форму, находящуюся в режиме конструктора. Двойным щелчком откр о-
ем окно свойств элемента управления «название» в области данных. 
Появится окно свойств, озаглавленное «Поле : название». Если Вы по 
ошибке щелкнете по надписи «назван ие» в заголовке формы, то откр о-
ется окно «Надпись : название Надпись». Выберем заставку «События» 
и щелкнем левой клавишей на строке, соответствующей событию 
«Двойное нажатие кнопки». Мы хотим двойному щелчку по названию 
поставщика поставить в соответствие процедуру, открывающую форму 
с подробной информацией о данном поставщике. Щелкнем по троет о-
чию, как мы поступили выше, когда открывали окно модуля формы. 
Поскольку событию еще не поставлен в соответствие метод его обр а-
ботки, откроется диалоговое окно «Пост роитель» (рис. 39). В этом окне 
мы выберем строку «Программы» и нажмем «ОК». Откроется окно м о-
дуля. В этом окне мы увидим процедуру с пустым телом : 
Private Sub название _DblClick(Cancel As Integer)  
End Sub 
Обратите внимание, что имя процедуры – название_ DblClick  опять с о-
стоит из двух частей : имени элемента управления («название») и соб ы-
тия ( DblClick , то есть двойной щелчок ). Между заголовком и End  Sub 
мы должны внести код процедуры, обрабатывающей данное соб ытие. 
Почему мы выбрали двойное нажатие, а не один арное ? Если в качестве 
события выбрать одинарное нажатие, форма «поставщики_столбец» б у-
дет открываться при каждой попытке установить указатель курсора в 
поле «название» ленточной формы. Теперь дело только за кодом проц е-
дуры. Но этот код за нас один раз уже  написала система и он находится 
в теле процедуры вход_ Click (). 
 
Рис. 39.  Диалоговое окно «Построитель»  
 

 
  
37 Было бы неразумно писать этот код еще раз. Мы просто вставим в тело 
процедуры название_ DblClick  вызов процедуры вход_ Click (), то есть  
оператор  «Call вход_ Click ()». Новая процедура примет вид : 
Private  Sub название_ DblClick (Cancel  As Integer ) 
    Call вход_ Click  
End Sub 
Закроем последовательно окно модуля формы, окно свойств и окно ко н-
структора формы.   
 
 
 
4. Шаг четвертый, или первый самостоятельный  
 
Теперь Вы должны самостоятельно разработать аналогичные объекты 
для просмотра, ввода и редактирования данных о потребителях проду к-
ции, а также по номенклатуре товаров. Возможно, повторение – не са-
мое интересное занятие, но, во -первых, это неизбежный шаг в п роце ссе 
разработки приложения, во -вторых, Вам предоставляется возмо жность 
убедиться, насколько хорошо Вы усвоили весь пройденный мат ериал, и, 
в-третьих, приобретенные навыки нуждаются в закрепл ении. 
 
4.1. Таблица «потребители».  Прежде всего, войдем в разд ел «Табл и-
цы» и создадим в режиме конструктора новую таблицу, которой пр и-
своим имя «потребители». Структура таблицы представлена на рис. 40.  
Рис. 40. Создание таблицы «потребители» в режиме конструктора  
 
Обратите внимание!  
 Поле «потребитель» содержит код потребителя. Этому полю сл е-
дует присвоить тип «Счетчик» и сделать его ключевым.  

 
  
38  Целесообразно поле «название» сделать обязательным, а остал ь-
ные поля оставить как необязательные.  
Рис. 41. Таблица «потребители»  
 
Итак, склад обслуживает сеть торговых точек. Заполним форму, как 
подскажет фантазия (рис. 41). При вводе названий потребителей будем 
придерживаться того же принципа, что и при вводе названий поставщ и-
ков: первые буквы в названии должны нести максимум информации! 
Поэтому слова магазин, ларек, универмаг  и так далее мы пишем в конце 
названия. По этой же причине мы не ставим названия в кавычки.  
 
4.2. Запрос «потребители_Запрос».  Перейдем в раздел «Запросы» окна 
базы данных и, нажав «Создать», в режиме диалога создадим запрос, 
которому дадим имя «потребите ли_Запрос». В режиме конструктора 
(рис. 42) упорядочим данные по возрастанию (в алфавитном порядке) 
названий потребителей.  
 
4.3. Формы для потребителей.  Теперь создадим еще одну ленточную 
форму и форму «в столбец» так же, как мы это делали раньше (Шаг 
втор ой). Источником данных для первой будет запрос «потребит е-
ли_Запрос», а для второй – таблица «потребители». Когда мы создавали 
эти формы для поставщиков, мы неоднократно открывали каждую из 
них в режиме конструктора. Мы оценивали эти формы в работе, нах о-
дили недостатки, а потом старались усовершенствовать объекты.  Для 
первых шагов такой подход оправдан, так как если бы мы сразу выпо л-
нили задачу наилучшим образом, мы не смогли бы понять смысл всех 
проделанных манипуляций. Теперь Вы можете справиться с задани ем 

 
  
39 гораздо быстрей, открыв каждую форму в режиме конструктора только 
раз и внеся в нее сразу все необходимые корректировки (на самом деле 
нормальный человек иногда делает ошибки, для исправления которых 
придется возвращаться в режим конструктора).  
Рис. 42 . Запрос в режиме конструктора  
 
Надо заметить, что система работы с данными о поставщиках была о р-
ганизована не наилучшим образом.  При желании Вы что -то можете 
сделать лучше. Но все же, пока, постараемся создать для потребителей 
такие же формы, какие мы с оздали для поставщиков. И, наконец, между 
формами следует установить связь (вспомним Шаг третий).  Таким обр а-
зом, в разделе форм в окне базы данных будут представлены четыре 
формы (рис. 43).  
Рис. 43. Раздел формы окна базы данных  

 
  
40  
4.4. Данные о товарах.    Теперь  Вам придется самостоятельно создать 
в режиме конструктора еще одну таблицу, которой мы дадим имя «т о-
вары».  
Рис. 44. Структура таблицы «товары»  
 
Рис. 45. Форма «товары»  
 
Полная информация о каждом товаре потребовала бы значительное к о-
личество поле й: производитель, срок годности, информация о качес тве 

 
  
41 и так далее. Мы ограничимся всего двумя полями. Поле «товар» будет 
хранить код товара и имеет тип «Счетчик». Поле «название» – текстовая 
строка длиной 30 символов (рис. 44).  
В заключение создадим ленто чную форму «товары» для ввода и реда к-
тирования данных о товарах. Форму отредактируем и добавим кнопку 
выхода. Заполним таблицу «товары», используя форму «товары» (рис. 
45). Отметим еще раз тот факт, что мы значительно упростили задачу. 
На самом деле, напри мер, товар «колбаса Докторская» производства 
разных предприятий – это разные продукты. Мы же условно будем сч и-
тать ее всегда одним и тем же товаром. В некоторых случаях такой по д-
ход оправдан.  
Итак, на данный момент мы умеем создавать таблицы, простейшие з а-
просы и формы.  
 
 
 
5. Шаг пятый. Мастер подстановок  
 
5.1. Создание таблицы «приход» . На этом шаге мы создадим таблицу 
«приход» для хранения данных о поставках продукции. Таблица будет 
содержать поля: «номер», «дата поставки» (которое коротко назовем 
«дата») , «товар», «цена», «количество» и «поставщик».  Полю «номер» 
присвоим тип «счетчик» и сделаем его ключевым. Полю «дата» присв о-
им тип «дата /время», но здесь тип нуждается в конкретизации. В ни ж-
ней части окна конструктора в строке «Тип поля» развернем меню и  
выберем «Длинный формат даты». Поскольку без указания даты п о-
ставки большая часть отчетности теряет смысл, сделаем это поле обяз а-
тельным, установив в строке «Обязательное поле» значение «Да» (рис. 
46). После того, как мы внесли в таблицу поля «номер» и «д ата», вы й-
дем из конструктора, сохраним таблицу под именем «приход» и снова 
откроем ее в режиме конструктора. По ряду причин желательно, чтобы 
перед использованием мастера подстановок таблица уже имела имя. 
Поле «товар» сделаем обязательным. Но здесь мы впе рвые сталкивае м-
ся с проблемами рационального использования памяти  и целостности 
данных. Допустим, мы решили вводить в это поле информацию о товаре 
в виде текста. Подробное описание товара занимает много места. Зн а-
чит, если в течение месяца этот товар пост упал многократно, мы дол ж-
ны были многократно заполнять  поле большого размера. Здесь налицо 
и неэффективное расходование памяти, и перерасход времени кладо в-
 
  
42 щика или оператора, которому поручен ввод данных. Наконец, один и 
тот же текст разные люди могут вве сти не идентично. Появилось иск у-
шение сократить длинное слово – и, с точки зрения компьютера, введ е-
но новое название.    О возможных ошибках даже говорить не прих о-
дится.  
Рис. 46. Выбор формата даты  
 
С точки зрения эффективности хранения данных здесь наибо лее цел е-
сообразно хранение кодов, в частности кодов товара и поставщика. Вот 
почему, конструируя соответствующие таблицы, мы сделали эти коды 
уникальными. Однако пользователю трудно держать в голове большое 
количество кодов. И здесь приходит на помощь маст ер подстановок 
(рис. 47).  Мастер подстановок обеспечивает такой способ хранения да н-
ных, при котором в таблице хранятся коды объектов, а названия, ра с-
шифровывающие смысл этих кодов, хранятся в другой таблице, которая 
играет роль справочника. Пользователь ви дит только названия! В пр о-
цессе создания подстановок принципиально, чтобы коды в табл ице-
справочнике были помечены как ключевые поля, что мы и сделали при 
создании структур таблиц «поставщики», «потребители» и «тов ары».   
После выбора (рис. 47) строки «Маст ер подстановок» на экране появи т-
ся диалоговое окно (рис. 48), в котором нам будет предложено при фо р-

 
  
43 мировании столбца подстановки использовать значения либо из табл и-
цы или запроса, либо ввести фиксированный набор значений.  
Рис. 47. Мастер подстановок  
 
Есть параметры объектов, которые могут иметь только фиксированный 
и неизменный набор свойств. Например, пол может принимать только 
два значения :  «мужской» или «женский».  В таком случае можно пер е-
вести переключатель в нижнее положение и заполнить список под став-
ляемых значений.  
Рис. 48. Выбор способа формирования столбца подстановок  
 
Список товаров, напротив, вещь очень непостоянная и его лучше хр а-
нить в таблице. Мы оставим переключатель  в положении, представле н-
ном на рис. 48, и нажмем «Далее». Система предложит нам выбрать 
таблицу или запрос, которые мы собираемся использовать для создания 
подстановки. Мы выберем «товары» (рис. 49) и нажмем «Д алее».  

 
  
44 Рис. 49. Выбор таблицы  
 
В диалоговом окне (рис. 50) переброси м поля «товар» и «название»  в 
раздел «Выбранные поля» и нажмем «Далее». После этого система пр е-
доставит нам возможность посмотреть, как выглядит столбец подст а-
новки (рис. 51). Ключевой столбец по умолчанию скрыт! Нажмем «Д а-
лее». В ответ на предложение : «Задайте подпись, которую содержит 
столбец подстановки» введите имя поля «товар» и нажмите «Готово».  
Рис. 50. Выбор полей  
 

 
  
45 Рис. 51. Столбец подстановки  
 
Таким образом, Вы создали связь между таблицами «приход» и «тов а-
ры». Система потребует сохранить табли цу. На вопрос «Выполнить это 
сейчас ?» выбираем ответ «Да».  Обратите внимание, что тип поля «т о-
вар» оказался числовым. Точно так же создайте поле «поставщик», и с-
пользуя для подстановки таблицу «поставщики». Только теперь в кач е-
стве «Выбранных полей» Вы бере те не все поля таблицы, а только кл ю-
чевое поле «поставщик» и поле «название».  Полю «цена» присвоим тип 
«числовой». При этом по умолчанию в наборе свойств поля в строке 
«Размер поля» появится значение «Длинное целое». Это свойство также 
нуждается в конкрет изации. Поэтому в строке «Формат поля» выберем 
«Фиксированный». Это значит, что в записи числа будет содержаться 
два знака после з апятой.  
Рис. 52. Свойства поля «цена»  
 
Поле «количество» будет хранить объем поставки. По смыслу задачи 
поле должно быть число вым, а размер поля, вероятно, достаточно сд е-
лать целым. Теперь закроем конструктор, сохранив изменения макета. 
Откроем таблицу в рабочем режиме (рис. 53) и заполним несколько з а-
писей. При этом следует обратить внимание на то, что дата вводится в 
числовом ф ормате с точкой в качестве разделителя.  Например, Вы вв о-

 
  
46 дите «4.2.5», а на экране отображается «4 февраля 2005 г.». Товар или 
производителя теперь Вы можете вводить, раскрыв соответствую щее 
меню. Кроме того, часто имеет смысл сначала набрать первые буквы  на-
звания. Тогда система попытается угадать все слово.  
Рис. 53. Ввод значения поля из меню  
  
Пока мы заполнили только две записи, но уже почувствовали неудобс т-
ва, связанные с тем, что тексты в столбце подстановки расположены в 
произвольном (неалфавитном порядке). Не поленимся еще раз войти в 
режим конструктора. Выделим поле «товар» и в свойствах поля внизу 
окна конструктора перейдем на заставку «Подстановка» (рис. 54).  
 
Рис. 54. Источник данных для подстановки  
 
Установим указатель в поле с надписью «Источ ник строк» и нажмем 
троеточие в конце поля. На экране появится уже знакомое нам окно п о-
строителя запросов (рис. 55).  
 

 
  
47 Рис. 55. Источник данных для подстановки в окне запроса  
 
В этом окне в строке «Сортировка» для поля «название» установим зн а-
чение «по воз растанию». Закроем окно запроса и подтвердим сохран е-
ние изменений. Теперь, не выходя из режима конструктора, те же де й-
ствия проделаем с полем «поставщик». Покинем конструктор, с охранив 
изменения,  и откроем таблицу в рабочем режиме. Теперь ввод товаров 
и поставщиков значительно упростился. Например, если Вы ищете в 
меню колбасу данного вида, то Вам достаточно набрать в поле «товар» 
текст «ко» и развернуть меню. Перед Вами предстанут все колбасы, к а-
кие фигурировали когда -либо на складе. Вот почему автор упор но н а-
стаивал на том, чтобы первые буквы текста в таблицах -справочниках 
несли максимум информации об объекте. Например, не рекомендуется 
заключать названия предприятий в кавычки или начинать их с «АО», 
«ООО» и прочих повторяющихся последовательностей симв олов.  
Следующие задания читателю предлагается выполнить самостоятел ьно. 
 
5.2. Создание запроса «приход Запрос» . Указанный объект следует 
создать, как простой запрос, а затем в режиме конструктора упоряд о-
чить даты поступления товаров по возрастанию. При пост роении запр о-
са используем все поля источника!  
 

 
  
48 5.3. Создание формы «приход».  В разделе «Формы» окна базы данных 
нажмем кнопку «Создать», в диалоге выберем ленточную форму, в к а-
честве источника данных возьмем «приход Запрос» и выберем для фо р-
мы все поля ис точника! Сохраним форму, дав ей имя «приход». То, что 
имя формы совпадает с именем таблицы, не должно нас беспокоить. Мы 
могли, конечно, пойти по проторенной дорожке, создав форму «в сто л-
бец», а затем связав ее с ленточной формой, но хотя бы для разнообр а-
зия поступим иначе. Откроем форму в рабочем режиме и посмотрим, 
что нам в ней не нравится. Для некоторых полей система выделила 
слишком много места, а для других места явно не хватает. Поле «н о-
мер» (вместе с подписью к нему) можно без ущерба для содержания 
удалить из формы. Полезно разместить в примечании формы кнопку 
выхода. Перечисленные манипуляции не должны вызывать у нас каких -
либо затруднений, мы их не раз проделывали. Но иногда также при п о-
строении формы в автоматическом режиме игнорируются созданные 
нами подстановки и форма выглядит, как на рис. 56. Как видно на р и-
сунке, вместо названий товаров и поставщиков представлены только их 
коды. Чтобы устранить подобный дефект, нужно развернуть «Список 
полей» (рис. 57) с панели инструментов «Констру ктора форм» . 
 
Рис. 56. Форма с полями без подстановок  
 
Удаляем в форме поля «товар» и «поставщик» и переносим эти поля из 
«Списка полей» в форму. Для такого переноса поля надо в «Списке 

 
  
49 полей» щелкнуть левой клавишей мыши по имени соответствующего 
поля и, не отрывая руки от клавиши, перенести это поле на место уд а-
ленного. При этом вместе с полем перенесется в область данных фо р-
мы и относящаяся к полю надпись, что совершенно некстати. Для уд а-
ления лишнего экземпляра надписи щелкните клавишей за пределами 
поля, а затем  по надписи и нажмите клавишу « Delete ». 
Рис. 57. Список полей  
 
Аккуратно расположите поля в одной строке области данных, чтобы 
каждое поле располагалось под своей надписью. Корректировки могут 
нарушить последовательность перехода между полями в форме. В та ком 
случае Вы можете установить правильную последовательность перех о-
да, воспользовавшись пунктом меню «Вид  Последовательность 
перехода » (рис. 59). Закроем «Констру ктор».  
 
Рис. 58. Заголовки полей и область данных после корректировки  
 
 
Теперь – самое ск учное! Вам предстоит, пользуясь формой или неп о-
средственно в таблице, занести как можно больше информации о п о-
ставках. Стоит выделить на это не менее пятнадцати минут.  
 

 
  
50 Рис. 59. Последовательность перехода при вводе данных  
Рис. 60. Поля таблицы «расход»  
 
5.4. Таблица «расход» . Теперь Вам предлагается продемонстрировать, 
насколько хорошо Вы освоили материал пунктов 5.1 -5.3. Таблица  «ра с-
ход» будет содержать данные о расходе товаров. Ее поля представлены 
на рис. 60. Поля «номер», «дата», «товар» и «количест во» имеют тот же 
смысл, что и в таблице «приход», только теперь речь идет об отпуске 
партий товара со склада. Поле «цена» мы не задействовали, считая, что 
склад обслуживает торговые точки нашей фирмы, а значит, товары о т-
пускаются со склада по закупочной це не.  
Поле «потребитель» использует подстановку, а источником столбцов 
для подстановки служит таблица «потребители».  
 

 
  
51 5.5. Форма «расход» . Создадим запрос «расход Запрос» и в режиме 
конструктора введем упорядочивание записей по дате (теперь под датой 
подр азумевается дата отпуска товара). Используя построенный запрос в 
качестве источника данных, создадим ленточную форму «расход» точно 
так же, как в разделе 5.3.  
Рис. 61. Форма «расход»  
 
Используя созданную выше форму, заполним таблицу «расход». Чем 
больше за писей Вы введете, тем более удачные иллюстрации работы 
приложения можно будет в дальнейшем получать. При этом будем сч и-
тать, что наш склад только открылся, и постараемся, чтобы, напр имер, 
мы не поставили потребителям больше картофеля, чем получили от п о-
ставщиков.  
 
5.6. Связи между таблицами . В рассмотренных выше примерах при 
вводе товаров, поставщиков и потребителей мы видим на экране их н а-
звания, хотя теперь знаем, что физически таблица хранит только коды. 
Такое удобство создал нам мастер подстановок. Одн а из таблиц играет 
роль справочника по кодам, хранящимся в другой таблице. Таким обр а-
зом, между таблицами можно установить связи. Виды связей в этом 
разделе мы разбирать не будем. Однако заметим, что связи между та б-
лицами всегда устанавливаются по определе нным полям. Для того, чт о-
бы получить схему связей между таблицами, надо в строке горизо н-
тального меню выбрать пункт СервисСхема данных . Если в появи в-
шемся окне «Схема данных» (рис. 62) интересующая Вас связь отсутс т-
вует, то можете щелкнуть правой клавишей  мыши и в развернувшемся 
окне выбрать пункт «Отобразить все».  

 
  
52 Рис. 62. Окно схемы данных  
 
 
Итак, мы разработали объекты, обеспечивающие хранение и редактир о-
вание данных о товарах, поставщиках и потребителях, а также о прих о-
де и расходе товаров. В разделе «Формы» окна базы данных мы видим 
имена семи построенных нами форм (рис. 63). Отражаемая в форме и н-
формация может быть распечатана так же, как во многих других прил о-
жениях, с помощью строки меню ФайлПечать . Однако представле н-
ная в формах информация, как п равило, далеко не то, что  хотел бы в и-
деть на своем столе начальник. Руководитель обычно нуждается в 
обобщенной и прошедшей предварительную обработку информации, 
представленной в удобном  для чтения виде. Этим вопросом мы и за й-
мемся далее.  

 
  
53  
Рис. 63. Разд ел «Формы» окна базы данных  
 
 
 
6. Шаг шестой. Отчеты  
 
Отчет – это объект базы данных, представляющий информацию в виде 
готового для печати документа. Информацию можно распечатать неп о-
средственно из таблиц, запросов и форм, но отчеты обладают принц и-
пиальным  преимуществом.  
 Они предоставляют широкие возможности отражения в печатном 
документе больших наборов данных, в случае необходимости, сгрупп и-
рованных по заданным признакам. При этом в документе могут отр а-
жаться промежуточные (по группам) и общие итоговые зн ачения.  
 Отчеты могут использоваться для получения соответствующим 
образом оформленных счетов, документов для презентации и других 
полезных в работе вещей, оформление которых вручную отнимает уйму 
времени!  
 
6.1. Простейший отчет по приходу.  Войдем в раздел «Отчеты» окна 
базы данных и нажмем клавишу «Создать». На экране появится диал о-
говое окно «Новый отчет» (рис. 64). В диалоговом окне выберем «Авт о-
отчет : ленточный», а в качестве источника данных возьмем таблицу 
«приход» и нажмем кнопку «ОК». Отчет готов! Со храним его под им е-
нем «приход_подробный». Откроем отчет в режиме конструктора и 
проведем ряд корректировок (отчет так же, как и форма, является ко н-
тейнером для элементов управления). Во -первых, уберем поле номера с 

 
  
54 соответствующей надписью и откорректируем  размеры полей. Подпись 
«ПРИХОД» в заголовке отчета испр авим на «Приход товаров».  
Рис. 64. Диалоговое окно создания нового отчета  
 
Если отчет подготовлен в альбомном формате, уплотните данные, 
сдвиньте правую границу страницы и в меню « ФайлПараметры 
стра ницы»  смените формат страницы на «книжный». Здесь поначалу 
может возникнуть ряд затруднений, но вполне преодолимых. Зато пр и-
вычка самостоятельно решать свои проблемы всегда пригодится! Итак, 
пусть окно конструктора приняло вид, как на рис. 65. Обратите вни ма-
ние на структуру окна конструктора. В верхней части находится «Заг о-
ловок отчета». Представленная в нем информация, независимо от кол и-
чества листов, печатается только один раз в начале отчета. «Верхний 
колонтитул» содержит информацию, которая отображается  вверху ка ж-
дой страницы текста, обычно здесь находятся заголовки полей. Область 
данных – набор полей, взятый из источника данных. «Нижний колонт и-
тул» – информация, отображаемая внизу каждой страницы (номер стр а-
ницы, дата). Средством отображения текущей дат ы служит вычисля е-
мое поле, содержащее функцию = Now (). Кроме всего перечи сленного, 
на рисунке Вы видите «Примечание отчета», в котором эл ементы 
управления пока отсутствуют.  

 
  
55 Рис. 65. Окно конструктора отчетов  
 
Закроем «Конструктор» и просмотрим отчет (рис. 66). Здесь, как и пр е-
жде, мы не пытались найти сразу наилучшее решение. Но если в теч е-
ние отчетного периода было большое количество поставок, то вряд ли 
такой отчет удовлетв орит Ваше начальство.  
Рис. 66. Отчет по поставкам товаров  

 
  
56 6.2. Группировки в отчет е. Допустим, директору фирмы важно видеть 
данные, сгруппированные по поставщикам. Это для нас не проблема. 
Вернемся в режим конструктора и выберем строку меню 
«ВидСортировка и группировка ».  
Рис. 67. Сортировка и группировка  
 
Рис. 68. Окно конструктора.  Группировка по поставщикам  
 

 
  
57 Откроется диалоговое окно «Сортировка и группировка» (рис. 67). У с-
тановим указатель на первой строке столбца «Поле /выражение», ра з-
вернем меню и выберем поле «поставщик». Автоматически в соответс т-
вующей строке второго столбца п оявится текст «По возрастанию». Это 
значит, что записи в запросе будут сгруппированы по поставщикам. В 
нижней части окна в полях с подписями «Заголовок группы» и «Прим е-
чание группы» установим значения «Да». Во второй строке точно так 
же установим поле «дат а», для того чтобы поставки были упорядочены 
по датам, но не будем требовать наличия «Заголовка группы» и «Пр и-
мечания группы»! Закроем окно. Окно конструктора примет вид, пре д-
ставленный на рис. 68. Теперь перетащим в «Заголовок группы» из 
верхнего колонтит ула подпись «поставщик», а из области данных – по-
ле «поставщик» (рис. 69). Установим для поля «поставщик» жирный 
шрифт. Чтобы лишний раз не открывать конструктор, заодно решим 
еще одну проблему. Нам хотелось бы видеть в отчете данные о стоим о-
сти поставок. Добавим  в верхний колонтитул надпись «стоимость», а в 
область данных – поле. Элементы управления, как и в случае констру и-
рования форм, берутся с «Панели элементов». Подпись, которая по я-
вится слева от поля, удалим. Теперь занесем в поле вычисляемое выр а-
жение «=цена*количество». Квадратные скобки система вставит сама 
(рис. 70).  
Рис. 69. Название поставщика теперь размещено в примечании группы  
 
Чтобы иметь возможность видеть итоговые данные, возьмем с «Панели 
элементов» поле и разместим в примечании группы.   В качестве подп и-
си введем «Итого». А в свободное поле поместим  выражение 
«=Sum([цена]*[количество])». Поскольку это выражение находится в 
примечании группы, сумма стоимостей будет вычисляться только по 
данной группе (рис. 71).  

 
  
58 Рис. 70. Вычисляемое поле  
 
Рис. 71. Суммарная стоимость по группе  
 
Подведем черту под строкой «Итого» (черту берем с Панели элеме н-
тов). Затем скопируем содержимое «Примечания группы» в «Примеч а-
ние отчета», а надпись «Итого» заменим на «Итого по всем  поставщ и-
кам». Закроем конструк тор, сохранив изменения, и откроем отчет для 
просмотра. На рис. 72 изображено начало отчета.  
Рис. 72. Отчет с группировкой по поставщикам  
 

 
  
59 Рис. 73. Выбор полей для запроса  
 
6.3. Отчет по итоговому запросу . Теперь директор хотел бы видеть 
итоговый отчет только по объему поставок по поставщикам в денежном 
выражении. И это не проблема! Сначала перейдем в раздел «Запросы», 
нажмем «Создать», в диалоговом окне выберем «Простой запрос» и н а-
жмем «ОК». В следующем диалоговом окне в качестве источника да н-
ных возьм ем таблицу «приход» и выберем в ней поля «цена», «колич е-
ство» и «поставщик» (рис. 73). Нажмем «Далее», оставим переключ а-
тель в положении «подробный» и опять нажмем «Далее». Дадим запр о-
су имя «приход по стоимости» и нажмем «Готово». Откроем получи в-
шийся зап рос в режиме конструктора и добавим вычисляемое поле 
«стоимость : [цена ]*[количество] » (рис. 74).  
Рис. 74. Вычисляемое поле в запросе  
 
Обратите внимание на формат вычисляемого поля. Сначала идет назв а-
ние поля, а затем после двоеточия формула для вычисления его знач е-
ния. Вид получившегося отчета в режиме таблицы представлен на рис. 
75. Теперь создадим еще один простой запрос, источник данных для к о-
торого – запрос «приход по стоимости». В источнике выберем поля 
«поставщик» и «стоимость» (рис. 76). Нажмем «Дале е», установим п е-
реключатель в положение «итоговый» и нажмем кнопку «Итоги». По я-
вится диалоговое окно (рис. 77). В этом окне мы поставим «птичку» в 
строке «стоимость» под заголовком « Sum». Строку «поставщик» не 
трогаем. Это значит, что группировка будет про водиться по полю «п о-

 
  
60 ставщик» и нас интересует суммарное значение стоимости по каждой 
группе.  
Рис. 75. Запрос с вычисляемым полем «стоимость»  
Рис. 76. Выбор полей из запроса «приход по стоимости»  
 
Нажмем «ОК», затем «Далее». Дадим запросу имя «итоги прихо д по п о-
ставщикам» и нажмем «Готово». Вид запроса в режиме таблицы пре д-
ставлен на рис. 78. Обратите внимание на тот факт, что система, не с о-
ветуясь с нами, присвоила вычисляемому полю имя « Sum_стоимость». 
Откорректируем имя. Для этого  откроем запрос в режи ме конструктор 
и вместо « Sum_стоимость» запишем «об ъем_поставки» (рис. 79).  

 
  
61 Рис. 77. Окно «Итоги»  
Рис. 78. Запрос «Итоги по поставщикам»  
Рис. 79. Изменение имени вычисляемого поля в запросе  
 
Двоеточие и следующее за ним название исходного поля «стоимос ть», 
по которому ведется суммирование, удалять или изменять нельзя!  
Теперь осталось создать ленточный отчет, точно так же, как мы это д е-
лали в пункте 6.1. В режиме конструктора откорректируем отчет. Изм е-
ним заголовок на «Объемы поставок (в рублях)». В прим ечании отчета 
поместим вычисляемое поле, отражающее суммарный объем поставок 
по всем поставщикам (рис. 80). Вычисляемое поле в примеч ании отчета 
содержит формулу «=Sum([объем_поставки])». Предназн аченный для 
печати документ представлен на рис. 81.  

 
  
62 Таким о бразом, мы создали два отчета. В первом поставки сгруппир о-
ваны по поставщикам. Во втором отражена обобщенная информация, то 
есть объемы поставок в рублях по всем поставщикам.  
В качестве самостоятельной работы предлагается создать следующие 
объекты : 
 Отчет п о поставкам, сгруппированным по отдельным товарам.  
 Итоговый отчет по отдельным товарам с указанием объема п о-
ставки, общей стоимости поставки и средней цены товара (в общем 
случае один и тот же товар за некоторый период времени может п о-
ставляться по разным  ценам).  
 
Рис. 80. Отчет «приход_итоговый» в режиме конструктора  
 
Может ли созданный таким образом отчет представлять практический 
интерес ? Очевидно, нет. Склад может работать годы, а отчет директор 
требует за конкретный период времени. Наконец, неплохо бы  в загол о-
вок отчета поместить название фирмы, а в примечании отчета фамилию 
с инициалами лица, представляющего отчет, – заведующего складом. 
Этим в дальнейшем мы и займемся.  
 
 

 
  
63  
Рис. 81. Предназначенный для печати документ  
 
 

 
  
64 7. Шаг седьмой. Доработка отчет ов 
 
7.1. Дополнительная информация.  Прежде всего создадим в режиме 
конструктора  таблицу, которая будет содержать дополнительную и н-
формацию, отраженную в полях : 
 «фирма» – название фирмы. Текстовая строка, длину которой Вы 
можете установить сами ; 
 «заведующий » – фамилия, имя, отчество заведующего складом ; 
 «дата1» и «дата2» – эти поля (длинный формат даты) будут хр а-
нить начало и конец временного интервала,   за который составляется 
отчет.  
Разработчик, если сочтет нужным, может пополнить структуру таблицы 
и дру гими полями, но мы, как всегда, постараемся ограничиться нео б-
ходимым минимумом. При сохранении таблицы подтвердим, что не с о-
бираемся задавать ключевое поле. Дадим таблице имя «фирма» и запо л-
ним только первую запись. Например, «фирма» – «ООО «Рога и коп ы-
та», «заведующий» – «Бендер О. И.». Создадим форму «в столбец», и с-
точником данных которой будет служить таблица «фирма» (рис. 82 ).  
Рис. 82. Дополнительная информация  
 
Дадим форме имя «фирма». Поскольку таблица «фирма» всегда будет 
состоять из одной -единствен ной записи, внесем в свойства формы и з-
менения, которые мы уже вносили в разделе 3.3. То есть удалим полосы 
прокрутки, область выделения, поле номера записи, кнопки оконного 
меню и кнопки размеров окна, запретим удаление и добавление записей. 
Наконец, сдела ем окно модальным, закроем окно свойств, создадим 
кнопку выхода и покинем режим конструктора. Форма гот ова!  

 
  
65 На самом деле нам нужны две формы, отличные от той, которую мы 
только что создали : одна для просмотра и корректировки названия фи р-
мы и фамилии заве дующего складом (по крайней мере, заведующих 
складом иногда меняют), другая для задания начала и конца отчетного 
периода.  
Создадим копию получившейся формы. Для этого воспользуемся пун к-
том меню «Правка  Копировать», а затем «Правка  Вставить ». В о т-
крывш емся диалоговом окне дадим копии имя «отчет_приход». Затем 
поочередно откроем обе формы в режиме конструктора и внесем в них 
небольшие корректировки.  В форме «фирма» удалим поля «дата1» и 
«дата2» (рис. 83).  
Рис. 83. Форма «фирма»  
Рис. 84. Форма «отчет_пр иход»  
 
В форме «отчет_приход» установим подпись : «Отчет о поставках», уд а-
лим поля «фирма» и «заведующий», а также изменим расположение п о-
лей и содержание надписей к ним (рис. 84). Еще раз обратим Ваше вн и-
мание на то, что подпись в верхней части формы и имя  формы – разные 

 
  
66 вещи. Смысл преобразований будет более понятен, когда мы организ у-
ем вызов из этого окна отчетов за заданный период вр емени.  
 
7.2. Группа переключателей.  Откроем форму «отчет_приход» в реж и-
ме конструктора. Поместим в форму элемент управлени я «Группа пер е-
ключателей» (см. Шаг второй, рис. 15).  Откроется диалоговое окно 
(рис. 85).  
Рис. 85. Подписи к переключателям  
 
У нас пока создано два отчета. Возможно, Вы создали больше. В любом 
случае каждому отчету мы поставим в соответствие переключатель . 
Введем подписи к двум переключателям (рис. 85) и нажмем «Далее».  
Теперь система потребует задать переключатель, используемый по 
умолчанию. Здесь Вы можете поступать по своему усмотрению. Н а-
жмите «Далее». Вы увидите список, в котором каждой подписи соотв ет-
ствует натуральное число. Система по умолчанию в каждой строке у с-
танавливает число, равное номеру строки. Мы имеем право изменить 
заданные системой значения, но не хотим. Поэтому нажмем «Далее». 
Оставим переключатель (рис. 86) в положении «Сохранить знач ение для 
дальнейшего использования» и нажмем «Далее».  
 

 
  
67 Рис. 86. Выбор варианта использования значения переключателя  
Рис. 87. Выбор типа элемента управления  
 
В диалоговом окне (рис. 87) мы можем заменить переключатель фла ж-
ком или кнопкой, но не будем этог о делать. Поставим оформление 
группы «приподнятое» (здесь автор не настаивает) и нажмем «Далее». 
Зададим подпись к группе переключателей «Выбор формы отчета» и 
нажмем «Готово». Выйдем из режима конструктора и откроем форму в 
рабочем режиме (рис. 88).  Если Вы создали, например, пять отчетов, то 
у Вас сейчас должно быть пять переключателей с соответствующими 
подписями. Испытаем  переключатели в работе. В положении «Да» вс е-
гда находится только один переключатель. Правда, само по себе изм е-
нение положения перекл ючателя не влечет за собой ровным счетом н и-
каких действий. Эту проблему мы решим в следующем пункте, а пока 
дадим группе переключателей имя.  

 
  
68  
Рис. 88. Группа переключателей в форме «отчет_приход»  
Рис. 89. Свойства группы переключателей  
 
Конечно, система при создании любого элемента управления непреме н-
но дает ему имя, но имя типа «Кнопка7» или «Группа16» нам ни о чем 
не говорит. Поэтому в режиме конструктора два раза щелкнем левой 
клавишей мышки по рамке группы переключателей, как мы поступаем 
всегда, когд а хотим открыть окно свойств элемента управления. Обр а-
тите внимание, что щелкнуть надо именно по рамке (рис. 89)! Если 
форма является контейнером для элементов управления, то группа п е-

 
  
69 реключателей, в свою очередь, является контейнером для переключат е-
лей. П оэтому щелкнув клавишей в другом месте, Вы можете открыть 
свойства надписи или, например, конкретного переключателя. Теперь в 
окне свойств группы переключателей установим имя «Ключ» и покинем 
конструктор.  
 
7.3. Макросы.  Нам предстоит использовать новый объ ект Microsoft  Ac-
cess – макрос, то есть структурированное описание одного или нескол ь-
ких действий, которые должно выполнить приложение Access  в ответ на 
определенное событие. Макрос строится из макрокоманд. Microsoft  Ac-
cess предоставляет в распоряжение поль зователя свыше 40 макрок о-
манд, охватывающих большой набор стандартных действий, таких как 
открытие таблиц, форм, выполнение запросов, выбор пунктов меню и 
так далее. Войдем в раздел «Макросы» и нажмем кнопку «Создать». 
Откроется окно макросов в виде таблиц ы в две колонки : «Макрокома н-
да» и «Примечание». Их названия говорят сами за себя. Добавим в та б-
лицу еще две колонки, воспользовавшись пунктами меню « Вид   
Имена макросов » и « Вид  Условия ». В первой строке первой коло н-
ки зададим имя макроса : «отчет_приход ». Макрос, который мы хотим 
создать, должен запускаться из формы «отчет_приход». В зависимости 
от значения элемента управления, которому мы в предыдущем пункте 
дали имя «Ключ»,   макрос  должен  выдавать  тот  или иной отчет.        
В столбце «Условия» вве дем условие вывода первого отчета : 
«[Forms]![отчет_приход]![Ключ]=1». Обратите внимание, первый отчет 
формируется, если значение объекта с именем «Ключ» равно 1. Чтобы 
сослаться на этот объект, недостаточно его имени, так как в разных 
формах могут встречат ься одноименные элементы управления. Поэтому 
в условии мы указываем, что объект принадлежит форме, даем название 
формы и уже потом имя объекта. В столбце «Макрокоманда» развор а-
чиваем меню и выбираем макрокоманду «ОткрытьОтчет». В нижней 
части окна макросов  слева расположена таблица аргументов макрок о-
манд. Здесь мы задаем имя отчета «приход_подробный» и режим «Пр о-
смотр». Аналогично оформим строку для  второго отчета (рис. 90). При 
желании в столбце «Примечание» можно указать, какие действия выз ы-
вают заданные  макрокоманды.  Сохраним макрос под именем «Ма к-
рос1» и вернемся в раздел «Формы». Откроем в режиме конструктора 
форму «отчет_приход», на панели элементов отожмем «Кнопку маст е-
ра» (рис. 15), чтобы отключить «Мастера по созданию элементов упра в-
ления».  
 
  
70 Рис. 9 0. Макрос «отчет_приход»  
 
Возьмем с панели элементов кнопку и бросим в форму. Теперь – ника-
кого диалога! Просто в форме появится кнопка, нажатие на которую не 
вызывает никаких действий. Откроем окно свойств кнопки, на заставке 
«Макет» щелкнем по строке «Р исунок», выберем рисунок (рис. 91)        
и нажмем «ОК».  
Рис. 91. Выбор рисунка для кнопки  
 
Выберем заставку «События» и щелкнем клавишей по строке «Нажатие 
кнопки». Нажав в правой части строки стрелку, направленную вниз, 
развернем меню и выберем в качест ве действия «Ма к-
рос1.отчет_приход» (рис. 92). Закроем окно свойств, выберем наиболее 
удачное расположение кнопки и выйдем из конструктора. Теперь в р а-
бочем режиме форма будет иметь вид, представленный на рис. 93.  Убе-
дитесь, что при нажатии на кнопку в прав ой части формы на экран в ы-
водится отчет, соответствующий установленному положению перекл ю-
чателя.  

 
  
71 Рис. 92. Событию «Нажатие кнопки» приписано действие  
Рис. 93. Для получения выбранного отчета достаточно нажать кнопку слева  
 
Точно так же, создав соответств ующую группу переключателей и ма к-
рос, можно организовать вывод любого количества отч етов. 
Теперь настало время приступить к усовершенствованию созданных о т-
четов.  
 
7.4. Условия отбора данных.  При создании отчета «приход_итоговый» 
в качестве источника данных  взят запрос «итоги приход по поставщ и-
кам», для которого источником данных является в свою очередь запрос 
«приход по стоимости». Запрос «приход по стоимости» построен на о с-
нове запроса «приход_Запрос», а запрос «приход Запрос» фактически 
содержит все поля и записи таблицы «приход», упорядоченные по во з-
растанию даты. Источником данных отчета «приход_подробный» явл я-
ется непосредственно таблица «приход». Поскольку наборы полей в 
таблице «приход» и в запросе «приход Запрос» совпадают один к одн о-
му, мы можем в о тчете «приход_подробный» заменить источник да н-
ных. Откроем указанный отчет в режиме конструктора, а затем окно 

 
  
72 свойств отчета. Окно свойств отчета открывается точно так же, как и 
окно свойств формы. Выберем заставку «Данные» и щелкнем клавишей 
в строке «И сточник записей». Развернем меню и выберем в качестве и с-
точника «приход Запрос» (рис. 94).  
Рис. 94. Смена источника данных в отчете «приход_подробный»  
 
Закроем окно свойств и конструктор. Теперь, открыв отчет для пр о-
смотра, Вы можете убедиться, что ровным  счетом ничего не измен и-
лось. Зато теперь оба отчета основаны на данных запроса «приход З а-
прос»!  Перейдем в раздел «Запросы» и откроем «приход Запрос» в р е-
жиме конструктора.  
Рис. 9 5. Условие отбора записей по дате  
 
В строке «Сортировка» поля «дата» задади м условие отбора записей : 
Between  [Forms ]![отчет_приход]![дата1] And [Forms ]![отчет_приход]![дата2] .  
Оператор « Between » задает диапазон значений поля. Запрос производит 
отбор записей, которые в соответствующем поле имеют значение, поп а-
дающее в заданный ди апазон. Например, мы можем отобрать записи о 
поставках в течение отчетного периода : с 1.01.05 по 31.01.05. Вместо 
«Between »  мы могли бы использовать два неравенства, объединенных 
оператором « And»: 
>=[Forms ]![отчет_ приход ]![дата1] And <=[Forms ]![ отчет_при ход]![дата2].  
Открыв форму  «отчет_приход», задайте интересующий Вас диапазон 
дат и убедитесь, что оба отчета отражают данные о поставках за зада н-
ный диапазон дат.  

 
  
73 Рис. 96. Дополнительная информация в отчете  
 
7.5. Дополнительная информация в отчете. Остал ось внести в отчет 
две небольших корректировки : поместить в заголовок отчета название 
фирмы, а в примечание отчета – поле для подписи. В форме «о т-
чет_приход» установим переключатель в положение «подробный отчет 
о приходе», откроем соответствующий отчет и п ереведем его в режим 
конструктора. С панели элементов возьмем элемент управления «поле» 
и поместим его в заголовок отчета.      Надпись, соответствующую п о-
лю, удалим.    В случае необходимости   расширим  заголовок и  сдв и-
нем вниз название отчета. Поместим  в поле выражение 
=[Forms]![отчет_приход]![фирма], то есть название фирмы. Теперь ст а-
новится ясно, зачем мы назначили в качестве источника данных для 
формы «отчет_приход» таблицу «фирма»! Аналогично в примечание 
отчета поместим надпись «Заведующий складом» , содержащую выр а-
жение =[Forms]![отчет_приход]![заведующий], то есть Ф. И. О. зав е-
дующего складом, а также текущую дату, определяемую функцией 

 
  
74 Now () (рис. 96).  Аналогичным образом отредактируем и отчет по объ е-
мам поставок.  
Замечание!  Мы создали форму «прих од», используя соответствующие 
запросы. Теперь, когда мы изменили запросы, нам придется заменить в 
этой форме источник данных. Для этого откроем форму «приход» в р е-
жиме конструктора, откроем окно свойств формы и в разделе «Да нные» 
заменим источник данных н а таблицу «приход».  
 
 
 
8. Шаг восьмой.  Несколько итоговых запросов  
 
8.1. Создание итогового запроса в режиме конструктора. При разр а-
ботке соответствующих отчетов по расходу товаров возникает проблема 
определения цен. Поскольку мы договорились, что товары распредел я-
ются по торговым точкам, принадлежащим нашей фирме, цены, по к о-
торым товары отпускаются, должны соответствовать ценам, по кот орым 
мы эти товары закупили. Но имеющиеся в наличии партии одного и т о-
го же товара могут быть приобретены по разным ценам . Значит, речь 
должна идти о средних ценах. Среднюю цену будем считать за заданное 
количество дней до последней поставки. Прежде всего, для каждого т о-
вара найдем дату последней поставки. Для этого в разделе «Запросы» 
нажмем кнопку «Создать». На этот раз со здадим запрос в режиме ко н-
структора. В меню диалогового  окна выберем строку «Ко нструктор», а 
затем в окне «Добавление таблицы» выберем таблицу «приход». Н а-
жмем «Добавить», а потом «Закрыть». В таблице «приход» в верхней 
части окна запроса два раза щелкнем  по названиям полей «товар» и «д а-
та». Выберем пункт меню «Вид  Групповые операции». В наборе 
свойств полей появится новая строка – «Групповая операция». В этой 
строке для поля «товар» выберем в меню значение «Группировка», а 
для поля «Дата» – значение Max (рис. 97) . Это значит, что в з апросе, как 
в логической таблице, каждый товар будет представлен один раз, а в 
поле, соответствующем полю «дата», будет стоять наибольшее значение 
даты поставки этого товара. Созданный запрос представлен на рис. 98. 
Теперь от кроем в режиме конструктора таблицу «фирма» и добавим 
еще одно поле – «период», которое будет содержать количес тво дней до 
последней поставки, то есть период, за который считается средняя цена. 
Очевидно, это поле должно быть числовым.  
 
  
75 Рис. 97. Групповые о перации в запросе  
 
Рис. 98. Запрос «последняя_поставка»  
 
После того, как Вы создадите форму «отчет_расход», аналогичную 
форме «отчет_приход», в этой форме надо поместить новое поле «пер и-
од» (рис. 99). Чтобы обеспечить удобную Вам последовательность п е-
рехо дов, воспользуйтесь пунктом меню «Вид  Последовательность 
переходов». В дальнейшем из этой формы могут вызываться отчеты, 
использующие среднее значение цены.  

 
  
76 Рис. 99. Вид формы «отчет_расход» в режиме конструктора  
 
8.2. Расчет диапазонов дат.  Создадим пр остой запрос, источником 
данных для которого будет запрос «последняя_поставка». Дадим запр о-
су имя «диапазон_дат», откроем его в режиме конструктора и добавим 
вычисляемое поле (рис. 100) : 
Min_дата: DateAdd ("y";-[Forms ]![отчет_расход]![период];[ Max _дата]) . 
Рис. 100. Запрос «диапазон_дат» в режиме конструктора  
 
Здесь «Min _дата» – имя вычисляемого поля, содержащего дату, пре д-
шествующую Max_дата. Функция DateAdd  вычисляет дату, отлича ю-
щуюся от исходной на заданное количество единиц времени. Первый 
аргумент « y» задает единицу времени – день. Кроме того, время может 
измеряться в неделях, месяцах, годах и даже в минутах, секундах и ч а-
сах. Второй аргумент : -[Forms]![отчет_расход]![период]. Этот арг умент 
указывает, сколько единиц времени надо отступить от заданной в треть-
ем аргументе даты. В качестве его значения берется значение поля «п е-
риод» формы «отчет_расход» со знаком «минус», указывающим, что 
отсчет идет в обратном направлении.  Тот факт, что запрос использует 

 
  
77 значение поля из формы «отчет_расход», не означает, что мы не можем 
открыть этот запрос автономно.  Просто при попытке открыть запрос 
появится диалоговое окно, в котором Вы введете это значение (рис. 
101). Того же результата можно достичь, если сначала открыть форму 
«отчет_расход», а потом запрос. Созданный  запрос представлен на рис. 
102. Теперь каждому товару поставлен в соответствие интервал времени 
поставок, по которому следует вычислять среднюю цену (в нашем пр и-
мере – 10 дней).  
 
Рис. 101. Ввод количества дней  
Рис. 102. Запрос «диапазон_дат»  

 
  
78  
9. Шаг де вятый. Установка связей между таблицами  
 
Теперь мы умеем формировать практически любые отчеты по приходу и 
расходу товаров. Но для принятия решений ничуть не меньший интерес 
представляет информация  о  наличии  товаров  на  данный момент.   
Для этого мы до лжны научиться устанавливать  связи между таблиц а-
ми. Связь – способ объединения информации, хранящейся в разных 
табл ицах. 
 
9.1. Отбор данных по диапазону.  Создадим простой запрос, в качестве 
источника данных для которого назначим таблицу «приход». Выберем 
поля «дата», «товар», «цена» и «количество». Сохраним запрос под 
именем «диапазон_стоимость». В этом запросе будут отражены поста в-
ки товаров за заданный период времени до последней поставки. Диап а-
зон дат для каждого товара будет свой и в общем случае разли чный. О т-
кроем запрос в режиме конструктора, щелкнем правой клавишей в его 
верхней части (в области таблиц) и выберем строку «Добавить табл и-
цу». В открывшемся окне перейдем на заставку «Запросы», выберем з а-
прос «диапазон_дат» и нажмем «Добавить», после чего  окно «Добавл е-
ние таблицы» закроем. Установим связь между таблицей «приход» и з а-
просом «диапазон_дат» по полю «товар». Для этого нажмем левую кл а-
вишу мыши на поле «товар» в окне таблицы «приход», не отпуская кл а-
виши, перетащим указатель на поле «товар» в о кне «диапазон_дат». Т е-
перь два одноименных поля соединены линией, что означает установл е-
ние связи (рис. 103)! Если по линии связи дважды щелкнуть левой кл а-
вишей, появится окно «Параметры объединения». По умолчанию мы 
получили объединение только тех записей , в которых связанные поля 
обеих таблиц совпадают. Это нас вполне устраивает. Осталось только 
добавить в запрос поля « Min_дата» и « Max_дата». Для этого надо в о к-
не «диапазон_дат»  дважды щелкнуть левой клавишей по соответс т-
вующим полям. В строке «Условие о тбора» для поля «дата» зададим 
условие : Between [Min_дата] And [Max_дата]. В строке «Вывод на э к-
ран» погасим галочку у полей «дата», « Min_дата» и « Max_дата», так как 
вывод на экран этих полей в дальнейшем не нужен. И, наконец, созд а-
дим  в запросе  вычисляе мое поле  «стоимость : [количество]*[цена] ».    
В рабочем режиме построенный запрос будет иметь вид, представле н-
ный на  рис. 104.  
 
 
  
79 Рис. 103. Связь таблиц  
Рис. 104. Запрос «диапазон_стоимость»  
 
9.2. Расчет цен.  Создадим простой запрос, в качестве источника  данных 
для которого назначим последний созданный запрос «диапазон_ сто и-
мость». Выберем поля «товар», «количество» и «стоимость».  

 
  
80 Сделаем запрос итоговым. Поэтому поле «товар», по которому будет 
производиться группировка, должно стоять в списке первым. По  полям 
«количество» и «стоимость» будем производить суммирование (рис. 
105).  
Рис. 105. Суммирование по полям «количество» и «товар»  
 
Сохраним запрос под именем «цена» и откроем его в режиме констру к-
тора.  Система присвоила двум вычисляемым полям имена «S um _ к о-
личество» и «Sum _ стоимость». Исправим эти названия на 
«сум_количество» и «сум_стоимость». Теперь добавим в запрос вычи с-
ляемое поле  
цена: IIf([сум_количество]>0;[ сум _стоимость]/[сум_количество];0).  
Логическая функция IIf имеет три аргумента. Первый  аргумент – логи-
ческое выражение. Если логическое выражение истинно, возвращается 
значение первого аргумента, иначе – второго. Мы использовали фун к-
цию « IIf» для того, чтобы заданное по ошибке нулевое значение поля 
«количество» не приводило к сбою в работе приложения.  
На вычисляемом поле «цена» щелкнем правой клавишей мыши и откр о-
ем свойства поля. В разделе свойств «Общие» установим фиксирова н-
ный формат поля. Этот формат отражает два знака после точки.  В стр о-
ке «Групповая операция» поля «цена» должно быть у становлено знач е-
ние «Выражение». Итак, мы построили запрос, который выдает средние 
взвешенные цены каждого товара, рассчитанные по соответствующему 
диапазону дат (рис. 106).   
 
9.3. Расчет наличия товаров.  Откроем запрос «расход Запрос» и доб а-
вим запрос «це на». Объединим таблицы по полю «товар» и добавим в 
запрос поле «цена» из запроса «цена». Теперь «расход Запрос» так же, 

 
  
81 как и «приход Запрос», содержит цены всех товаров, правда, средние. 
Этот запрос может являться источником данных для множества расч е-
тов по расходу товаров, аналогичных составленным ранее отчетам         
о приходе товаров.  
 
Рис. 106. Запрос «цена»  
Рис. 107. Форма для вызова отчета о наличии товаров  

 
  
82 Рис. 108. Запрос «приход_наличие»  
 
Теперь для расчета наличия на основании таблиц «приход » и «расход» 
составим два простых итоговых запроса, выдающих соответственно для 
каждого товара сумму всего прихода и сумму всего расхода. Оба запр о-
са содержат поля «товар» и «количество». Присвоим  запросам соотве т-
ственно имена «приход_наличие» и «расход_н аличие». Вместо присв о-
енных системой имен « Sum_количество» дадим в запросах суммарным 
количествам имена «приход» и «расход» соответственно  (рис. 109 ). То-
гда разность значений этих полей для соответствующего товара даст 
наличие товара на данный момент. Пост роим запрос для определения 
наличия товаров. Для этого создадим простой запрос, источником да н-
ных для которого будет «приход_наличие», и сохраним его под именем 
«наличие».  
Рис. 109. Запросы «приход_наличие» и «расход_наличие»  
 

 
  
83 Рис. 110. Запрос «приход» в режиме конструктора  
 
Фактически этот запрос будет просто копией своего источника и его 
можно было бы создать из запроса «приход_наличие», используя к о-
манды меню «Правка  Копировать» и «Правка  Вставить». Теперь 
откроем новый запрос в режиме конструктора,  нажмем правую клавишу 
мышки в области таблиц запроса и выберем пункт меню «Добавить та б-
лицу». В диалоговом окне перейдем на заставку «Запросы», добавим 
«расход_наличие» и закроем окно. Установим связь между запросами 
по полю «товар» (рис. 110). Мы уже зна ем, что параметры объединения 
можно получить, щелкнув дважды левой клавишей по линии, связ ы-
вающей таблицы или запросы. По умолчанию будут объединены только 
те записи, в которых связанные поля обеих таблиц совпадают. Это зн а-
чит, что если некоторый товар име ется в таблице «приход», но не фиг у-
рирует нигде в таблице «расход», то в запросе «наличие» он не будет 
отражен. Это нас совершенно не устраивает. Ведь товар в наличии им е-
ется! Поэтому мы должны изменить параметры объединения, уст ановив 
переключатель в поло жение  «Объединение всех записей из «пр и-
ход_наличие» и только тех записей из «расход_наличие», в которых 
связанные поля совпадают» (рис. 111).  Теперь можете убедиться, что 
любой товар, фигурирующий в приходе, но отсутствующий в расходе, 
будет отражен в зап росе «наличие». В соответствующей ячейке Вы ув и-
дите «пробел». Однако фактически поле получит значение « Null», кот о-
рое иначе называют «пустым значением». Это значение нельзя путать с 
нулем или с пустой строкой. Значение « Null» не равно никакому друг о-
му знач ению и поэтому не может участвовать в арифметических выр а-
жениях. Добавим в запрос «наличие» вычисляемое поле «н аличие» : 

 
  
84 наличие: [приход] -[расход].  
Рис. 111. Выбор параметров объединения  
 
В нашем случае это значит, что мы, вместо имеющегося в наличии к о-
личества товаров, получим опять поле со значением Null. Чтобы изб е-
жать подобных затруднений, воспользуемся функцией Nz(). Строка 
«Поле» в запросе примет вид : 
наличие: [ приход ]-Nz([расход]).  
Функция Nz() возвратит значение 0, если значение поля «расход» буде т 
Null (рис. 112) . Если мы хотим вместо нуля получать какое -либо другое 
значение, мы введем это значение в качестве второго параметра        
функции. 
Рис. 112. Запрос «наличие»  
 
Теперь осталось только создать отчет по наличию товаров. Вывод и п е-
чать отчето в по наличию товаров и средним ценам будет происходить 
из формы «Отчет о наличии товаров» (рис. 113).  
 

 
  
85 Рис. 113. Форма «Отчет о наличии товаров»  
 
9.4. Задание для самостоятельной работы. Теперь, когда создан з а-
прос по расходу, содержащий среднее взвешенн ое значение цены ка ж-
дого товара, Вам предлагается создать все отчеты по расходу, аналоги ч-
ные соответствующим отчетам по приходу. Это большая, но крайне п о-
лезная работа.  
 
 
10. Шаг десятый. Диспетчер кнопочных форм  
 
Мы разработали набор отдельных объектов Microsoft  Access . Но, пока, 
эти объекты существуют как бы сами по себе. Чтобы создать удобный 
для пользователя интерфейс с приложением, воспользуемся «Диспетч е-
ром кнопочных форм».  
 
10.1. Создание кнопочной формы.  В Access -97 диспетчер кнопочных 
форм вызывае тся командой меню «Сервис  Надстройки  Диспетчер 
кнопочных форм». В версиях, начиная с 2000 -й, – командой «Сервис  
Служебные программы  Диспетчер кнопочных форм». При первом 
вызове «Диспетчера» на экране появится окно с сообщением : «Не уд а-
ется найти кноп очную форму в этой базе данных. Создать кнопочную 
форму ?»  Подтвердим желание создать форму. На экране появится окно 
диспетчера кнопочных форм с одной страницей. Нажмем кнопку «И з-

 
  
86 менить» и введем вместо предложенного системой новое имя страницы 
кнопочной ф ормы  – «Склад» (рис. 114) и приступим к созданию 
кнопок.  
Рис. 114. Создание страницы кнопочной формы  
 
Нажмем «Создать». Первой кнопке поставим в соответствие текст 
«Приход», команду «Открытие формы в режиме редактирования» и 
форму «приход» (рис. 115).  
Рис. 115. Создание кнопок  
 
Точно так же создадим кнопки для открытия форм «расход», «о т-
чет_приход», «отчет_расход», «отчет_наличие». Закроем страницу кн о-
почной формы, а затем и само окно диспетчера. Проверим форму в р а-
боте. В разделе «Формы» окна базы дан ных появилась новая форма. Мы 
имеем право переименовать ее. Дадим кнопочной форме имя «Главная».  
 
10.2. Редактирование кнопочной формы.  Прежде, чем вносить ко р-
ректировки в кнопочной форме, войдем в раздел «Макросы», откроем 
«Макрос1» в режиме конструктора и создадим под именем «Выход из 
приложения» макрос, состоящий из одной -единственной макрокоманды 
«Выход». Еще раз откроем кнопочную форму и в первом диалоговом 
окне нажмем кнопку «Создать» и, таким образом, создадим новую стр а-
ницу под именем «Справочники».  С этой страницы в дальнейшем мы 
будем вызывать формы для редактирования данных о поставщиках, п о-
требителях и товарах. Нажмем кнопку «Изменить» и создадим кно пки 

 
  
87 для открытия в режиме редактирования форм «поставщики_лента», 
«потребители_лента» и «товары»,  а затем кнопку «Главное меню» для 
перехода к первой странице кнопочной формы «Склад».  
Рис. 116. Страница «Склад» кнопочной формы  
 
Закроем страницу, выделим страницу «Склад» и откроем ее для измен е-
ния. На этой странице создадим кнопку с надписью «Справочн ики» и 
поставим ей в соответствие команду «Переход к кнопочной форме», 
ниже выберем в меню страницу кнопочной формы «Справочники». 
Также создадим кнопку «Выход», которая будет выполнять запуск ма к-
роса, созданного нами под именем «Макрос1.выход из приложени я». 
При нажатии на эту кнопку будет осуществляться выход не тол ько из 
базы данных, но и из Microsoft  Access . Если теперь Вы войдете в раздел 
«Таблицы», то обнаружите новую таблицу, которая содержит всю и н-
формацию о кнопочной форме. Эту таблицу переименовыв ать нельзя и 
вообще лучше не трогать! Кнопочную форму можно редактировать в 
режиме конструктора, как и любую другую. В частности, Вы можете 
вставить рисунок, соответствующий назначению приложения. Провер ь-
те форму «Главная» в работе  (рис. 117). Теперь прило жение готово к 
эксплуатации.  
 
10.3. Последние штрихи.  Таким образом, мы завершили разработку 
приложения. Многое можно было сделать лучше. И тем не менее пр и-

 
  
88 ложение справляется со своими задачами – а это главное! Напоследок – 
несколько советов.  
Рис. 117. Кнопочная форма  
 
 В процессе разработки приложения мы не раз редактировали 
таблицы, запросы, формы и другие объекты базы. После корректировок 
файл с базой может содержать много ненужной информации. В частн о-
сти, записи, удаленные в таблице, физически продолж ают храниться в 
файле. Для удаления ненужной информации достаточно выбрать пункт 
меню «Сервис  Служебные программы  Сжать базу да нных».  
 Если Вы хотите, чтобы Ваше приложение работало не только на 
Вашем компьютере, то не следует создавать его в последней  версии Ac-
cess. Так, приложение, разработанное на Access -97, можно всегда пр е-
образовать для работы с Access -2000  и выше, но обратное преобразов а-
ние выполняется далеко не всегда. Для преобразования базы использ у-
ют команду меню «Сервис  Служебные программы  Прео бразовать 
базу данных». Прежде, чем перенести приложение на другой компь ю-
тер, следует войти в раздел «Модули» и откомпилировать все входящие 
в приложение модули.  

 
  
89  Окно базы данных необходимо для разработки приложения, но 
пользователю вовсе не обязател ьно его видеть. Кроме того, хотелось бы 
сразу после запуска приложения видеть главную кнопочную форму. Для 
этого выберем пункт меню «Сервис  Параметры запуска» и в о т-
крывшемся окне в поле под заголовком «Форма» установим имя «Гла в-
ная». Кроме того, погасим  все флажки, отвечающие за вывод на экран 
меню, панелей и прочих объектов. Теперь двойным щелчком по значку 
приложения будет запускаться нужная кнопочная (или другая заданная) 
форма. Если же Вы снова захотите войти в созданное приложение как 
разработчик, В ам достаточно войти в приложение, не отрывая левой р у-
ки от клавиши « Shift ». 
 Для защиты содержащейся в базе данных информации можно 
использовать пароль. Для этого надо открыть приложение в монопол ь-
ном режиме и командой меню «Сервис  Защита  Задать пароль базы 
данных» вызвать соответствующее диалоговое окно. Пароль решает 
проблему несанкционированного доступа, но не мешает пользователю 
просматривать и изменять созданные Вами формы и другие объекты в 
режиме конструктора. Если Вы хотите лишить пользователя эт ого уд о-
вольствия, Вам придется в разделе «Служебные программы» создать 
MDE -файл.  
 Если Вы разрабатываете приложение, предназначенное для эк с-
плуатации другими пользователями, есть резон хранить все таблицы в 
отдельной базе данных. Для установки связей с табл ицами, хранящим и-
ся в другой базе, используют команду меню «Файл  Внешние данные 
 Связь с таблицами». Это позволит Вам создавать новые версии пр и-
ложения, не трогая таблиц с данными. Кроме того, такой подход удобен 
при организации доступа к данным с нескол ьких ко мпьютеров.  
Теперь Вы имеете все необходимые начальные навыки  по созданию 
приложений Microsoft  Access . Остальное – дело опыта. Автору остается 
только пожелать Вам дальнейших успехов!  
 
 
  
90  
 
 
 
 
Список литературы  
 
1. Вейскас Дж.  Эффективная работа с Microsof t Access  97. СПб : 
«Питер», 2000.  
2. Винтер Рик . Microsoft  Access  97: Справочник. СПб : «Питер», 
1998.  
3. Дейт Крис . Введение в системы баз данных. М. : «Вильямс», 2001.  
4. Джонс Э., Джонс Дж . Access  97: К нига ответов. СПб : «Питер», 
1998.  
5. Камминг Стив . VBA  для «чай ников». М. : «Вильямс», 2002.  
6. Назаров С. В., Мельников П. П .  Программирование на MS VISU-
AL BASIC . М.: Финансы и статистика, 2002.  
 
 
  
91 Содержание  
 
      Предисловие ……………………………………………… 3  
  1. Шаг первый. Работа с таблицами и запросами ………… 5  
  2. Шаг второй. Формы и элементы управления ………….. 14  
  3. Шаг третий. Свойства форм …………………………….. 25  
  4. Шаг четвертый, или первый самостоятельный …… …... 37  
  5. Шаг пятый. Мастер подстановок ……………………….. 41  
  6. Шаг шестой. Отчеты ………………………………..…… 53  
  7. Шаг седьмой. Д оработка отчетов ………………………. 6 4 
  8. Шаг восьмой. Несколько итоговых запросов ………….. 7 4 
  9. Шаг девятый. Установка связей между таблицами …… 7 8 
10. Шаг десятый. Диспетчер кнопочных форм ………….… 8 5 
      Список литературы …………………………………..…. .. 90 
 
  
92 Учебное изда ние 
 
 
 
Белый  Евгений Константинович  
 
Десять шагов в Microsoft  Access  
 
Учебное пособие  
 
 
 
Редактор С. Л. Смирнова  
Компьютерный набор и верстка – Е. К. Белый  
Художник обложки – А. И. Морозов  
 
 
 
 
 
 
 
 
 
Подписано в печать 26.09.05. Формат 60 X84 1/16 . 
Бумага о фсетная. Печать офсетная. Уч. -изд. л. 5,7.  
Тираж 350 экз. Изд. № 87.  
 
 
Государственное образовательное учреждение  
высшего профессионального образования  
ПЕТРОЗАВОДСКИЙ  ГОСУДАРСТВЕННЫЙ  
УНИВЕРСИТЕТ  
 
Отпечатано в типографии Издательства ПетрГУ  
185910, г. Петр озаводск, пр. Ленина, 33