
- •Санкт-Петербургский
- •Оглавление
- •5. Формы 25
- •3. Таблицы
- •3.1. Создание структуры таблицы
- •3.2. Загрузка таблицы данными
- •3.3. Модификация структуры таблицы
- •3.4. Работа с макетом таблицы
- •3.5. Схема данных
- •3.6. Печать таблицы
- •4. Запросы
- •4.1.Типы запросов
- •4.2.Создание qbe-запроса
- •4.3. Заполнение бланка запроса
- •4.4. Работа с построителем выражений
- •4.5. Редактирование запроса
- •4.6. Печать динамического набора данных
- •4.7. Примеры запросов
- •4.7.1. Запрос на выборку данных
- •4.7.2.Запрос с параметром (параметрический запрос)
- •4.7.3. Запрос на создание таблицы
- •4.7.4. Запросы на изменение данных
- •4.7.4.1. На добавление записей
- •Insert into Детали (номерд, имяд, цена )
- •Insert into Детали (номерд, имяд, цена )
- •Values ( 15, “ролик”,150);
- •Insert into Новая ( [номер поставщика], [номер детали], [имя детали], [город] )
- •4.7.4.2. Запрос на удаление записей
- •4.7.4.3. Запрос на обновление (корректировку) данных
- •4.7.5. Группирование данных в запросе
- •4.7.6. Перекрестный запрос
- •4.7.7. Подчиненные (вложенные) запросы
- •4.8.Фильтрация данных
- •5. Формы
- •5.1. Создание однотабличной формы
- •5.2. Редактирование формы
- •5.3. Часто используемые свойства формы
- •5.4. Элементы управления и их свойства
- •6. Отчеты
- •6.1. Создание отчета
- •6.2. Работа с отчетом в режиме конструктора
- •6.3. Сортировка и группировка данных
- •7. Макросы
- •7.1. Создание макросов
- •7.2. Краткая характеристика макрокоманд
- •7.3. Групповые макросы
- •7.4. Реализация ветвлений в макросах
- •7.4.1. Примеры макросов с односторонним ветвлением
- •7.4.2. Пример макроса с двусторонним ветвлением
- •7.5. Реализация циклов в макросах
- •8. Основы создания пользовательского интерфейса
- •8. 1. Взаимодействие форм
- •Интерфейс.Открыть просмотр
- •Интерфейс.Открыть редактирование
- •Интерфейс.Закрыть просмотр
- •8. 2. Создание кнопочных меню с помощью диспетчера кнопочных форм
- •8. 3. Создание пользовательских меню
- •8. 3.1. Создание пользовательских меню с помощью макросов
- •8. 3.2. Создание пользовательских меню с помощью своей панели инструментов
4.7.6. Перекрестный запрос
Пример 13.
Создание многотабличного QBE- запроса:
создать запрос на выборку данных из таблицы ДеталииПоставки, отобразив в динамическом наборе поля:номерп,имяд,количество.
преобразовать запрос на выборку в перекрестный запрос: Запрос/Перекрестный
отобразить в строке Групповая операциядля полейномерп и имяд слово Группировка, Sumдля поляколичество.
отобразить в строке ПерекрестнаятаблицаЗаголовкистолбцовдля поляномерп,Заголовкистрокдля поляимядиЗначениедля поляколичество.
Соответствующий SQL-запрос:
TRANSFORM Sum(Поставки.количество) AS [Суммарное количество]
SELECT Детали.имяд
FROM Детали INNER JOIN Поставки ON Детали.номерд = Поставки.номерд
GROUP BY Детали.имяд
PIVOT Поставки.номерп;
В результате выполнения запроса получим таблицу:
имяд |
1 |
2 |
3 |
4 |
5 |
болт |
150 |
150 |
|
50 |
150 |
гайка |
120 |
|
100 |
|
150 |
ролик |
|
150 |
150 |
150 |
150 |
шайба |
|
200 |
150 |
|
|
4.7.7. Подчиненные (вложенные) запросы
Типы подчиненных запросов:
запросы, использующие сравнения, синтаксическая конструкция которых может быть такой: [ANY(любой)ALL(все)SOME(некоторые)] (инструкция SQL)
запросы, содержащие предложения, синтаксическая конструкция которых может быть такой: выражение [NOT]IN(инструкция SQL)
запросы, содержащие предложения, синтаксическая конструкция которых может быть такой: [NOT]EXISTS(инструкция SQL)
Пример 14.
Отобрать из таблицы Деталидетали, которые стоят столько же, сколькоболт. Эту задачу можно решить с помощью однотабличного подчиненного запроса.
Создание QBE- запроса:
создать запрос на выборку данных из таблицы Детали, отобразив в динамическом наборе данных все поля.
в строку Полевынести отдельно полецена, для которого выключить флажокВыводнаэкран
В строке Условие отбора написать(SELECT цена FROM Детали WHERE имяд=“болт”).
Соответствующий SQL-запрос:
SELECT Детали.*
FROM Детали
WHERE ((Детали.цена=(SELECT цена FROM Детали WHERE имяд="болт")));
Пример15. Из таблицыСотрудники(фамилия, имя, должность, зарплата)отобрать сведения о продавцах, зарплата которых превышает зарплату всех начальников и директоров.
Создание QBE-запроса:
создать запрос на выборку данных из таблицы Сотрудники, отобразив в динамическом наборе данных все поля.
в строку Полевынести отдельно полядолжность и зарплата, для которых выключить флажокВыводнаэкран
В строке Условие отбора для полядолжность написатьLIKE“продавец*”, а для полязарплатанаписать:>ALL(SELECT зарплата FROM Сотрудники WHERE (( должность LIKE “*начальник*”) OR ( должность LIKE “*директор*))).
Соответствующий SQL-запрос:
SELECT Сотрудники.*
FROM Сотрудники
WHERE должность LIKE "продавец*" AND зарплата > ALL
(SELECT зарплата FROM Сотрудники
WHERE (( должность LIKE "*начальник*") OR ( должность LIKE "*директор*")));
Таблицам, как и полям, можно давать другие имена-псевдонимы.
Пример16. Выдать сведения о деталях ( номер, имя и цену), для которых есть поставки. Эта задача может быть решена с помощью подчиненного запроса.
Создание QBE-запроса:
открыть бланк для создания запроса
добавить в него таблицу Детали
открыть окно Свойствадля полей таблицыДеталии задать для нее псевдонимD
отобразить в динамическом наборе данных поля (в строке Полебланка)номер детали : номерд, имя детали : имяд, цена детали: цена
создать в запросе вычисляемое поле без вывода его значения на экран с текстом в строке Поле:Exists (SELECT * FROM Поставки AS P WHERE D.номерд=P.номерд);
Соответствующий SQL-запрос:
SELECT D.номерд AS [номер детали], D.имяд AS [имя детали], D.цена AS [цена детали]
FROM Детали AS D
WHERE (((Exists (SELECT * FROM Поставки AS P WHERE D.номерд=P.номерд))));
Пример17. Отобрать все поставки для деталей, не дороже 100 руб.
Эту задачу также можно решить с помощью подчиненного запроса.
Создание QBE-запроса:
создать запрос на выборку данных из таблицы Поставки, отобразив в динамическом наборе данных все поля.
в строку Полевынести отдельно поляномерд, для которого выключить флажокВыводнаэкран
В строке Условие отбора для поляномерд написатьIn (SELECT номерд FROM Детали WHERE цена <100)
Соответствующий SQL-запрос:
SELECT Поставки.*
FROM Поставки
WHERE ((Поставки.номерд In (SELECT номерд FROM Детали WHERE цена <100)));
Отбор данных можно производить с помощью фильтров, накладываемых на таблицы и формы.