3 КОМПОНЕНТЫ DATA ACCESS,
ИСПОЛЬЗУЕМЫЕ В ПРИЛОЖЕНИЯХ "КЛИЕНТ/СЕРВЕР"
Компоненты TStoredProc, TDatabase, TUpdateSQL, TBatchMove и TSession употребляются, как правило, намного реже, чем ТТаЫе, TQuery и TDataSource, однако в ряде случаев их применение позволяет эффективно реализовывать возможности, предоставляемые пользователю серверными СУБД.
3.1 Компонент TStoredProc
Компонент TStoredProc применяется для выполнения из приложений C++ Builder хранимых процедур, содержащихся на серверах баз данных. Хранимая процедура представляет собой скомпилированную программу на процедурном расширении языка SQL, характерном для выбранного сервера. Хранимые процедуры могут возвращать наборы данных, основанные на выполнении запроса, если такие процедуры поддерживаются выбранным сервером (в этом случае TStoredProc может использоваться так же, как и TQuery, и, так как при этом не требуется компиляция запроса сервером, применение TStoredProc может повысить производительность выполнения выбора данных), могут возвращать числовые параметры (в этом случае эти параметры можно использовать в приложении) и могут ничего не возвращать, а выполнять какие-либо действия на сервере баз данных. Хранимые процедуры также могут иметь входные параметры, передаваемые им из клиентского приложения.
Основные свойства компонента TStoredProc: DatabaseName - имя (alias) базы данных, в которой содержится данная процедура, StoredProcName -имя хранимой процедуры, Params (массив компонентов TParams) - параметры хранимой процедуры, а также ряд свойств, унаследованных от TDataSet: Active, Fields, Eof, Bof, State и др. Основные" методы: ЕхесРгос -выполняет хранимую процедуру, ParamByName - возвращает параметр, используя его имя. TStoredProc обладает также рядом методов, унаследованных от TDataSet: Append, AppendRecord, Close, Open, Delete, Edit, Post и т. д.
Рассмотрим простейший пример использования хранимой процедуры. Для этой цели воспользуемся локальным сервером IB Database, входящим в комплект поставки C++ Builder. Создадим новый проект, на главную форму которого поместим компонент TStoredProc, компонент TEdit и компонент TButton. Установим значение свойства DatabaseName компонента
42
Компоненты Data Access, используемые в приложениях клиент/сервер
StoredProcl равным имени псевдонима IB Database, созданного в предыдущей главе. Далее щелкнем на колонке значений напротив свойства StoredProcName, после чего на экране должен появиться стандартный диалог для ввода имени пользователя и пароля (рис. 3.1).
Database Login
Database:
User Name: Password:
IBLOCAL
USER101
OK       I
Cancel
J
Рис. 3.1. Диалог регистрации пользователя
По умолчанию при установке InterBase системный администратор базы данных имеет имя SYSDBA и пароль MASTERKEY (в дальнейшем его можно изменить).
После соединения с сервером (он должен перед этим быть запущен) напротив имени свойства StoredProcName появится выпадающий список имеющихся в базе данных хранимых процедур. Выберем для примера процедуру PROC2, созданную в предыдущей главе и вычисляющую сумму значений поля SAL, созданной в IB Database таблицы ЕМР:
CREATE  PROCEDURE   PROC2     RETURNS   (       A  INTEGER)   AS
BEGIN
SELECT  SUM(SAL)   FROM  EMP   INTO A;
END
При отсутствии данной процедуры или таблицы можно создать аналогичную процедуру, руководствуясь описанием этого процесса из гл. 2.
Выбрав свойство Params, можно просмотреть параметры хранимой процедуры с помощью соответствующего редактора свойств (рис. 3.2).
Создадим обработчик события OnClick для кнопки Button 1:
void _fastcall TForml::Button1Click(TObject  *Sender)
{
StoredProd ->ExecProc();
Editl ->Text=StoredProc1->Params->Items[0]->AsString;
}
43