Учись программированию на C++ Builder бесплатно!

Для настройки статического SQL-запроса во время выполнения приложения в его тексте можно использовать параметры. Параметр - это специальная переменная, перед именем которой ставится двоеточие в тексте запроса. Двоеточие не является частью имени параметра и ставится только в тексте запроса. Как и для обычных переменных программы, в процессе выполнения приложения вместо параметра подставляется его значение. Параметры удобно использовать для передачи в текст SQL-запроса внешних значений. Например, если необходимо вывести фамилии и должности сотрудников с датой рождения более поздней, чем указанная в редакторе Edit1, то организовать формирование и выполнение динамического запроса можно так:

void __fastcall TForm1::Button3Click(TObject *Sender)
{
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("SELECT Name, Post FROM SEmployee.db");
Query1->SQL->Add("WHERE Birthday > " + Edit1->Text);
Query1->Open();
}

Здесь дата рождения в редакторе Edit1 должна быть указана в одиночных кавычках.

С помощью параметров эту задачу можно решить проще, например, через включение в текст запроса параметра prmSalary:

SELECT Name, Post, Birthday FROM SEmployee.db WHERE Birthday >= : Birthday

Система С++ Builder автоматически учитывает все указанные в SQL-запросе параметры в специальном списке параметров, являющемся для набора данных Query значением свойства Params типа TParams, представляющим собой массив. Это свойство позволяет получить доступ к каждому параметру как при разработке, так и при выполнении приложения. Чтобы обратиться к параметру во время выполнения приложения, следует указать его номер (индекс) в списке параметров или обратиться по имени параметра. Например, для обращения ко второму параметру указывается params[1]. На этапе разработки приложения можно вызвать Редактор параметров в Инспекторе объектов. Тип каждого параметра целесообразно указать в свойстве DataType типа TFieldType.

В последующем перед выполнением запроса вместо параметра необходимо подставить его значение, в данном случае из редактора Edit1. Далее приведен код обработчика события нажатия кнопки Button1, выполняющий указанное действие.

void __fastcall TForm1::Button2Click(TObject *Sender)
{
Query1->Close();
// доступ к параметру по индексу
Query1->Params->Iteiris[0]->AsDate = Edit1->Text;
Query1->ParamByName("Birthday")->AsDate = Edit1->Text;
Query1->Open();
}

Для доступа к параметру во время выполнения приложения используется метод ParamByName, отличающийся от аналогичного метода FieldByName тем, что вместо имени поля указывается имя параметра.

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

Статические запросы, в которых использованы параметры, иногда также называют изменяющимися (т.е. фактически динамическими).

Обычно текст SQL-запроса проверяется и выполняется при каждом открытии набора данных Query. Если текст запроса при выполнении приложения не изменяется, то его можно предварительно подготовить, а после этого только использовать такой подготовленный к выполнению запрос. Это позволяет ускорить обработку статических запросов, в том числе имеющих параметры. Например:

if(!Query1->Prepared)
{
Query1->Close{);
Query1->Prepare();
Query1->Open();
}

Если текст подготовленного к выполнению запроса изменился (к изменению значений параметров это не относится), то автоматически вызывается метод UnPrepare, и свойству Prepared устанавливается значение false.

Поделиться