<<
>>

Лекция 5.7. Реляционный способ доступа к БД

Реляционный способ доступа основан на использовании обращений к БД на языке структурированных запросов – SQL (Structured Query Language). Использование реляционного способа доступа значительно расширяет возможности приложения.

SQL-запросы можно использовать как для обращения к локальным БД, так и для обращения к SQL-серверам БД (Oracle, Informix, Sybase, DB2, InterBase, Microsoft SQL Server). Причем при формировании SQL-запросов не имеет особого значения, какая СУБД используется, т.к. команды языка SQL стандартизированы (ANSI SQL 92), но все же имеются свои реализации.

Для работы с локальными БД (Paradox, dBase, FoxPro) в Delphi используются своя, усеченная, реализация языка (Local SQL) стандарта SQL92. При работе с SQL-серверами обработка запросов выполняется на стороне сервера, поэтому особенности реализации языка SQL определяются используемым SQL-сервером.

Язык SQL-не имеет средств создания пользовательского интерфейса, а ориентирован только на доступ к данным, поэтому его обычно включают в средства разработки приложений и называют встроенным. Для реализации возможности использования SQL-запросов в Delphi включены специальные компоненты, такие как TQuery, TADOQuery, TIBQuery они реализуют разные механизмы доступа к БД. Продолжим рассмотрение доступа с использованием механизма BDE.

Компонент класса TQuery

Благодаря общим родителям компонент класса TQuery имеет много общих свойств методов и событий с компонентом класса TTable относительно работы с НД. Основные отличия заключаются в способе получения данных, компонент класса TQuery получает данные как результат выполнения SQL-запросов. Применение SQL-запросов позволяет решать задачи, которые невозможно решить при использовании навигационного доступа к данным реализованным в компоненте класса TTable. Поэтому компонент класса TQuery является более гибким и мощным инструментом для работы с БД, единственным недостатком является относительно низкая производительность SQL-запросов но при обработке больших объемов данных.

Прежде чем приступить к описанию основных свойств класса рассмотрим обязательные свойства:

· DatabaseName: String - путь к БД или псевдоним;

· SQL: TStrings – текст SQL-запроса. Компонент не будет работать без указания SQL-запроса.

Основные свойства класса TQuery:

· DataSource: TDataSource – источник данных связанный с НД поля которого могут использоваться в качестве параметров SQL-запроса;

· ParamCheck: Boolean – определяет, надо ли обновлять параметры запроса при изменении свойства SQL во время выполнения программы;

· ParamCount: Word – количество параметров в запросе;

· Params[Index: Word]: TParams – массив параметров используемых в запросе;

· Prepared: Boolean – определяет готовность запроса к выполнению;

Класс имеет ряд часто используемых методов:

· procedure ExecSQL – используется для выполнения запросов действия, которые не возвращают НД (INSERT, UPDATE, DELETE и CREATE TABLE);

· function ParamByName (const Value: String): TParam – предоставляет доступ к параметру SQL-запроса по имени параметра;

· procedure Prepare – отправляет запрос в BDE для подготовки к выполнению, что повышает скорость при многократном использовании запроса.

· procedure UnPrepare – освобождает ресурсы занятые под подготовленный запрос.

Реализация запросов средствами Delphi

В Delphi различают два вида запросов:

· Статический SQL-запрос включается в исходный код программы на этапе разработки приложения и в процессе его выполнения не изменяется.

· Динамический SQL-запрос изменяется вовремя работы приложения, обычно зависит от действий пользователя.

Как правило, пользователи используют один и тот же шаблон запроса изменяя только передаваемые в запрос значения, которые используются в качестве условий отбора. Для упрощения передачи значений в запрос в компоненте класса TQuery реализован массив параметров (Params), а запросы их использующие называют параметрическими.

Для реализации статических запросов используется редактор свойства SQL компонента TQuery, в который на этапе разработки приложения вводится код SQL-запроса (рисунок 5.7.1)

Рисунок 5.7.1 - Использование редактора SQL-запроса

Динамически запросы можно формировать несколькими способами.

Например, использование класса TStrings для свойства SQL позволяет загружать запросы из файлов, что может повысить гибкость и расширяемость приложения. Один и тот же компонент способен выполнять, во время работы приложения, различные запросы, подгружаемые из файлов. Пример загрузки запроса из файла и его выполнения:

Query1.Close;

Query1.SQL.LoadFromFile(‘MyQuery1.sql’);

Query1.Open;

Пример непосредственного добавления кода SQL-запроса:

with Query1 do

begin

Active:= false;

SQL.Clear;

SQL.Add(‘SELECT * FROM Country’);

SQL.Add(‘WHERE Name=:Name’);

Active:= true;

end;

Во всех вышеуказанных примерах использовались параметрические запросы, где параметром является часть, перед которой поставлен символ «:» (:Name).

Запросы на выборку (DQL) включаются и выключаются с использованием свойства Active или при использовании методов Open и Close. Запросы группы DML не возвращают информации и выполняются только при вызове метода ExecSQL, например:

Query1.SQL.Clear;

Query1.SQL.Add(‘DELETE FROM Country WHERE Name=’+ QuotedStr(‘Canada’));

Query1.ExecSQL;

Рассмотрим создание простого редактора SQL-запросов, позволяющего выбирать БД и выполнять по отношению к ней SQL-запросы (рисунке 5.7.2).

Выполнение запроса осуществляется кнопкой «Выполнить». Флажок «Запрос на выборку» позволяет управлять способом выполнения запроса, если флажок установлен, то запрос выполняется через свойство Active (метод Open), в противном случае запрос считается модифицирующим и выполняется методом ExecSQL. При наличии ошибки в SQL-запросе автоматически генерируется исключительная ситуация. Для реализации примера выполните следующие действия:

1. Создайте главную форму приложения

2. Разместите на форме компоненты для работы с БД классов TDBGrid, TDataSource и TQuery.

3. Разместите на форме раскрывающийся список (класс TComboBox), для выбора псевдонима БД, список (класс TListBox) для отображения полей выбранной БД, многострочный редактор (класс TMemo) для ввода текста SQL-запроса и флажок (класс TCheckBox) для управления способом выполнения SQL-запроса.

Рисунок 5.7.2 - Пример редактора SQL-запросов.

4. Разместите на форме три надписи (класс TLabel), для поясняющих надписей и кнопку «Выполнить» (класс TButton)

5. Создайте метод загрузки списка доступных таблиц procedure GetTables, для этого сделайте его объявление в разделе Private формы и нажмите Ctrl+Shift+C. Впишите в него следующий код:

Session.GetTableNames(ComboBox1.Text, '*.db',False,

False, ListBox1.Items);

В коде используется имя псевдонима, выбранное в поле со списком -ComboBox1.Text, список доступных таблиц помещается в ListBox1.Items

6. Создайте метод получения списка псевдонимов procedure GetAliases, для этого сделайте его объявление в разделе Private формы и нажмите Ctrl+Shift+C. Впишите в него следующий код:

with ComboBox1, Session do

begin

Session.GetAliasNames(Items); //получаем список псевдонимов

if Items.Count > 0 then ItemIndex:= 0; // выбираем 1-й псевдоним

GetTables; // загрузка списка доступных

//таблиц

end;

7. Напишите обработчик OnClick кнопки «Выполнить»:

Query1.Active:= false; // отключаем НД

Query1.DatabaseName:= ComboBox1.Text; // присваиваем имя

// псевдонима БД

Query1.SQL.Text:= Memo1.Lines.Text; // присваиваем текст

// SQL-запроса

if CheckBox1.Checked // определяем как выполнить запрос

then Query1.Active:= true // включаем запрос на выборку

else Query1.ExecSQL; // иначе выполняем через ExecSQL

8. Создайте обработчик OnCreate формы и впишите в него код:

GetAliases;

9. Создайте обработчик OnChange поля со списком и впишите в него следующий код:

GetTables;

10. Выполните компиляцию и тестирование приложения. Теперь вы можете отрабатывать написание SQL-запросов в собственном SQL-редакторе.

Вопросы для самоконтроля

1. Почему компонент класса TQuery называется компонентом реляционного доступа?

2. Какие основные свойства компонента класса TQuery вы знаете?

3. В чем отличие между подключением НД TQuery и НД TTable к БД?

4. В чем разница в использовании методов Open и ExecSQL?

5. Как реализуются статические запросы к БД?

6. Как реализуются динамические запросы к БД?

7. Как создаются параметрические запросы к БД?

<< | >>
Источник: РазработкА и эксплуатациЯ автоматизированных информационных систем. ЛЕКЦИИ.

Еще по теме Лекция 5.7. Реляционный способ доступа к БД:

  1. 3.4. Структура корпоративного права
  2. 61. СПОСОБЫ ОБЕСПЕЧЕНИЯ ОБЯЗАТЕЛЬСТВ
  3. Конфедерация и иные формы межгосударственных объединений (союзы, сообщества, содружества, ассоциации)
  4. 57 Понятие системы законодательства. Основные свойства российской системы законодательства: многообразие, государственная упорядоченность, иерархичность нормативных юридических актов.
  5. 59 Понятие систематизации нормативных юридических актов. Способы систематизации юридических актов: обработка (сбор актов), перегруппировка (создание сборников), изложение (объединение).
  6. 2. Роль фіскальної політики в державному регулюванні.