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

Основные вопросы: Выборка данных. Компоненты Delphi, работающие с базами данных через SQL-запросы. Компоненты TQuery и TDataSource. Реализация процедур открытия и закрытия набора дан­ных.

Одной из задач, наиболее часто возникающих при работе с базами данных, являет­ся задача выборки данных, то есть задача извлечения из базы данных информа­ции, отвечающей ряду требований, заданных пользователем.

Одним из наиболее эффективных и универсальных средств выборки данных из таблиц базы данных являются запросы языка SQL. SQL-команды подраз­деляются на несколько категорий. Для выборки данных используются коман­ды, относящиеся к так называемому языку DQL (Data Query Language — язык запросов к данным).

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

В Delphi для работы с таблицами локальных баз данных через механизм BDE при­меняется собственная реализация языка SQL, называемая локальным языком SQL (local SQL). Данная реализация является подмножеством языка SQL 92. Несмот­ря на то, что она не содержит отклонений от стандарта, ее возможности несколько урезаны.

При работе с SQL-серверами обработка запроса выполняется на стороне сервера, поэтому особенности реализации языка SQL в этом случае определяются исполь­зуемым SQL-сервером.

Компоненты Delphi, работающие с базами данных через SQL-запросы

Для работы с базами данным через SQL-запросы в VCL Delphi используется, как правило, компонент TQuery. В VCL Delphi есть и другие компоненты для взаимодействия с базами данных посред­ством SQL-запросов, например TStoredProc, TCommand, TDataSet, TStoredProc.

Компонент TQuery

При использовании компонента TQuery подготовка и диспетчеризация запросов выполняется механизмом BDE. По своим свойствам и назначению компонент TQuery подобен компоненту ТТаЫе.

Отличие заключается только в способе получения данных: в ТТаЫе используются,методы, инкапсулированные в классе ТТаЫе, a TQuery получает данные как резуль­таты выполнения SQL-запросов.

Применение языка SQL позволяет легко решать задачи, которые сложно или во­обще невозможно решить в рамках класса ТТаЫе. Поэтому компонент TQuery яв­ляется гораздо более мощным и гибким инструментом для работы с базами дан­ных. Основные свойства класса TQuery приведены в табл. 12.1.

Таблица 12.1. Основные свойства класса TQuery

Свойство Constrained     Тип Описание Boolean Определяет, можно (false) или нет (true) задавать     полям набора данных значения, которые не соответствуют условиям отбора  
DataSource TDataSource Источник данных, связанный с набором данных, поля которого используются в качестве параметров SQL -запроса  
ParamCheck Boolean Определяет, следует ли обновлять параметры запроса при изменении свойства SQL во время выполнения программы
ParamCount Word Текущее количество параметров в запросе
Params[lndex: Word] TParams Массив параметров, используемых в SQL-запросе
Prepared Boolean Определяет, готов запрос к выполнению (true) или нет(false)  
RowsAffected Integer Количество записей, измененных с момента последнего выполнения запроса  
SQL TStrings Текст SQL-запроса
Text PChar Текст SQL-запроса, передаваемый BDE

В классе TQuery имеется ряд также методов, которые довольно часто используются при работе с базами данных через SQL-запросы.

procedure ExecSQL:

Выполняет SQL-запрос, заданный в свойстве SQL. Обычно используется в тех случаях, когда в результате выполнения запроса данные не возвращаются (на­пример, при выполнении команд INSERT, UPDATE, DELETE и CREATE TABLE).

Для выполнения команды SELECT необходимо использовать метод Open компонента TQuery.

function ParamByName (const Value: String): TParam:

Обеспечивает доступ к заданным параметрам по имени.

procedure Prepare:

Посылает запрос механизму BDE для подготовки к выполнению. Вызов данного метода перед выполнением запроса повышает скорость выполне­ния.

procedure UnPrepare:

Освобождает ресурсы, занятые при подготовке запроса к выполнению.

Рассмотрим возможность практического использования перечисленных выше ком­понентов. В дальнейшем полученные результаты пригодятся нам для изучения SQL-команд. В качестве исходных данных воспользуемся уже известной нам ба­зой данных sales.mdb.

1. Для создания нового приложения выполните команду File > New VCL Form Ap­plication.

2. Разместите на форме компоненты TQuery и TDataSource. Последний необходим для связи набора данных с компонентами визуализации данных и расположен на вкладке Data Access палитры компонентов.

3. Подключите базу данных Sales. Поскольку эта процедура рассматривалась в гла­ве 9 применительно к компоненту ТТаbе, здесь мы на ней останавливаться не будем.

В отличие от ТТаbе, класс TQuery не имеет свойств, в которых указывается связанная с ним таблица базы данных. При его использовании информация поступает в набор данных в результате выполнения SQL-запроса, заданного в свойстве SQL.

