Работа с таблицей в режиме заполнения

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

В процессе добавления новых записей курсор автоматически перемещается в следующую строку. Введенная запись сохраняется автоматически, как только ее покидает курсор, то есть для сохранения записи достаточно просто перейти на соседнюю. Это позволяет избежать промежуточного сохранения таблицы и при любом сбое будет потеряна только редактируемая запись. Сохранить принудительно запись можно, нажав Shift+Enter в любом месте записи либо просто Enter в конце записи. Отменить сделанные изменения или вставку новой записи можно нажатием клавиши Esc. Переход по полям от первого к последнему в записи и далее в начало следующей записи производится с помощью клавиши Tab.

Для облегчения ввода новых записей Access предоставляет несколько «горячих» комбинаций клавишей:

Ctrl + ; вводит текущую дату

Ctrl + : вводит текущее время

Ctrl + Alt + Space вводит значение поля, установленного по умолчанию

Ctrl + ’ вводит значение того же поля из предыдущей записи

Ctrl + Enter вставляет символ “возврат каретки” в поле Мемо либо в текстовое поле

Ctrl + + добавляет новую запись

Ctrl + - удаляет текущую запись.

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

Старшие версии Access имеют расширенные средства копирования и импорта данных из сторонних источников информации: БД других форматов, текст, электронные таблицы, HTML и XML документы и т.д. Кроме импорта Access позволяет также присоединять таблицы из других БД, находящихся даже на удаленных компьютерах. Оба приложения могут работать с такой таблицей одновременно. Для Access присоединение таблиц – это единственный способ создания распределенной БД, работающей в режиме «файл-сервер» с реализацией полноценного многопользовательского доступа к одним и тем же данным. При присоединении таблицы ее структура и данные не копируются, в Access хранится лишь информация о связи. С присоединенной таблицей можно работать точно так же, как и со своей таблицей. Ограничением является запрет на изменение ее структуры, хотя можно менять название таблицы (задать псевдоним присоединенной таблицы) и ряд свойств полей, определяющих способ ввода и отображения данных в Access.

Для поиска информации в таблице можно воспользоваться командой Поиск, а также применить сортировку и фильтрацию. Команда Поиск позволяет искать как в определенном поле, так и по всем полям сразу. Сортировку в Access можно производить по всем полям (кроме Объект OLE) независимо от того, был ли определен заранее соответствующий индекс. Фильтр является логическим выражением. Вывод тех записей таблицы, которые не удовлетворяют этому условию, подавляется, хотя доступ к ним через запросы, макросы или программы сохраняется. Синтаксис записи условия фильтра подобен синтаксису определения условия на значение, кроме необходимости явного определения имен полей, по которым производится фильтрация. Объединяя такие условия с помощью логических операций, можно создавать сложные фильтры. Фактически, фильтр – это условие отбора в запросах SQL, то есть та его часть, которая записывается после оператора WHERE. Фильтры в Access бывают четырех типов:

1. Фильтр по выделенному. Для его применения достаточно выделить содержимое некоторого поля, или даже его часть, и вызвать соответствующую команду. Производит фильтрацию только по одному полю, сравнивая значения данного поля всех записей с выделенной. Допустимо также исключить выделенное (в старших версиях Access);

2. Фильтр для. Применение его подобно предыдущему, только отсутствует необходимость вначале искать и выделять требуемое значение фильтрации. Достаточно просто ввести условие и применить команду (доступно через локальное меню). Также производит фильтрацию только по одному полю;

3. Фильтр по форме. Позволяет визуально создавать сложные фильтры, состоящие из нескольких условий, объединенных логическими операциями AND или OR. Производит фильтрацию по нескольким полям одновременно;

4. Расширенный фильтр. Позволяет визуально создавать фильтры произвольной сложности. Для его создания применяется язык QBE, который будет рассмотрен в следующем параграфе.

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

Запросы

Запросы в Access можно создавать как с помощью визуальных средств – QBE (Query By Example – запрос по образцу) и Мастера создания запросов, так и с помощью SQL (Structured Query Language – структурированный язык запросов). В этом параграфе мы более подробно рассмотрим QBE (режим конструктора). QBE основан на реляционном исчислении доменов и представляет собой запросную форму в виде таблицы. Окно QBE состоит из панели задания таблиц и таблицы спецификации запроса (Рис. 7.4). Перед созданием запроса в QBE появляется окно выбора имеющихся таблиц и запросов. Для создания запроса необходимо выбрать по крайней мере одну таблицу (следует выбирать только те таблицы, из которых необходимо извлекать данные, и те, которые требуются для установления связей). Если между таблицами были определены связи в окне Схема данных, то они автоматически будут установлены и в запросе. В противном случае их можно установить аналогичным способом с помощью перетягивания требуемого поля из одной таблицы в другую.

Рис. 7.4. Окно QBE

В верхней строке спецификации запроса отображаются выбранные поля. Для выбора поля (эквивалентно добавлению названия поля в список полей во фразе SELECT в SQL) достаточно перетянуть его с помощью мыши из таблицы в требуемый столбец спецификации, представляющий описание одного поля запроса, или выбрать его из выпадающего списка. Для полей можно дополнительно установить порядок сортировки и вывод на экран. Перетянув выбранные поля в область спецификации запроса, мы таким образом определим запрос. Если требуются все поля некоторой таблицы, то можно перетянуть первую строку этой таблицы с изображением *, означающим “Все поля”. Остается только сохранить запрос и запустить его на выполнение либо с помощью кнопки , либо просто открыв в режиме таблица. Поля в таблице, являющейся результатом выполнения запроса, отображаются в том порядке, в котором они указаны в спецификации запроса.

С помощью такого запроса мы выберем указанные поля для всех записей. Чтобы ограничить число записей, можно воспользоваться условием отбора. Правила записи условий отбора (и список доступных функций) практически идентичны правилам задания условий на значения в таблице. Условие отбора можно задать для каждого поля, входящего в запрос. При этом все условия отбора объединяются по логической операции И. Для реализации условия отбора по ИЛИ служат нижние строки спецификации запроса, как показано на Рис. 7.4. Если поле включается в запрос только для того, чтобы указать условие отбора, то вывод его на экран можно отключить, сняв пометку с флажка в строке Вывод на экран.

В поле спецификации запроса можно определять также вычисляемые поля. Правила записи вычисляемых полей совпадают с определенными в SQL. Отличается лишь задание альтернативного имени. Альтернативное имя задается перед вычисляемым полем и отделяется двоеточием, например: ПолноеИмя: [Фамилия] &” “& [Имя] &” “& [Отчество]. Это поле будет отображаться наряду с другими. Для облегчения ввода длинных выражений можно увеличить область ввода нажатием Shift + F2. Для проведения внешнего объединения в режиме конструктора необходимо вызвать редактор параметров объединения (с помощью двойного нажатия клавиши мыши на линии связи между таблицами) и выбрать необходимый тип объединения. На связи появится стрелка, направленная к таблице со стороны ∞ (для левого объединения).

При открытии запроса в режиме конструктора в меню появляется дополнительная группа команд меню Запрос, позволяющая создавать различные типы запросов. Можно визуально создавать все запросы действий, перекрестный запрос и некоторые виды запросов SQL. Дополнительно из этого меню можно открыть окно задания типов параметров (аналог инструкции SQL PARAMETERS). Методика визуального создания запросов действия и перекрестного запроса в QBE следующая. Вначале необходимо создать запрос выборки, отбирающий необходимые данные (полезно проверить его на выполнение и убедится, что вы выбираете действительно нужные записи), затем с помощью соответствующей команды меню перевести его в нужный вид. Поле спецификации запросов будет дополнено соответствующей строкой (Обновление, Удаление и Перекрестная таблица). Остается задать необходимые значения и запустить запрос на выполнение.

