- •Базы данных.
- •Проектирование базы данных
- •Шаги проектирования базы данных
- •Создание таблиц базы данных
- •Компоненты для работы с бд
- •Создание простейшего приложения
- •Режимы наборов данных
- •Команды навигации
- •Визуальные компоненты для работы с данными
- •Обзор компонент
- •Работа с полями таблицы
- •Создание статических полей
- •Задание ограничений на вводимые значения
- •Компонент Table
- •Сортировка и фильтрация
- •Поиск записей
- •If Table1.Locate ('Number',123,[]) {опции поиска отключены}
- •If not Table1.FindKey([EditGroup.Text,EditName.Text]){ищем соответствующие значения}
- •Связывание таблиц
- •Компонент Query
- •Чтение данных из таблиц (select)
- •Модификация записей (update, insert, delete)
- •Insert into Tovar.Db (Name, Price, Count) values (’Яблоки’, 20, 10)
- •Некоторые функции языка sql
- •Компоненты для построения отчетов
- •Основные свойства компоненты QuickRep
- •Методы компоненты QuickRep:
- •Свойства компоненты qrBand:
- •Создание простого отчета
- •Включение выражений в отчет
- •Отображение системной информации
- •Группировка данных в отчете
- •Построение отчета для связанных наборов данных
- •Комбинированный отчет
- •Упражнения:
-
Компонент Query
Компонент Query представляет собой набор данных, записи которого формируются в результате выполнения SQL-запроса и основаны на реляционном способе доступа к данным, поэтому при работе с удаленными БД рекомендуется использовать именно его. Основным достоинством реляционного доступа является небольшая загрузка сети, поскольку передаются только запросы и результат их выполнения. Применительно к локальным БД использование реляционного подхода не дает существенного преимущества, но и в этом случае с помощью SQL-запроса можно выполнить некоторые действия неприменимые с набором данных Table. В то же время Query поддерживает и навигационные способы доступа, рассмотренные выше (методы Next, Insert…).
Наборы данных Query также могут находиться в открытом (Active:=True) и закрытом (Active:=False) состояниях. И на расположение БД (каталог или псевдоним) также указывает свойство компонент DatabaseName.
Открытый компонент Query содержит набор данных, соответствующий выполнению SQL-запроса SELECT, содержащегося в свойстве SQL этого компонента. Компонент Query позволяет также выполнять и другие SQL-запросы. Но для них набор данных открывать не нужно, а нужно вызывать процедуру ExecSQL.
Пример использования SQL-запроса для открытия таблицы NewTable.db:
procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.Active:=False;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT * FROM NewTable.db');
Query1.Active:=True;
end;
В отличие от компонента Table, набор данных Query может включать в себя записи более одной таблицы БД. Текст запроса содержится в свойстве SQL и включает в себя команды на языке SQL. Выполняется запрос либо при открытии набора данных (SQL-команда SELECT), либо вызовом метода ExecSQL (для остальных SQL-команд). Если в тексте SQL-запроса есть ошибки, то при попытке выполнения запроса генерируется сообщение об ошибке.
Компонент Query может быть связан с таблицей БД или напрямую, или содержать копии отобранных записей таблицы (по умолчанию). Если требуется возможность редактирования записей (нужно связать напрямую), то для этого требуется:
-
чтобы данные в запросе отбирались только из одной таблицы;
-
чтобы в запросе не использовались соединения таблиц, вложенные запросы, группирование данных, операнд DISTINCT и агрегатные (статистические) функции;
-
чтобы сортировка шла только по индексным полям;
-
чтобы таблица допускала модификацию;
-
установить свойству RequestLive:=True.
Далее рассмотрим синтаксис языка SQL.
Язык SQL ориентирован на выполнение действий с таблицами БД. В отличие от процедурных языков программирования, в нем нет операторов управления вычислительным процессом (циклов, ветвлений) и средств ввода-вывода. В качестве результата выполнения SQL-запроса может возвращаться набор данных, который называют результирующим набором.
SQL-операторы определения данных (создание/удаление таблицы или индекса) были рассмотрены на втором уроке.
В дальнейшем при описании операторов языка в [квадратных скобках] указаны необязательные параметры, в <треугольных скобках> описываются отдельные элементы, в {фигурных скобках} | - разделяет допустимые значения из которых нужно выбрать лишь одно.