Delphi 3 и создание приложений баз данных

         

Вызов процедур выбора в приложении клиента


Процедуры выбора могут возвращать несколько значений одного и того же выходного параметра или группы выходных параметров. Возврат текущего значения выходных параметров соответствует возврату строки. Таким образом, процедура выбора возвращает НД, состоящий в общем случае из нескольких строк. Для выдачи каждого значения выходных параметров в вызывающее приложение в хранимой процедуре выбора применяется оператор SUSPEND. Формирование строки результирующего НД (то есть текущих значений выходных параметров) производится операторами SELECT...INTO или FOR...SELECT.

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

ЗАМЕЧАНИЕ.

Для обращения к хранимой процедуре выбора может использоваться и компонент TStoredProc, открываемый при помощи метода Open. Однако в общем случае возможность обращения к процедуре выбора из компонента TStoredProc определяется особенностями SQL-сервера. К хранимым процедурам выбора, определенным в Borland InterBase, рекомендуется обращаться из оператора SELECT, который помещается в свойство SQL компонента TQuery.

Пример.

Выше приводилась процедура выбора RASHOD_TOVARA, которая выдает все расходы товара для конкретного товара, определяемого содержимым входного параметра IN_TOVAR:

CREATE PROCEDURE RASHOD_TOVARA(IN_TOVAR VARCHAR(20))

RETURNS (OUT_DAT DATE, OUT_POKUP VARCHAR(20), OUT_KOLVO

INTEGER) AS

BEGIN

FOR SELECT DAT_RASH, POKUP, KOLVO FROM RASHOD WHERE TOVAR = : IN_TOVAR

INTO :OUT_DAT, :OUT_POKUP, :OUT_KOLVO

DO

SUSPEND;

END

Для того чтобы обратиться к данной процедуре из клиентского приложения, разработанного на Delphi, создадим форму (рис. 28.1) разместив в ней:

1. компонент TDatabase, осуществляющий управление соединением с удаленной БД;

2. компонент TTable, ассоциированный с таблицей TOVARY, для выбора названия товара для передачи в хранимую процедуру как входного параметра;



3. компонент TQuery;

4. компонент TButton для инициации доступа к процедуре.

В свойстве SQL компонента TQuery необходимо определить SQL-запрос на обращение к процедуре:

SELECT *

FROM RASHOD_TOVARA(:PARAM1)

а в свойстве Params компонента TQuery необходимо указать тип параметра PARAM1 как String. В обработчике нажатия кнопки происходит присваивание параметру значения текущего названия товара из компонента TTable, после чего компонент TQuery активизируется:

procedure TForm1.ButtonlClick(Sender: TObject);

begin

Query1.Close;

Query1.ParamByName('param1').Value :=

Table1.FieldByName('TOVAR').Value;

Query1.Open; end;

Результаты работы приложения показаны на рисунке 28.2.



Содержание раздела