Главная » Delphi » Класс TSQLDataset

0

Класс  TSQLDataset используется для извлечения данных  с сервера при  помощи одностороннего курсора.  Такие  наборы данных  используются для отображения со держимого таблиц, а также  результатов выполнения запросов или  хранимых проце дур. Кроме того, объекты данного класса способны выполнять хранимые процедуры.

Основными свойствами класса TSQLDataset являются CommandType и Command- Text. Значение свойства CommandType определяет характер использования содер жимого  свойства CommandText. Возможные значения свойства CommandType пере числены в табл. 8.1, а также в интерактивной справочной системе Delphi.

Таблица 8.1. Возможные значения свойства CommandType (по материалам справочной системы Delphi)

CommandType         Содержимое свойства CommandText

ctQuery             Оператор SQL

ctStoredProc        Имя хранимой процедуры

ctTable        Имя   таблицы,  расположенной  на  сервере  баз  данных.   Для извлечения всех записей и полей  этой  таблицы компонент TSQLDataset автоматически создает  оператор SQL SELECT

Если свойство CommandType содержит значение ctQuery, то свойство Command-Text содержит  какой либо   оператор  SQL.  Например,  это   может   быть   оператор SELECT,  предназначенный  для  возврата  некоторого  набора  данных:   "SELECT * FROM CUSTOMER".

Если свойство CommandType содержит значение ctTable, то свойство Command- Text содержит имя  таблицы, расположенной на сервере баз данных.  В этом  случае поле  свойства CommandText в инспекторе объектов примет вид раскрывающего спи ска. В случае  подключения к SQL серверу  все операторы SQL,  необходимые для из влечения данных, создаются автоматически.

Если свойство CommandType содержит значение ctStoredProc, то свойство Com- mentText содержит  имя  хранимой  процедуры. Для  выполнения  этой   процедуры лучше  использовать  метод   TSQLDataSet.ExecSQL(), а  не  присваивать  значение True свойству  Active. Кроме  того,  метод  ExecSQL() может  быть использован в том случае, если свойство CommandType имеет  значение ctQuery и оператор SQL не воз вращает никакого набора данных.

Извлечение данных из таблиц

Для того  чтобы  извлечь данные из таблицы при  помощи компонента TSQLData- set, нужно  просто присвоить значение ctTable свойству  TSQLDataSet.Command- Type. В результате  поле  свойства CommandText в инспекторе объектов примет вид раскрывающегося списка  с перечнем имен  доступных  таблиц. Соответствующий при мер можно найти  на прилагаемом компакт диске в каталоге TableData.

Отображение результатов запросов

Для извлечения данных  с помощью оператора SQL SELECT следует просто присво ить значение ctQuery свойству TSQLDataSet.CommandType. В результате в поле свой ства CommandText можно  будет ввести  запрос вида "Select * from Country". Соот ветствующий пример находится на прилагаемом компакт  диске в каталоге QueryData.

Отображение результатов, возвращаемых хранимыми процедурами

При помощи компонента TSQLDataset можно получать наборы данных, возвра

щаемые  хранимыми процедурами InterBase. Например, следующим образом:

CREATE PROCEDURE SELECT_COUNTRIES RETURNS ( RCOUNTRY VARCHAR(15),

RCURRENCY VARCHAR(10)

) AS

BEGIN

FOR SELECT

COUNTRY, CURRENCY FROM COUNTRY

INTO

:rCOUNTRY, :rCURRENCY

DO

ENDSUSPEND;Для этого нужно присвоить свойству TSQLDataset.CommandType значение ctQuery, а свойству  CommandText — значение "select * from SELECT_COUNTRIES". Обратите внимание: имя хранимой процедуры используется точно так же, как и имя таблицы.

Выполнение хранимых процедур

При  помощи компонента TSQLDataset можно  выполнять хранимые процедуры, не возвращающие результата. Для этого  необходимо присвоить свойству  TSQLData- Set.CommandType значение ctStoredProc. В результате поле  свойства TSQLData- set.CommandText в инспекторе объектов примет вид раскрывающегося списка  с пе речнем доступных  хранимых процедур. Теперь в этом списке  можно  выбрать одну из тех процедур, которые не возвращают результата. Соответствующий пример можно найти на прилагаемом компакт  диске  в каталоге ExecSProc. В нем выполняется сле дующая хранимая процедура:

CREATE PROCEDURE ADD_COUNTRY ( ICOUNTRY VARCHAR(15), ICURRENCY VARCHAR(10)

) AS BEGIN

INSERT INTO COUNTRY(COUNTRY, CURRENCY) VALUES (:iCOUNTRY, :iCURRENCY); SUSPEND;

