Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Диго С.М. Базы данных проектирование и использование.doc
Скачиваний:
723
Добавлен:
14.05.2016
Размер:
12.04 Mб
Скачать

6.2.15. Создание запроса с параметрами

Если приходится часто выполнять однотипный запрос на выбор­ку или перекрестный запрос, изменяя при этом значение какого-либо атрибута в условии отбора, то можно использовать запрос с парамет­рами. Запрос с параметрами не требует каждый раз вносить измене­ния в бланк запроса; вместо этого выводится приглашение пользова­телю ввести условия отбора.

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

Для каждого поля, которое предполагается использовать как па­раметр, в «Конструкторе запросов» необходимо ввести в ячейку строки «Условие отбора» текст приглашения, заключенный в квадратные скобки. Это приглашение будет выводиться при запуске запроса. Текст подсказки должен отличаться от имени поля, но может включать его.

На рис. 6.36 представлен параметрический запрос для получения списка сотрудников заданной кафедры. При запуске этого запроса на исполнение будет появляться окно с подсказкой (рис. 6.37), в которое нужно ввести требуемое значение параметра.

Для каждого поля можно задать не только одно конкретное значе­ние, но и диапазон значений. Так, например, для поля, в котором ото­бражаются даты, можно вывести приглашения «Введите начальную дату:» и «Введите конечную дату:» для определения диапазона отби­раемых значений. Для этого в соответствующую ячейку строки «Ус­ловие отбора» необходимо ввести выражение Between [Введите на­чальную дату:] And [Введите конечную дату:].

В качестве параметров может быть использовано не одно, а не­сколько полей. В этом случае для каждого поля, которое предпола­гается использовать как параметр, в ячейку строки «Условие отбо­ра» вводится текст приглашения, заключенный в квадратные скоб­ки. Эти приглашения будут последовательно выводиться при запуске запроса.

6.2.16. Корректирующие запросы

Общая характеристика. К корректирующим запросам относят­ся запросы на обновление (Update) и на удаление (Delete) записей, а также добавление (Append, Insert)2 записей из одной таблицы или нескольких связанных таблиц в конец другой таблицы. В документа­ции по Access к типу «запросов на изменение» отнесены не только перечисленные выше запросы, но еще и «запрос на создание табли­цы». Последний запрос все-таки отличается от названных ранее: пер­вый круг запросов меняет содержание существующих таблиц, а после­дний - создает новую таблицу, т.е. фактически меняет имеющуюся структуру базы данных. Поэтому «запрос на создание таблицы» вы­делен в отдельную группу.

Корректирующие запросы на обновление и удаление могут изме­нять как все записи таблицы, так и определенное их подмножество -это будет зависеть от условия отбора. Так, например, запрос, приве­денный на рис. 6.38, увеличит зарплату всех сотрудников на 30% (так как условие отбора не задано). Запрос, изображенный на рис. 6.39, изменит зарплату одного конкретного сотрудника (см. условие отбора данного запроса) и установит для нее значение, указанное в запросе.

При выполнении корректирующих запросов система осуществ­ляет контроль ограничений целостности. Так, например, если при описании таблицы было задано ограничение на максимально допус­тимое значение поля «Оклад», то при выполнении запроса (см. рис. 6.38) в случае нарушения ограничения может быть выдано сообще­ние, подобное приведенному на рис. 6.40. Если выбрать вариант «Да», то для записей, нарушающих ограничение на значение, корректиров­ка вообще выполнена не будет. В нашем примере такой выбор будет неправильным, поскольку в этом случае у одних сотрудников зарпла­та будет повышена, а у других - нет. Причем потом разобраться, у кого она была повышена, а у кого - нет, будет практически невозмож­но. В рассматриваемой ситуации следует отказаться от выполнения запроса, скорректировать при необходимости ограничение на значе­ние и только после этого выполнить запрос.

Для создания корректирующего запроса надо в режиме Конст­руктор запроса выбрать соответствующую позицию в меню Запрос (либо нажать стрелку рядом с кнопкой Тип запроса на панели инст­рументов). В приведенных выше примерах выбиралась позиция меню Обновление.

Чтобы просмотреть обновляемые записи перед выполнением зап­роса, можно щелкнуть по кнопке Вид на панели инструментов. Вы­водимый список будет содержать старые значения полей отобранных в запросе записей.

Внимание! Следует быть очень внимательным перед вы­полнением корректирующих запросов (недаром в списке зап­росов перед их именем стоит восклицательный знак), так как каждый их запуск на выполнение изменяет содержимое таб­лиц и отменить результат выполнения нельзя. В связи с этим рекомендуется сохранять резервные копии изменяемых таблиц. Это позволит восстановить ошибочно скорректированные записи.

Запрос на обновление. Для создания запроса на обновление не­обходимо сначала в режиме Конструктор выбрать таблицу(ы), поля которой будут корректироваться, а затем изменить тип запроса, выб­рав позицию Обновление в меню Запрос (либо нажать стрелку рядом с кнопкой Тип запроса на панели инструментов и выбрать со­ответствующий тип). При этом вид бланка запроса изменится по срав­нению с запросом на выборку: в бланке отсутствуют строки «Сорти­ровка» и «Вывод на экран», но зато появилась строка «Обновление». В бланк запроса включаются те поля, значения которых будут изменяться. В строке «Обновление» соответствующего поля записывается его новое значение или выражение для его вычисления. При создании выражения можно воспользоваться построителем. Если обновление касается не всех записей таблицы, а только некоторых из них, то нужно обычным образом задать условия отбора. С целью убедиться, что усло­вия отбора заданы верно, рекомендуется сначала посмотреть результа­ты отбора. Это можно сделать двумя способами:

  1. просмотреть запрос в режиме таблицы;

  2. выполнить запрос как запрос на выборку.

«Открытие» запроса на обновление означает изменение значений в базе данных. Каждое «Открытие» запроса на обновление будет оз­начать обновление уже обновленных данных.

Запрос на удаление. Его используют для удаления группы запи­сей, отбираемых с помощью указанных пользователем условий отбо­ра. Сначала необходимо задать условие отбора. Перед выполнением запроса на удаление рекомендуется предварительно просмотреть ре­зультаты отбора.

Для создания запроса на удаление следует в режиме Конструк­тор запроса выбрать соответствующую позицию «Удаление» в меню Запрос (либо нажать стрелку рядом с кнопкой Тип запроса на пане­ли инструментов).

На рис. 6.41 изображен запрос, приводящий к удалению из табли­цы «Сотрудник» записей, соответствующих стажерам.

Внимание! Если в запросе на удаление не указать условие отбора, то будут удалены все записи. В некоторых случаях зап­рос-удаление приводит к удалению записей в таблицах, не вклю­ченных в запрос. Это случается, если в запрос включена таб­лица, находящаяся на стороне «один» отношения «один ко многим», а целостность данных обеспечивается параметром «Каскадное удаление». При удалении записей из этой таблицы будут также удалены связанные записи из таблицы, находящейся на стороне «многие».

В многотабличном запросе в бланк запроса QBE необходимо переместить символ звездочки (*) для каждой таблицы, из которой будут удаляться записи, и поля, используемые для задания условий отбора.

Запрос на добавление. Он добавляет группу записей из одной или нескольких таблиц (таблиц-источников) в конец другой таблицы (результатной таблицы). Для задания запроса такого типа следует сна­чала создать запрос, содержащий таблицу (таблицы), записи из кото­рой необходимо добавить в другую таблицу. Затем в режиме Конст­руктор запроса нужно нажать стрелку рядом с кнопкой Тип запроса на панели инструментов и выбрать команду Добавление (либо выб­рать соответствующую позицию в меню Запросы). На экране появится диалоговое окно Добавление (рис. 6.42). В поле «Имя таблицы» сле­дует ввести имя таблицы, в которую необходимо добавить записи.

Таблица, в которую осуществляется добавление, может быть как в той же базе данных, так и в другой, причем это не обязательно дол­жна быть база данных Access (это может быть Microsoft FoxPro, Paradox или dBASE, а также база данных SQL).

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

Если все поля таблицы-источника должны быть перенесены в целевую таблицу и поля в таблице-источнике и целевой таблице име­ют одинаковые имена, то можно просто переместить с помощью мыши символ «звездочка» (*) в бланк запроса. Однако при работе с репли­кой базы данных добавлять придется все поля. Кроме того, при ис­пользовании символа «звездочка» (*), даже если структуры обеих таб­лиц полностью совпадают, могут возникнуть проблемы с ключами (если ключевое поле имеет тип «Счетчик», то для автоматического добавления значений счетчика не следует при создании запроса пе­ремещать поле счетчика в бланк запроса).

Если в обеих таблицах выделенные поля имеют одинаковые име­на, соответствующие имена автоматически вводятся в строку «До­бавление». Если имена полей двух таблиц отличаются друг от друга, в строку «Добавление» необходимо ввести имя поля целевой табли­цы, которое соответствует полю таблицы-источника.

Следует быть внимательным при создании запроса на добавле­ние записей в таблицу. Все поля целевой таблицы, которые имеют либо свойство «Обязательное поле», либо заданные «условия на зна­чение», должны быть включены в состав добавляемых полей, иначе ни одна запись добавлена не будет по причине нарушения ограниче­ний целостности.