void_fastcall TFormI::ButtonlClick(TObject *Sender) {
// Деактивировать предыдущий запрос, если он имел место Queryl->Close () ;
if (!Queryl->Prepared)
Queryl->Prepare(); //
подготовить запрос // Заменить значение параметра на введенное пользователем Queryl->ParamByName("FirstName")->AsString =
Editl->Text.c_str() ;
try
{
Query 1 ->0pen(); // выполнить команду SQL }
catch(EDBEngineError* dbError) //
обработка ошибок BDE {
for (int i=0; i<dbError->ErrorCount; i++)
MessageBox(0, dbError[i].Message.c_str(), "SQL Error", MB_OK) ;
} }
Листинг 5.5. Изменение значения параметра динамического запроса.
Рис. 5.13 показывает работу предыдущего примера: пользователь вводит значение параметра FirstName и в результате выполнения запроса получает список всех служащих с указанным именем.
Рис. 5.13. Результат выполнения динамического запроса с параметром.
DataSource указывает на источник другого набора данных, отличный от источника данного запроса, из которого вам надо выбрать значения текущего поля. Объект запроса будет сравнивать имя параметра в команде SQL с именами полей дочернего набора данных. Когда имена совпадают, параметр автоматически приобретает значение соответствующего поля. Следующая процедура иллюстрирует процесс создания формы, в которой запрос к таблице заказчиков CUSTOMER соединяется с таблицей заказов ORDERS по номеру заказчика CustNo:
1. Поместите компоненты TQuery и TTable на форму и установите псевдоним
BCDEMOS в их свойствах DatabaseName.
void _fastcall TPormI::DataSource2DataChange(TObject
*Sender, TField *Field) {
// Связь запроса с таблицей ORDERS
установлена? if (Queryl->DataSource != NULL)
return; // да, возврат // Деактивировать предыдущий запрос, если он имел место Queryl->Close() ;
if (!Queryl->Prepared)
Queryl->Prepare(); //
подготовить запрос // Выбрать значение параметра запроса из поля таблицы Queryl->ParamByName("CustNo")->AsInteger =
Tablel->Fields[1]->AsInteger;