Запрос с группировкой можно создать по тому же сценарию. Вначале создается запрос выборки требуемых данных, затем вызывается команда Групповые операции (доступна из локального меню поля спецификации запроса и общего меню). Эта команда дополнит поле спецификации строкой Групповые операции. В этой строке автоматически устанавливается функция Группировка (GroupBy). Кроме функции группировки в этой строке для полей запроса можно задать вычисление групповых функций или задать условие отбора. При задании группировки необходимо помнить о том, что в запросе с группировкой могут участвовать только те поля, которые принимают единственное значение для группы, то есть сами поля, для которых определена функция Группировка, выражения с ними или некоторые групповые функции над другими полями, возвращающими единственное значение для группы.

Для полей запроса можно поменять некоторые свойства, определенные для таблицы. Дополнительно в свойствах самого запроса можно задать выбор только уникальных значений (предикат DISTINCT в SQL), уникальных строк (предикат DISTINCTROW в SQL), установить блокировку записей, фильтр, тип набора записей (определяет возможность редактирования запроса) и многое другое. Внешне таблица, являющаяся результатом выполнения запроса, ничем не отличается от других таблиц БД. С ней можно работать точно так же, как и с обычной таблицей, то есть просматривать данные, производить поиск, сортировку, фильтрацию, и даже изменять данные. Изменения будут немедленно отражены и в соответствующей таблице. Разумеется, не все запросы являются редактируемыми. Можно редактировать только однотабличные и некоторые двухтабличные без предикатов, группировки и внешнего объединения. Узнать, является ли запрос редактируемым, можно по наличию последней пустой строки, обозначенной с помощью * в селекторном столбце.

Запрос в Access можно сохранить в виде фильтра, и в этом случае его действие не будет отличаться от расширенного фильтра для таблицы. Хотя запросы и можно сохранять в виде фильтров, между ними имеются существенные различия:

1. Фильтры не позволяют объединять данные из нескольких таблиц, то есть фильтр определяется только для отдельной таблицы;

2. Фильтры подавляют вывод всей строки, а не отдельных полей;

3. После применения фильтра возможность доступа к не вошедшим в выходной набор записям сохраняется, а после применения запроса – нет.

Формы

Формы являются средством ввода-вывода данных и организации интерфейса в MS Access. С помощью форм можно:

1. выводить и редактировать данные;

2. вводить данные;

3. управлять ходом выполнения приложения;

4. выводить сообщения;

5. печатать информацию.

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

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

В режиме конструктора (Рис. 7.5) форма имеет область заголовка, область данных и область примечаний. Размеры этих областей можно легко менять. Обычно информация, выводимая из базовой таблицы либо запроса, размещается в области данных (информация, представленная в этой области, меняется от записи к записи). Информацию, которая не меняется от записи к записи, лучше всего разместить в области заголовка либо примечания. В этих областях можно выводить реквизиты фирмы, итоговые значения, а также те элементы, которые относятся ко всем записям базового набора, к примеру, кнопки и другие элементы управления ходом выполнения приложения. Например, в область заголовка можно поместить список выбора товара, а в области данных – поля, описывающие товар. Тогда после выбора товара из списка в области данных появится его описание.

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

Access использует те элементы управления, которые Windows предоставляет для своих приложений. Условно все элементы управления можно разбить на три группы: присоединенные, свободные и вычисляемые. Присоединенные элементы управления связаны с полями базового набора данных и, соответственно, отображают и позволяют редактировать данные, содержащиеся в связанных с ними полях таблицы. Свободные элементы служат для разнообразия интерфейса и ввода/вывода некоторой не содержащейся в базовом наборе информации. Вычисляемые элементы позволяют вычислять свои значения на основе значений других элементов управления либо полей базового набора. При открытии формы в режиме конструктора (рис. 7.5) на экран выводится Панель элементов, на которой размещены все доступные элементы управления. Рассмотрим их подробнее:

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

Поле применяется для ввода/вывода и редактирования данных. Позволяет реализовать прямой доступ к данным после привязки к соответствующему полю таблицы с помощью свойства Данные. Вместе с надписью является основным элементом управления.

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

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

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

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

Кнопка применяется для выполнения некоторых действий типа закрытия формы. Привязав к событию Нажатие кнопки макрос или процедуру VBA, можно выполнить ряд действий, определенных в макросе (процедуре).

Рисунок , Свободная рамка объекта и Присоединенная рамка объекта

применяются для отображения графических объектов и других объектов, поддерживающих интерфейс OLE. Отличие состоит в том, что Рисунок предназначен для встраивания статических изображений, Свободная рамка объекта – для отображения или встраивания не связанного с таблицей объекта OLE, а Присоединенная рамка объекта – для отображения содержимого поля типа Поле объекта OLE.

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

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

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

Линия и Прямоугольник применяются для оформления внешнего вида форм.

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

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

Формы могут быть следующих видов: простая, составная, ленточная, многостраничная и диалоговая. Простой называется форма, которая основана на данных одной таблицы или запроса. Если число полей в базовой таблице столь велико, что не помещается на весь экран, то можно создать многостраничную форму (многостраничную форму можно создать как с помощью элемента управления Разрыв страницы, так и с помощью элемента управления Вкладка). Если же, наоборот, число полей невелико, то можно создать ленточную форму, где записи выводятся так же, как и в таблице, но для каждой записи отводится больше места для удобного представления полей. Любую форму, основанную на некотором наборе записей, можно также просматривать и в виде таблицы. Диалоговая форма обычно применяется для создания диалоговых окон, а не для вывода и редактирования данных, то есть для задания некоторых параметров, действий и т.д. В то же время любую форму можно сделать модальной (монопольной). Тогда доступ к другим окнам будет блокирован до закрытия данной формы.

Для одновременного отображения и редактирования записей из двух таблиц, связанных отношением 1 - ∞, наиболее удобной является составная форма (master-detail form). Тогда записи из таблицы со стороны 1 будут отображаться в основной форме, а из таблицы со стороны ∞, имеющие совпадающие значения в связанных полях, – в подчиненной. Подчиненная форма располагается внутри основной (является элементом управления Подчиненная форма для основной формы) и обычно представлена в виде таблицы или ленточной формы. Создать такую форму можно даже автоматически с помощью автоформ на основе запроса, объединяющего данные из главной и подчиненной таблиц. Пример составной формы представлен на 7.6. Такая форма позволяет просматривать и обновлять информацию о клиенте и обо всех сделанных им заказах. В составной форме значения внешнего ключа подчиненной таблицы (в нашем случае Код клиента таблицы Заказы) назначаются автоматически при добавлении записей. Естественно, вначале производится ввод нового клиента, а затем его заказов.

Рис. 7.6. Составная форма

Для просмотра данных в таблице со стороны ∞ вместо подчиненной формы можно также использовать список. С другой стороны, если есть желание в форме, основанной на подчиненной таблице, вместо значений внешних полей (зачастую неинформативных табельных номеров) видеть соответствующие им значения некоторых других полей базовой таблицы, то наилучшим средством является применение комбинированных списков. В этом случае комбинированный список будет отображать заданные поля соответствующей записи со стороны 1, а подставлять вместо них значение первичного ключа. Например, поле Наименование товара в форме, представленной на рис. 7.6, является комбинированным списком, подставляющим названия товаров из поля Товар таблицы Товары. В противном случае в этом поле отображались бы табельные номера товаров.

Вычисления в формах можно производить не только на основе значений других элементов управления или полей базового набора, но и на основе данных, хранящихся в других таблицах. Можно также рассчитывать итоговые значения по всему множеству данных из базового набора или других запросов и таблиц, либо по его подмножеству, определяемому логическим выражением. Для выполнения вычислений необходимо поставить знак равенства в свойстве Данные и ввести выражение, например =[Цена]*[Количество]. Операндами выражения могут служить названия полей базового набора (все поля базового набора, а не только те, которые включены в форму) или названия элементов управления, то есть предыдущий пример может быть записан и следующим образом = Поле_Цена*Поле_Количество, где Поле_Цена, Поле_Количество – названия соответствующих элементов управления. Итоговые вычисления производятся с помощью агрегатных функций, имеющих тот же смысл и написание, как в запросах. Аргументами их могут быть только имена полей. Например, = Sum([Цена]*[Количество]) или = Count([Код заказа]). Размещать такие поля следует в области примечаний формы. Тогда множеством данных будут все записи, отображаемые в форме. Если же поместить расчет итогов в область примечаний подчиненной формы, то можно подсчитать общую сумму и количество товаров, заказанных каждым клиентом.

Итоговые функции по подмножеству позволяют производить вычисления или просто выводить в форме данные, не принадлежащие базовому набору. Аргументами этих функций являются название поля, по которому производится вычисление, название таблицы или запроса и условие отбора записей, имеющее тот же синтаксис, что и условие отбора в запросах. Функция DLookup используется обычно для вывода значения поля, не принадлежащего базовому набору. Например, в форме Товары можно вывести сведения о поставщике, хранящиеся в связанной отношением ∞ – 1 таблице Поставщики: =DLookUp("[Должность]";"[Поставщики]";"[КодПоставщика]=" & [КодПоставщика]). Здесь условие отбора "[КодПоставщика]=" & [КодПоставщика] реализовано с помощью конкатенации условия [КодПоставщика]= (где КодПоставщика – это поле таблицы Поставщики) и значения, возвращаемого одноименным элементом управления формы Товары. Функции DCount, DSum позволяют организовать вычисления общей суммы и количества товаров, купленных клиентом: =DCount("[Код заказа]";"[Заказы]";"[Код клиента]=" & [КодКлиента]) и =DSum("[Цена]*[Количество]";"[Заказы]";"[Код клиента]=" & [КодКлиента]). С помощью функции DMax можно организовать счетчик записей: =DMax("[Код заказа]";"[Заказы]") + 1.

Форма, каждый раздел формы и все элементы управления имеют свой список свойств. С помощью этого списка можно управлять выводом данных на экран, форматом их представления, обработкой событий и многим другим. Список свойств для каждого типа объектов различен. Некоторые из них могут иметь до 80 различных свойств (рис. 7.7).

Рис. 7.7. Свойства элемента управления “Поле”

Для удобства просмотра свойства разделены на группы: свойства данных, свойства макета, свойства событий и другие (не относящиеся к вышеперечисленным группам). Научившись работать с ними, можно создавать очень сложные формы. Отметим, что все эти свойства доступны для макросов и программ, написанных на VBA. Таким образом, меняя значения соответствующих свойств элементов управления (и свойств самих форм), можно управлять формами и представлением в них данных. Технология программирования в Access предполагает овладение техникой обработки событий и манипулирования свойствами объектов.

В списке свойств наиболее значимыми являются имя элемента и источник данных. По имени элемента вы можете ссылаться на него даже из другой формы (при условии, что форма будет открыта), а источник данных предопределяет то, что же появится в этом элементе (если, конечно, он предназначен для отображения данных). В качестве источника данных можно задать поле базовой таблицы, инструкцию SQL, которая найдет необходимые данные даже в некоторой другой базе данных, либо задать вычисляемое выражение (предполагается обязательное наличие знака равенства в начале выражения, например, =Цена*Количество). Для элемента управления Поле со списком и Список дополнительно нужно определить источник строк для списка и его тип. Источником строк может быть список фиксированных значений, таблица или запрос. В последнем случае источником строк обычно является инструкция SQL. Если источник строк имеет несколько столбцов, то еще необходимо указать связанный столбец, то есть тот столбец, откуда будут браться значения для присоединенного поля.

Для элементов управления Поле, Поле со списком и Список имеются три свойства, определяющие способ вывода данных в форме. К ним относятся: Формат поля, Число десятичных знаков и Маска ввода. Access копирует эти свойства из полей базовой таблицы, но при желании их можно переустановить.

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

1. Источник данных – определяет базовую таблицу/запрос для формы;

2. Фильтр - позволяет задать фильтр для базовой таблицы/запроса формы;

3. Порядок сортировки – указывает сортировку базовой таблицы/запроса;

4. Разрешить изменение – определяет, можно ли изменять сохраненные записи через форму

5. Разрешить удаление – определяет, можно ли удалять записи через форму;

6. Разрешить добавление определяет, можно ли добавлять записи через форму;

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

8. Тип набора записей определяет тип набора записей. Можно выбрать следующие значения:

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

- Динамический набор (Несогл.) – допускается редактирование всех таблиц и элементов управления, присоединенных к их полям,

- Статический набор – не допускаются изменения данных в таблицах и в присоединенных к их полям элементах управления;

9. Блокировка записей определяет способы блокировки записей и их реализацию при попытке двух пользователей одновременно изменить одну и ту же запись. Можно выбрать следующие значения:

- Отсутствует – (Значение по умолчанию.) Применяется в формах, которые могут изменяться одновременно несколькими пользователями. Такую блокировку называют также «нежесткой». Если два пользователя пытаются сохранить изменения одной и той же записи, то Access выведет соответствующее сообщение пользователю, который предпринял такую попытку вторым. Ему предоставляются следующие возможности: отменить внесенные изменения, скопировать запись в буфер обмена или переписать запись, измененную другим пользователем. Данное значение обычно применяется для форм, которые доступны только для чтения, или для форм в базах данных, рассчитанных на одного пользователя. Этот режим используется также в сетевых базах данных, чтобы разрешить нескольким пользователям одновременно вносить изменения в одну и ту же запись.

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

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

Отчеты

Отчеты являются наилучшим средством для предоставления данных в виде печатного документа и сочетают в себе возможности форматированного вывода данных с группированным представлением большого количества записей из нескольких таблиц. Так как число записей и число полей может быть велико, то отчеты могут выводится на нескольких страницах. Кроме вывода самих данных отчеты позволяют производить разнообразные вычисления и расчет итоговых значений. Отчет является автоматически генерируемым законченным документом и его нельзя редактировать. Единственно, что возможно, так это просмотреть его в режиме предварительного просмотра перед печатью либо внедрить в состав другого документа, например, в документ Word или Excel.

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

§ имеют широкие возможности для форматирования текста;

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

§ можно производить сложные вычисления не только внутри некоторой группы, но и по нескольким группам одновременно;

§ позволяют легко создать такие документы, как счета, почтовые наклейки и т.д.

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

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

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

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

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

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

Так как отчеты содержат большое количество записей, то для удобства просмотра они должны быть определенным образом сгруппированы и упорядочены. Если отчет основан на запросе, то он игнорирует все условия сортировки и группировки, заданные для него. Группировка и сортировка данных задается прямо в отчете с помощью окна Сортировка и группировка (7.8).

Рис. 7.8. Окно Сортировка и группировка

Вызвать появление этого окна можно с помощью кнопки или соответствующей команды меню. В данном окне можно определить до 10 полей или выражений для группировки данных (то есть группировка может осуществляться по значению выражения, например, = [Фамилия] & " " & [Имя] & " " & [Отчество]). Первое поле или выражение определяет основную группу, последующие – подгруппы внутри группы предыдущего уровня. В этом же окне можно включить либо выключить вывод областей заголовка и примечания для каждой из групп. Дополнительно можно установить еще три свойства: Группировка, Интервал и Не разрывать. Свойство Не разрывать устанавливается в Полная группа, если есть желание, чтобы записи, относящиеся к одной группе, размещались на одной странице. Свойство Группировка и Интервал связаны между собой и позволяют выделять данные в новую группу не по полному изменению значения поля, участвовавшего в группировке, а по смене, скажем, его части, или когда значения поля попадают в некоторый диапазон. Вид и задаваемый размер диапазона зависят от типа поля. Для текстовых значений можно указать, чтобы Access начинал новую группу при изменении первого или нескольких начальных символов значения поля, а для числовых или типа Дата/время задать интервал значений. Для задания количества первых символов или интервала значений используется свойство Интервал. То есть для численных данных свойство Группировка устанавливается в Интервал, а в свойстве Интервал задается интервал значений. Например, 10. Тогда будут формироваться следующие группы: от -20 до –11, от -10 до –1, от 0 до 9, от 10 до 20 и т.д. Для поля типа Дата/время свойство Группировка может принимать следующие значения: По годам, По кварталам, По месяцам, По неделям, По часам, и По минуте. Тогда значение свойства Интервал будет определять количество соответственно лет, кварталов, месяцев и т.д. в каждой группе.

Создание отчетов в режиме конструктора почти ничем не отличается от создания форм. Требуется только установить сортировку и группировку, включить области заголовков и примечаний и разместить требуемые поля (или другие элементы управления) в соответствующих областях отчета. При этом необходимо помнить, что имеет смысл использовать только те элементы управления, которые можно вывести на печать, и что вывод данных будет определяться областью размещения соответствующих элементов управления. Например, одно и тоже вычисляемое поле может выполнять совершенно разные действия. Поле со свойством Данные =Count([Код заказа]) будет подсчитывать количество заказов для каждого клиента, если оно помещено в область заголовка или примечаний для группы Клиенты, и общее количество заказов, если будет помещено в области заголовка/примечаний всего отчета.

При создании отчета важно не только определить данные, которые должны быть представлены в отчете, но и нужным образом оформить отчет как документ: правильно разбить его на страницы, пронумеровать страницы, выделить наиболее важные данные. Если не все нужные данные помещаются на одной странице, Access позволяет вставить принудительный разрыв страницы. Текущая дата вводится с помощью функций Now() или Date(). Номер страницы представляется с помощью системных переменных Page и Pages. Например: "Страница" & [Page] & "из" & [Pages]. В результате получите: Страница 5 из 25. Вставить вывод даты и номера страницы можно также с помощью команд меню.

Для вычисления промежуточных (по группе) итогов необходимо разместить вычисляемое несвязанное поле в области примечаний группы. Например, Sum([Количество])*[Цена]) в качестве значения “данные” для вычисляемого поля. То же поле, но размещенное в области примечаний отчета, уже будет вычислять общий итог по всему отчету. Для вычисляемых полей в отчетах появляется новое интересное свойство – Сумма с накоплением. Если поле размещено в области данных и это свойство установлено в Для группы, то Access будет суммировать данные в каждой записи и сбрасывать итоговое значение в 0 после начала каждой группы. Если поле размещено в области примечаний группы, Access будет накапливать итоговые суммы для всех групп этого уровня до тех пор, пока не встретится уровень группировки более высокого уровня. Таким образом, можно подсчитать количество купленных товаров по категориям и т.д. Если же свойство Сумма с накоплением установлено в Для всего, то Access будет суммировать данные по всем записям до конца отчета. Примером использования свойства Сумма с накоплением может служить нумерация строк в отчете. Если разместить несвязанное поле в области данных отчета и задать свойство Данные = 1, а свойство Сумма с накоплением в Для группы, то можно пронумеровать заказы в пределах группы. Если установить свойство Сумма с накоплением в Для всего, то можно установить сквозную нумерацию.

Иногда требуется, чтобы определенные поля выводились в отчете в зависимости от их значения или от значения других элементов в отчете. В Access существует функция IIF(условие; выр 1; выр 2), возвращающая в зависимости от выполнения условия значения либо выр 1, либо выр 2. Далее, разумно не выводить поля с пустым или нулевым значением К тому же желательно, чтобы остальные поля при этом перемещались вверх, чтобы в отчете не оставалось пустого места. Для того чтобы поле “исчезало”, когда его значение окажется пустой строкой, необходимо установить свойство Сжатие в Да. Свойство Не выводить повторы дополнительно позволяет не выводить элемент управления отчета, если значение этого элемента управления совпадает с его значением в предыдущей записи.

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

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

Рис.7.9. Отчет в режиме конструктора

Тот же отчет в режиме предварительного просмотра будет выглядеть следующим образом (рис. 7.10)

Рис. 7.10. Отчет в режиме предварительного просмотра