4. Для задания запроса щелкните на кнопке с многоточием в поле ввода свойства SQL инспектора объектов. При этом откроется окно текстового редактора, в ко­тором формируется запрос. Сформируйте запрос, как показано на рис.1. Его назначение состоит в возвращении выборки данных, содержащей все поля и все записи таблицы Товары нашей базы данных.

Рис. 1. Окно редактора SQL-запросов

5. Щелкните на кнопке Code Editor. Текст запроса появится в окне редактора кода (рис.2), причем ключевые слова языка SQL будут выделены полужирным шрифтом, что снижает вероятность ошибок при написании запроса.

Рис. 2. Текст SQL-запроса в окне редактора кода

СОВЕТ. При использовании компонента доступа к данным ТОиегудля задания SQL-запроса можно применять визуальный редактор запросов SQL Builder, который вызывается командой SQL Builder контекстного меню компонента TQuery, помещенного на фор­му. Однако он плохо работает с базами данных, в которых имена полей заданы кирил­лицей (выдаются различные малопонятные сообщения об ошибках).

6. Выполните настройку источника данных TDataSource. Она производится так же, как в случае компонента ТТаbе — в свойстве DataSet указывается имя объекта доступа к данным (по умолчанию — Queryl).

Далее необходимо разместить на форме необходимые элементы управления и выполнить их настройку.

7. Выберите следующие элементы:

■ компонент ТМето — для отображения и редактирования текста запроса;

■ компонент TDBGrid — для отображения результатов выполнения запроса;

■ кнопку TButton — для подачи команды на выполнение запроса.

Примерный вариант размещения на форме необходимых компонентов показан на рис. 3.

Рис. 3. Размещение элементов управления на форме

8. Для настройки компонента визуализации полей базы данных TDBGrid в его свой­стве DataSource укажите имя источника данных (по умолчанию — DataSourcel).

Следующий этап — реализация процедур открытия и закрытия набора дан­ных.

Если в результате выполнения SQL-запроса возвращаются данные, для его выполнения необходимо воспользоваться методом Open класса TQuery. Данный метод следует выполнять при запуске приложения, например в обработчике события OnShow главной формы. При этом происходит выполнение запроса, заданного в свойстве SQL, а результаты его выполнения отображаются в сетке DBGridl.

9. При закрытии приложения следует закрыть и набор данных. Вызовите метод Open в обработчике события OnShow главной формы, а метод Close — в обработ­чике ее же события OnClose.

10. Осталось написать обработчик события OnClick для кнопки Выполнить за­прос. Данная кнопка понадобится в дальнейшем для изменения текста за­проса с последующим выполнением его без перекомпиляции программы.При щелчке на кнопке должен выполняться запрос. Будем полагать, что в результате выполнения запроса возвращаются данные. В этом случае при щелчке на кнопке следует передать текст запроса из компонента memSQL в свойство SQL компонента Queryl и открыть набор данных, вызвав метод Open компонента Query1.

11. Откомпилируйте и запустите приложение.

Текст модуля разработанной формы приведен в листинге.1.

Листинг 1. Главный модуль приложения

unit SQLjnain:

interface

uses

Windows, Messages. SysUtils. Classes. Graphics. Controls, Forms, Dialogs, Grids. DBGrids, Db. StdCtrls, ExtCtrls. DBTables;

type,

TfrmMain = class(TF'orm)

Query1: TQuery:

DataSourcel: TDataSource;

DBGridl: TDBGrid;

memSQL: TMemo;

btnExecSQL: TButton;

procedure FormShow(Sender: TQbject);

procedure FormClose(Sender: TObject; var Action: TCloseAction):

procedure btnExecSQLClick(Sender: TObject): ' private

{ Private declarations }

public

{ Public declarations }

end;

var

frmMain: TfrmMain:

implementation {$R *.DFM}

procedure TfrmMain,FormShow(Sender. TObject); begi n

memSQL.Lines.Clear:

memSQL.Lines.Assign(Queryl.SQL);

Query1.Open; end;

procedure TfrmMain.FormClose(Sender: TObject;

var Action: TCloseAction): begin

if Query1.Active then Query1.Close; end;

procedure TfrmMain.btnExecSQLClick(Sender: TObject): begin

if Queryl.Active then Query1.Close;

Queryl.SQL.Clear:

Queryl.SQL.Assign(memSQL.Lines);

Queryl.Open: end;

end.

После запуска приложения в компоненте DBGridl на форме отобразится информа­ция, содержащаяся в таблице Товары базы данных sales.mdb (рис. 4).

Рис.4. Результат выполнения SQL-запроса

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

  1. Выборка данных
  2. Компоненты Delphi, работающие с базами данных через SQL-запросы
  3. Компоненты TQuery и TDataSource
  4. Реализация процедур открытия и закрытия набора дан­ных


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: