Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
Запросы
Тема: Запросы
Цель: Изучение свойств и работу компонента TADOQuery, разработка
приложения SQL-монитор с применением операторов SQL.
Оборудование: IBM – совместимые компьютеры.
Место проведения: Компьютерный класс.
Техника безопасности: См. инструкцию.
Теоретическая чать
Запросы (TQuery, TADOQuery) - это такие же наборы данных, как и
таблицы ( TTable, TADOTable ). Запросы, как и таблицы, происходят от
общего предка - TDBDataSet, в связи с этим они имеют схожие свойства,
методы и события. Но имеются и существенные различия. Прежде всего,
если табличный набор данных TTable ( TADOTable ) получает точную копию
данных из таблицы базы данных, то запрос TQuery ( TADOQuery ) получает
этот набор, основываясь на запросе, сделанном на специальном языке SQL
(Structured Query Language - Язык Структурированных Запросов). С
помощью этого языка программист создает запрос, который передается
параметру TQuery.SQL ( TADOQuery .SQL ). При открытии набора данных
этот запрос обрабатывается используемым механизмом BDE, ADO или др. и
в набор данных передаются запрошенные данные. Заметили разницу? Не
копия таблицы, а именно запрошенные данные, причем в указанном порядке!
Используя запросы, в одном наборе данных можно получить
взаимосвязанные данные из разных физических таблиц. Отпадает надобность
в подстановочных полях. Имеется два варианта работы с SQL -запросами. В
первом случае, SQL -запрос запрашивает нужные данные из таблицы
(таблиц) базы данных. При этом формируется временная таблица, созданная
в каталоге запуска программы, и компонент-запрос становится ее
владельцем. Работа с такими данными очень быстрая, но пользователь при
этом не может изменять данные, он лишь просматривает их. Такой подход
идеален для составления отчетности.
Если же пользователю требуется вносить изменения в таблицу
(таблицы), то с помощью специальных
операторов SQL ( INSERT, UPDATE, DELETE ) формируется запрос,
уведомляющий механизм доступа к данным изменить данные БД. В этом
случае никаких временных таблиц не создается. Запрос передается
механизму доступа, обрабатывается им, выполняются изменения, и механизм
доступа уведомляет программу о благополучном (или нет) изменении
данных.
Сравним табличные наборы данных с запросами. При работе с
локальными или файл-серверными БД, табличные наборы данных имеют
преимущество в скорости доступа к данным, поскольку запросы создают и
используют для этого временные таблицы, а табличные НД напрямую
обращаются к физическим таблицам БД. Однако при этом, запросы
позволяют формировать гибкие наборы данных, которые невозможно было
бы получить с помощью табличных НД.
При работе в архитектуре клиент-сервер, всякое преимущество
табличных наборов данных пропадает. Ведь они должны получить точную
копию запрошенной таблицы, в которой могут быть десятки и сотни тысяч
записей. Если учесть, что все эти данные передаются по сети, и передаются
не одному, а множеству клиентов, то мы получим очень медленную систему,
постоянно перегружающую сеть.
Выполнение работы:
1. Для демонстрации работы компонента TADOQuery создадим
совсем не большое приложение - простейший SQL –монитор.
2. Создайте папку для нового приложения. В эту папку скопируйте
базу данных ok.mdb, разработанную ранее, содержащую четыре таблицы,
предназначенные для программы отдела кадров. Создайте новый проект
в Delphi, форму переименуйте в fMain, сохраните ее модуль под
именем Main, а проект в целом как SQLMon. В свойстве Caption формы
пропишите "Простой SQL -монитор".
3. На форму установите панель. В свойстве Align панели
выберите alTop, чтобы панель заняла весь верх, а ее высоту растяните
примерно на полформы. Очистите свойство Caption. На эту панель
установите компонент Memo, именно в нем мы будем писать наши SQL -
запросы. Дважды щелкните по свойству Lines этого компонента, чтобы
вызвать редактор текста, и очистите весь текст. Также не помешает дважды
щелкнуть по свойству Font и изменить размер шрифта на 12 для лучшего
восприятия текста. В свойстве Align выберите alLeft, чтобы компонент
Memo занял всю левую часть панели.
4. В правой части панели установите две простые кнопки и
компонент TDBNavigator с вкладки Data Controls панели инструментов. Для
улучшения внешнего вида интерфейса ширину кнопок сделайте такой же, как
у навигатора базы данных. В свойстве Caption первой кнопки напишите
"Выполнить SQL -запрос", на второй кнопке напишите "Очистить
компонент Memo ". Можно очищать Memo сразу при выполнении SQL -
запроса, и обойтись без второй кнопки. Но многие запросы похожи, и проще
изменить часть текста запроса, чем писать весь запрос заново.
5. На нижнюю, свободную половину формы установите компонент
TDBGrid с вкладки Data Controls для отображения данных. В свойстве Align
сетки выберите alClient, чтобы сетка заняла все оставшееся место. Должна
получиться такая картина:
Рис. 20.1. Внешний вид приложения
ADOQuery1.SQL.LoadFromFile('c:\myfile.sql');
ADOQuery1.SQL.Add(Memo1.Text);
ADOQuery1.SQL := Memo1.Lines;
Memo1.Clear;
SELECT *
FROM LichData;
Свойства компонента-запроса
Constrained - Свойство логического типа. Если свойство
имеет значение True, то в изменяемом наборе данных на модифицируемые
записи накладываются ограничения блока WHERE оператора SELECT (с
операторами SQL -запросов вплотную познакомимся на следующей лекции).
DataSource - Указывает тот компонент TDataSource, который
используется для формирования параметрического запроса.
Local - Свойство логического типа. Если свойство имеет значение True,
это означает, что компонент-запрос работает с локальной или файл-
серверной базой данных.
ParamCheck - Логическое свойство. При
значении True список параметров автоматически обновляется при каждом
программном изменении SQL -запроса.
Params - Свойство имеет тип TParams и содержит массив объектов-
параметров этого типа. На этом типе данных следует остановиться
подробнее:
Таблица 7.1. Свойства и методы типа TParams
Свойство Описание
Items Содержит массив параметров типа TParams и является
свойством "по умолчанию". Индексация массива начинается с
0.
ParamValues() Открывает доступ к значению параметра по его имени,
указанному в скобках.
Count Количество параметров в массиве.
Метод Описание
AddParam() Добавляет параметр в массив параметров.
CreateParam() Создает параметр и добавляет его к массиву.
FindParam() Ищет параметр по его имени, указанному в скобках.
RemoveParam() Удаляет параметр из массива.
Методы компонента-запроса
ExecSQL() - Выполняет модифицирующие запросы, то есть запросы на
изменение, добавление или удаление записей, а также создание или удаление
таблиц. В случае обычных запросов, выполненных с помощью
оператора SELECT, используется метод Open, или присвоение
значения True свойству Active набора данных.
ParamByName() - Метод дает доступ к значению параметра по его
имени, указанному в скобках.
Prepare() - Метод используется для передачи SQL -запроса механизму
доступа к данным, чтобы последний оптимизировал запрос. Оптимизация
запроса происходит следующим образом: при выполнении любого
запроса, механизм доступа к данным проверяет его синтаксис, что отнимает
некоторое время. В случае многократного применения запроса, его можно
выполнить методом Prepare(). При этом запрос компилируется и
запоминается в буфере. При повторном выполнении этого запроса
его синтаксис уже не проверяется.
UnPrepare() - Этот метод отменяет результаты действия
метода Prepare(), и освобождает буфер от хранения компилированного
запроса.
Задания
1. Установить на форму кнопки (Запрос1, Запрос2, …) для
выполнения выше перечисленных запросов из файлов.
2. Разработать и выполнить следующие запросы:
− вывести Фамилию, Имя, Отчество, Кол-во детей, Стаж
работы;
− вывести Фамилию, Имя, Стаж, Образование;
− вывести Фамилию, Имя, Отчество, Телефон, Отдел;
− вывести Фамилию, Имя, Отчество, Страна, Город, Адрес;
− вывести Фамилию, Имя, Телефон, Отдел, Город, Адрес.