Параметры

Previous  Top  Next

    
 

 

Параметры

 

Многие компоненты ADO, инкапсулирующие набор записей, должны обеспечивать применение параметров запросов. Для этого в них используется специальный класс TParameters.

 

Для каждого параметра из коллекции класса TParameters создается отдельный класс TParameter.

 

Этот класс является наследником класса коллекции TCollection и инкапсулирует индексированный список отдельных параметров (см. ниже). Напомним, что для работы с параметрами обычных запросов в компонентах запросов и хранимых процедур используется класс TParams (например в компонентах dbExpress), также происходящий от класса коллекции.

 

Методы этих двух классов совпадают, а свойства имеют некоторые отличия. Для представления параметров команд в ADO имеется специальный объект параметров, который активно используется в процессе работы компонентов АDO, инкапсулирующих набор данных.

 

Поэтому для компонентов ADO в VCL был создан собственный класс параметров.

 

Класс TParameters

 

 

 

Главное, для чего предназначен класс TParameters, содержать список параметров. Индексированный список параметров представлен свойством property Items[Index: Integer]: TParameter; Текущие значения параметров можно получить из индексированного свойства

 

property ParamValues[const ParamName: String]: Variant;

 

При этом доступ к конкретному значению осуществляется по имени параметра:

 

Editl.Text := ADODataSet.Parameters.ParamValues['ParamOne'];

 

Список параметров можно обновлять при помощи методов

 

function AddParameter: TParameter;

 

и

 

function CreateParameter(const Name: WideString; DataType: TDataType;

Direction: TParameterDirection; Size: Integer; Value: OleVariant): TParameter;

 

Первый метод просто создает новый объект параметра и добавляет его к списку. Затем необходимо задать все свойства нового параметра:

 

var NewParam: TParameter;

 

NewParam := ADODataSet.Parameters.AddParameter;

NewParam.Name := 'ParamTwo';

NewParam.DataType := ftlnteger; 

NewParam.Direction := pdlnput;

NewParam.Value := 0;

 

Метод CreateParameter создает новый параметр и определяет его свойства: 

 

Name имя параметра;

DataType тип данных параметра, соответствующий типу поля таблицы БД (тип TFieldType);

Direction тип параметра, в дополнение к стандартным типам dUnknown, pdlnput, pdOutput, pdlnputOutput,тип TParameterDirection имеет дополнительный тип pdReturnValue, определяющий любое возвращаемое значение;

size максимальный размер значения параметра; 

value значение параметра.

При работе с параметрами полезно вызывать их, используя имена, а не абсолютные индексы в списке. Для этого можно использовать метод

 

function ParamByName(const Value: WideString): TParameter;

 

Список параметров всегда должен соответствовать запросу или хранимой процедуре. Для обновления списка используется метод

 

procedure Refresh;

 

Также вы можете создать список параметров для не связанного с данным объектом параметров запроса. Для этого используется метод

 

function ParseSQL(SQL: String; DoCreate: Boolean): String;

 

где DoCreate определяет, удалять ли перед анализом существующие параметры.

 

 

 

Класс TParameter

 

 

 

Класс TParameter инкапсулирует отдельный параметр. Имя параметра определяется свойством

 

property Name: WideString;

 

Тип данных, которому должно соответствовать его значение, задается свойством

 

TDataType = TFieldType;

property DataType: TDataType;

 

И так как параметры взаимодействуют с полями таблиц БД, то тип данных параметров совпадает с типами данных полей. От типа данных зависит размер параметра

 

property Size: Integer;

 

который может быть изменен для строкового или символьного типа данных и им подобных.

 

Само значение параметра содержится в свойстве

 

property Value: OleVariant; 

 

А свойство

 

type

 

TParameterAttribute = (paSigned, paNullable, paLong);

 

TParameterAttributes = set of TParameterAttribute; property Attributes: TParameterAttributes;

 

контролирует значение, присваиваемое параметру:

 

paSigned значение может быть символьным;

paNullable значение параметра может быть пустым;

paLong значение может содержать данные типа BLOB.

Тип параметра задается свойством

 

type TParameterDirection = (pdUnknown, pdlnput, pdOutput, pdlnputOutput, pdReturnValue);

 

property Direction: TParameterDirection;

 

pdUnknown неизвестный тип, источник данных попытается определить его самостоятельно;

 

pdinput входной параметр, используется в запросах и хранимых процедурах;

 

pdOutput выходной параметр, используется в хранимых процедурах;

 

pdlnputOutput входной и выходной параметр одновременно, используется в хранимых процедурах;

 

pdReturnValue параметр для передачи значения.

 

Если параметр должен передавать большие бинарные массивы (например, изображения или файлы), то значение параметра можно загрузить, используя методы

 

procedure LoadFromFile(const FileName: String; DataType: TDataType);

 

И

 

procedure LoadFromStream(Stream: TStream; DataType: TDataType);