END

Эта  процедура просто добавляет запись  в таблицу  COUNTRY. Для  ее  выполнения вызывается метод TSQLDataset.ExecSQL():procedure TForm1.btnAddCurrencyClick(Sender: TObject);

begin

sqlDSAddCountry.ParamByName(‘ICountry’).AsString :=

edtCountry.Text;

sqlDSAddCountry.ParamByName(‘ICURRENCY’).AsString :=

edtCurrency.Text;

sqlDSAddCountry.ExecSQL(False);

end;

В первую очередь присваиваются значения параметрам хранимой процедуры, а затем  выполняется сама процедура при  помощи метода  ExecSQL(). Обратите внима ние   на  логический  параметр  метода   ExecSQL() (по   умолчанию  имеет   значение True). Он  указывает  на то,  нуждаются  параметры хранимой процедуры в предвари тельной подготовке или нет.

Представление метаданных

При  помощи компонента TSQLDataset можно  получить информацию о самой  ба зе данных.  Для этого  используется процедура TSQLDataset.SetSchemaInfo(), в ко торой  задается требуемый тип  информации о  структуре.   Определение  процедуры SetSchemaInfo имеет следующий вид:

procedure SetSchemaInfo( SchemaType: TSchemaType;

SchemaObjectName, SchemaPattern: string );

Параметр SchemaType определяет тип схемы запрашиваемой информации. Пара метр  SchemaObjectName содержит имя  таблицы или  процедуры, в случае  запроса информации о  столбце или  индексе, а параметр SchemaPattern —  маску  шаблона SQL для фильтрации возвращаемого набора данных.

Табл. 8.2 взята  из интерактивной справочной системы Delphi. В ней  описаны все типы  схем информации, которые можно  получить при помощи процедуры SetSche- maInfo().

Таблица 8.2. Возможные значения параметра SchemaType (по материалам справочной системы Delphi)

Значение SchemaType       Описание

stNoSchema        Информация о схеме не возвращается. Вместо  метаданных с сервера возвращается набор  данных, соответствующий указанному запросу или хранимой процедуре

stables           Возвращается информация  обо  всех  таблицах данных   на сервере, которые удовлетворяют критерию, указанному  в свойстве соединения SQL TableScope

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

Значение SchemaType       Описание

stProcedures          Возвращает информацию обо всех хранимых процедурах

stColumns         Возвращается информация  обо  всех  столбцах  (полях)  в указанной таблице

stProcedureParams Возвращается информация обо всех параметрах указанной хранимой процедуры

stIndexes               Возвращается  информация  обо  всех  индексах  для  указан

ной таблицы

Пример  использования  метода   SetSchemaInfo() находится  на   прилагаемом компакт  диске в каталоге SchemaInfo. Фрагмент программного кода из этого  приме ра представлен в листинге 8.1.

Листинг 8.1. Пример использования метода TSQLDataset.SetSchemaInfo()

procedure TMainForm.Button1Click(Sender: TObject);

begin

sqldsSchemaInfo.Close;

cdsSchemaInfo.Close;

case RadioGroup1.ItemIndex of

0: sqldsSchemaInfo.SetSchemaInfo(stSysTables, ”, ”);

1: sqldsSchemaInfo.SetSchemaInfo(stTables, ”, ”);

2: sqldsSchemaInfo.SetSchemaInfo(stProcedures, ”, ”);

3: sqldsSchemaInfo.SetSchemaInfo(stColumns, ‘COUNTRY’, ”);

4: sqldsSchemaInfo.SetSchemaInfo(stProcedureParams,

‘ADD_COUNTRY’, ”);

5: sqldsSchemaInfo.SetSchemaInfo(stIndexes, ‘COUNTRY’, ”);

end; // case

sqldsSchemaInfo.Open;

cdsSchemaInfo.Open;

end;В приведенном примере для выбора типа  схемы  информации используется  ком понент TRadioGroup. Затем  данный тип  используется при  вызове процедуры Set- SchemaInfo() в качестве значения параметра SchemaType перед  тем,  как открыть набор  данных. Результат отображается при помощи сетки данных TDBGrid.

Компоненты совместимости с прежней версией

Во вкладке  dbExpress палитры компонентов есть  три  компонента, аналогичных компонентам BDE: TSQLTable, TSQLQuery и TSQLStoredProc. Эти компоненты ис пользуются точно так же, как и эквивалентные им компоненты BDE, за исключением того,  что  они  не  могут  использоваться при  работе с двунаправленными наборами данных.  В большинстве случаев для решения поставленных задач  вполне достаточно компонента TSQLDataset.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии