3. Каждая отдельная операция (допустим, переход от одного элемента управления к другому) может повлечь за собой ряд событий, возникающих в определенной последовательности. Такие последовательности событий для разных ситуаций четко определены и подробно рассмотрены в этой главе. Их очень важно знать, поскольку от порядка событий зависят условия и очередность выполнения макросов и процедур обработки событий.
4. В этой главе были рассмотрены конкретные примеры использования макросов при обработке событий. Диапазон возможностей макросов в данном случае очень широк: от вспомогательных операций, расширяющих удобства для пользователя (например, автоматический перевод курсора в новое поле при вводе данных), до серьезных функциональных задач (например, формирование запроса на создание сложной выборки из базы данных, включающей записи с различной структурой и составом данных).
Глава 11 Программирование на языке SQL
Как уже говорилось в главе 9, главной «специальностью» языка SQL является конструирование запросов пользователя к базе данных. Поэтому программирование на языке SQL – это в основном формирование таких запросов.
Запрос SQL – это запрос, создаваемый при помощи инструкций SQL [15] .
Запросы являются основным средством просмотра, изменения и анализа информации, которая содержится в одной или в нескольких таблицах базы данных. В этой главе, а также в главах 10 и 12, рассматриваются запросы, относящиеся к предметной области, обсуждаемой в настоящей книге.
Перечислим важнейшие типы запросов:
• запрос на выборку;
• запрос на изменение;
• SQL-запрос;
• запрос с параметрами;
• перекрестный запрос.
Запросы на выборку позволяют извлечь информацию, рассчитать показатели и создать перекрестные ссылки, но не изменяют данные в таблицах.
Запросы на изменение дают возможность корректировать информацию, которая содержится в таблицах.
Существует четыре вида запросов на изменение:
• запрос на создание таблицы – создает новую таблицу на основе данных, которые уже размещены в одной или нескольких таблицах;
• запрос на удаление – удаляет все записи из одной или нескольких таблиц на основании критериев, заданных пользователем;
• запрос на присоединение – добавляет целые записи или только указанные поля в одну или больше таблиц;
• запрос на обновление – изменяет данные в существующих таблицах на основании информации в окне конструктора.
Запрос с параметрами – это запрос, при выполнении отображающий в собственном диалоговом окне приглашение ввести данные, например условие для возвращения записей или значение, которое требуется вставить в поле. Можно разработать запрос, выводящий приглашение на ввод нескольких единиц данных, например двух дат. Затем Microsoft Access может вернуть все записи, приходящиеся на интервал времени между этими датами.
Такие типы запросов удобно использовать в качестве основы для форм, отчетов и страниц доступа к данным.
Перекрестные запросы используются для расчетов и представления данных в структуре, облегчающей их анализ. Перекрестный запрос подсчитывает сумму, среднее число значений или выполняет другие статистические расчеты, после чего результаты группируются в виде таблицы по двум наборам данных, один из которых определяет заголовки столбцов, а другой – заголовки строк.
Эти запросы могут формироваться в окне конструктора запросов.
SQL-запросы предназначены для решения более сложных задач и не создаются в названном окне, а кодируются с использованием операторов SQL. Перечислим варианты SQL-запросов:
• запрос на объединение – совмещает поля, которые расположены в одной или нескольких таблицах или запросах;
• запрос к серверу – позволяет забирать информацию непосредственно из ODBC-таблиц (ODBC – Open Database Connectivity, средства работы с открытыми базами данных), так как напрямую связывается с сервером, а не с таблицами системы Access;
• запрос на определение данных – вносит изменения в определение таблицы, то есть позволяет формировать и удалять таблицы, добавлять в них поля и создавать их индексы;
• подзапрос – создает оператор внутри существующего запроса на выборку или изменение. Подзапрос выбирает подмножество записей, уже извлеченных главным запросом.
Выполнение любых задач, связанных с таблицами, подразумевает использование языка SQL. Запросы первых трех типов, перечисленных выше, встраиваются в средство просмотра SQL в окне запроса. Чтобы сформировать подзапрос, введите команду SQL SELECT в строке Критерии сетки Конструктор.
Запросы могут создаваться как с помощью конструктора запросов, так и посредством мастера запросов. На наш взгляд, конструктор удобнее: во-первых, его операции оформляются более наглядно, во-вторых, из конструктора легко переходить к инструкциям в форме SQL и наоборот. Тем не менее на конкретном примере будет показано, как формировать запрос при помощи мастера.
Однако, как вы помните, есть и третья форма представления запроса – инструкции SQL. Для большинства запросов (кроме SQL-запросов) между запросом, сформированным посредством конструктора, и инструкцией SQL существует жесткая и однозначная связь. Поэтому в дальнейшем мы будем показывать для каждого создаваемого запроса соответствующую ему инструкцию SQL, а также подробно рассматривать операторы, которые входят в ее состав.
Простые запросы
Под простыми запросами будем понимать запросы, ограниченные одной таблицей и не содержащие каких-либо критериев, условий, фильтров и т. д. Пример такого запроса – вывод какой-либо таблицы полностью, пусть это будет таблица Страны. Чаще всего такая операция необходима, когда надо просмотреть какой-нибудь список – допустим, словарь. Итак, сначала сконструируем простой запрос с помощью мастера.
Формирование запроса с помощью мастера
Откройте окно базы данных и щелкните по кнопке Запросы, чтобы перейти в одноименную вкладку. Затем выберите опцию Создать запрос с помощью мастера.
На экране появится окно Создание простых запросов (см. рис. 11.1), где предлагается выбрать поля для запроса из таблицы или другого запроса (таких таблиц или запросов может быть несколько). Выберите таблицу Страны и с помощью знакомой вам кнопки
перенесите все ее поля в будущий запрос. Затем щелкните по кнопке Далее. Пропустите появившееся промежуточное окно, где вам предлагается задать имя запроса (по умолчанию это будет Страны). Теперь на экране вы видите таблицу (см. рис. 11.2), на которую ориентирован сформированный запрос. Одновременно во вкладке Запросы окна базы данных появится имя вновь созданного запроса – Страны.
Рис. 11.1
Рис. 11.2
Формирование запроса с помощью конструктора
Теперь сформируем тот же самый запрос с использованием конструктора.
Как и при запуске мастера, откройте конструктор, выбрав вкладку Запросы окна базы данных. Теперь активизируйте опцию Создание запроса в режиме конструктора. После этого вы увидите окно Добавление таблицы. В нем вам нужно выбрать таблицы и/или запросы, на основе которых следует сформировать запрос (см. рис. 11.3).
Рис. 11.3
Как мы уже решили, это будет таблица Страны. На экране появится окно конструктора запроса – основного инструмента для построения запроса (см. рис. 11.4). В окне вы видите включенный в него макет таблицы Страны, которую вы только что выбрали. Кроме того, в окне расположены поля репликации (в данном случае они нас не интересуют) и поля таблицы: Код, Страна и Примечание.
Рис. 11.4
Щелкните дважды по каждому из них, и эти поля будут помещены в бланк запроса, расположенный в нижней части окна (см. рис. 11.5). Как видите, запрос действительно очень прост, и на этом его формирование можно считать завершенным.
Рис. 11.5
Если вы теперь закроете окно конструктора с помощью обычной кнопки с изображением крестика, то Access 2002 попросит вас подтвердить выполненные операции или внесенные изменения (см. рис. 11.6). Если вы соглашаетесь, система предложит назвать запрос. По умолчанию будет предложено имя Запрос с каким-либо порядковым номером – в нашем случае Запрос20. Затем откроется окно базы данных (см. рис. 11.7).
Рис. 11.6
Рис. 11.7
Перед вами та же БД, что была показана на рис. 7.17, только там открыта вкладка Таблицы, а на рис. 11.7 – вкладка Запросы. Вы можете открыть запрос из окна базы данных или щелкнуть по кнопке. В обоих случаях произойдет запуск запроса и на экране появится таблица (см. рис. 11.2).
Представление запроса на языке SQL