Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OAP_Vopros_8_Rabota_s_komponentom_TQuery.doc
Скачиваний:
6
Добавлен:
30.04.2015
Размер:
175.62 Кб
Скачать

Выполнение динамических запросов Понятие динамического запроса

Динамическим (параметрическим) является запрос, в SQL-операторе которого в процессе выполнения приложения могут изменяться отдельные его составляющие. В этом случае изменяемая часть оператора оформляется как параметры.

Select * from stud1 where (b1=5) and (nom=”3”)

Для формирования динамических запросов применяется только один компонент TQuery, указав в его свойстве SQL оператор, в котором изменяющиеся части заменены на параметры:

Select * from stud1 where (b1=:идентиф1) and (nom=:идентиф2)

Под параметром понимается имя, предваренное кавычками.

В динамических запросах параметры всегда заменяют значения, которые могут меняться в процессе выполнения. Имена параметров произвольны и могут не совпадать со значениями полей таблицы, которым они обычно ставятся а соответствие:

Формирование динамического запроса

Для формирования динамического запроса необходимо:

1. Выбрать для существующего компонента TQuery в инспекторе объектов свойство SQL и нажать кнопку текстового редактора;

2. В появившемся окне текстового редактора набрать текст SQL – запроса с параметрами;

3. Выбрать в инспекторе объектов свойство Params и нажать кнопку в строке данного свойства; в появившемся окне будут показаны имена параметров, введенных а текст динамического SQL-оператора; список параметров отслеживается автоматически всякий раз при изменении содержимого свойства SQL;

4. Каждому параметру из списка необходимо поставить в соответствие определенный тип и, если нужно, стартовое значение в поле Value.

Переключатель Null Value позволяет указать в качестве стартового значения NULL. Стартовые значения присваивать необязательно, однако каждому параметру необходимо поставить в соответствие определенный тип данных, иначе попытка открытия компонента TQuery приведет к возбуждению исключения.

5. Компонент TQuery можно сделать активным (установить свойство Асtive=True) на стадии разработки приложения только в том случае, если каждому из параметров присвоено стартовое значение.

Компонент TQuery, содержащий динамический запрос, если его свойство Active установлено на этапе разработка в значение True, открывается при создании формы, содержащей данный компонент TQuery. При этом он использует значения параметров, установленные по умолчанию (стартовые значения). Если хотя бы одному из параметров не назначено стартовое значение, выдается ошибка.

Если компонент TQuery, содержащий динамический запрос, не открыт в момент создания формы, его можно открыть в некоторый момент времени, программно установив значения параметров и выполнив метод Open или установив свойство Active в True.

Впоследствии всякий раз, когда необходимо изменить значения параметров запроса (что приведет к выдаче другого НД), нужно закрыть компонент TQuery, программно присвоить значения параметрам и повторно открыть компонент.

Установка значений параметров динамического запроса во время выполнения

Самым распространенным способом указания текущих значений параметров является их ввод пользователем в поля ввода (компоненты TEdit и другие) и последующее программное назначение параметров.

Параметры компонента TQuery доступны через его свойство

property Params[Index: Word]:TParams;

Это свойство является набором параметров, где каждый параметр определяется индексом в диапазоне 0..ParamCount-1, где ParamCount есть число параметров, которое можно получить с помощью свойства ParamCount компонента TQuery: property ParamCount: Word;

Обратиться к конкретному параметру можно:

1) указав индекс параметра в свойстве Params компонента TQuery, например, Params[0]. Порядок следования параметров аналогичен показываемому в окне редактора параметров (активизирующегося после нажатия кнопки в строке свойства Params инспектора объектов);

2) через метод компонента TQuery

function ParamByName (const Value: string): TParam;

где Value определяет имя параметра.

Для установки значения конкретного параметра используется одно из свойств компонента TParamAxNNN(AsSirmg, Aslnteger и т.д.) или более общее свойство property Value: Variant;

Например

Query1.Params[0].AsDate:=StrToDate(Edit1.Text);

Query1.ParamByName(‘fio’).Value:=Edit2.Text;

procedure TForm_DinZapr.Button1Click(Sender: TObject);

begin

Query1.Close;

Query1.Params[0].asinteger:=StrToInt(Edit1.Text);

Query1.Params[1].asstring:=Edit2.Text;

Query1.Open;

end;