- •Базы данных
- •Содержание
- •Введение
- •1. Создание приложений с использованием технологии bde
- •1.1. Лабораторная работа № 1: создание базы данных
- •1.1.1. Создание таблиц dBase IV
- •1.1.2. Создание индексов
- •1.1.3. Создание таблиц Paradox 7
- •1.1.4. Задание свойств таблицы Paradox 7
- •Задание на лабораторную работу № 1
- •1.2. Лабораторная работа № 2: установление связей между таблицами в многотабличной базе данных
- •1.2.1. Создание алиаса
- •1.2.2. Связывание таблиц
- •Задание на лабораторную работу № 2
- •1.3. Лабораторная работа № 3: работа с полями и компонентом dbGrid
- •1.3.1. Использование объектов-полей
- •1.3.2. Обращение к значению поля
- •1.3.3. События объекта-поля
- •1 Рис. 10. Пример использования события OnCellClick .3.4. События сетки dbGrid
- •1.3.5. Создание объектов-столбцов в dbGrid
- •1.3.6. Формирование списка возможных значений столбца
- •Задание на лабораторную работу № 3:
- •1.4. Лабораторная работа № 4: работа с наборами данных (компонент Table)
- •1.4.1. Открытие и закрытие набора данных
- •1.4.2. Доступ к записям
- •1.4.3. Навигация по набору данных
- •1.4.4. Поиск записей в наборах данных
- •1.4.5. Реализация каскадных изменений
- •1.4.6. Пример выполнения лабораторной работы
- •Задание на лабораторную работу № 4
- •1.5. Лабораторная работа № 5: работа с отчетами
- •1.5.1. Создание простейшего отчета
- •1.5.2. Создание отчета для связанных наборов данных
- •1.5.3. Использование выражений (компонент qrExpr)
- •1.5.4. Группирование данных в отчете
- •Задание на лабораторную работу № 5:
- •1.6. Лабораторная работа № 6: sql-запросы (компонент Query)
- •Задание на лабораторную работу № 6
- •2. Создание приложений, работающих с базами данных interbase
- •2.1. Лабораторная работа № 1: создание схемы базы данных
- •2.2. Лабораторная работа № 2: доступ к базе данных InterBase c использованием dbExpress
- •2.3. Лабораторная работа № 3: транзакции
- •2.4. Лабораторная работа № 4: отображение данных запроса
- •2.5. Лабораторная работа № 5: вычисляемые, агрегатные и подстановочные поля
- •2.5.1. Вычисляемые поля
- •2.5.2. Агрегатные поля
- •2.5.3. Подстановочные поля
- •2.6. Лабораторная работа № 6: связь Master-Detail
- •2.7. Лабораторная работа № 7: локальная репликация данных
- •Приложение 1 варианты заданий к лабораторным работам Вариант 1. Прием заказов
- •Вариант 2. Поставки товаров
- •Вариант 3. Исполнители
- •Вариант 4. Картинная галерея
- •Вариант 5. Порт
- •Вариант 6. Студенты
- •Вариант 7. Строительная компания
- •Вариант 8. Автосалон
- •Вариант 9. Аэропорт
- •Вариант 10. Диагностический центр
- •Вариант 11. Реклама
- •Вариант 12. Быстрая пицца
- •Вариант 13. Клуб собаководов
- •Вариант 14. Грузоперевозки
- •Вариант 15. Аптека
- •Вариант 16. Автовокзал
- •Вариант 17. Общественная организация
- •Вариант 18. Учет потребления газа
- •Приложение 2 порядок выполнения лабораторных работ
- •Библиографический список
Задание на лабораторную работу № 5:
Создать отчет для вывода информации из связанных таблиц.
Использовать компоненты QRExpr для отображения статистических данных (число записей в отчете, среднее значение или сумма по одному из полей и т.п.).
Выполнить группирование данных в отчете.
1.6. Лабораторная работа № 6: sql-запросы (компонент Query)
SQL — язык структурированных запросов — предназначен для создания и работы с реляционными базами данных. Он значительно сокращает объем работ, который пришлось бы выполнять при использовании универсальных языков программирования. Команды SQL могут оперировать с таблицами БД как с едиными объектами и обрабатывать любое количество извлеченной или производной информации как один блок.
Для выполнения данной лабораторной работы необходимо знание основ SQL (стандарт SQL92). Очень доступно и в то же время достаточно глубоко язык SQL представлен в [4].
В технологии BDE для работы с языком SQL предназначен компонент Query. Этот компонент представляет собой набор данных, который содержит результат выполнения SQL-запроса к таблицам БД. Первоначальная настройка компонента производится следующим образом:
установите свойство DatabaseName (выберите алиас вашей БД);
для того чтобы во время разработки приложения проверить работу Query, откройте редактор свойства SQL и напишите любой запрос SELECT. После этого установите свойство Active в True.
Для вывода результатов запроса в DBGrid свяжите компонент Query с DBGrid с помощью DataSource.
При организации интерфейса программы предусмотрите возможность просмотра кода выполненного SQL-запроса. Рекомендуется отобразить и словесную формулировку запроса, внутри которой можно поместить поля для ввода его параметров (рис. 25).
Код SQL-запросов в тексте программы лучше описать с помощью массива констант типа String. Это позволит обращаться к нему в любом месте программы, указывая лишь имя массива и номер запроса. Кроме того, вносить изменения в код будет намного удобнее.
Рис. 25. Пример организации интерфейса приложения
Перед выполнением запроса закройте Query и очистите свойство SQL:
Query1.Close;
Query1.SQL.Clear;
Затем присвойте свойству SQL строку SQL-запроса (или элемент массива запросов):
Query1.SQL.Add('select rec_name from records r
where exists(select * from albums al, artists a
where al.id_artist= a.id_artist and a.a_name=:ANAME
and al.id_album=r.id_album)’);
Двоеточие перед именем ANAME говорит о том, что это имя подстановочного параметра SQL-запроса. Использование подстановочных параметров в SQL-ориентированных СУБД существенно ускоряет выполнение однотипных запросов, отличающихся друг от друга только значениями параметров. Это особенно заметно, когда выполнение запроса происходит в цикле несколько раз подряд.
Значения параметров запроса установите следующим образом:
Query1.ParamByName('ANAME').AsString:=Edit5.Text;
Внимание: для выполнения запросов, которые не возвращают результатов (например, UPDATE или INSERT), используйте метод
SQLDataSet1.ExecSQL();
Вызвав этот метод, очистите свойство SQL и задайте любой SQL-запрос, возвращающий результат (т.е. SELECT). В противном случае открыть набор данных Query будет невозможно.
Теперь откройте Query (рекомендуется выполнять эту операцию в блоке try … except … end для обработки возможных исключительных ситуаций в случае, если запрос содержит ошибки):
Query1.Open;
Код выполненного SQL-запроса, т.е. значение свойства Query1.SQL.Text, выведите в отведенное для этого поле.