![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте!
Работаю с Firebird 2.0 и Delphi. Есть необходимость вызвать хранимую процедуру из базы. Текст ХП: Код:
create procedure CLIENT_AND_ORDERS (
NAME_OF_CLIENT varchar(100))
returns (
NAME varchar(100),
ORDER_NUMBER integer,
DATE_BEGIN date)
as
declare variable BUF integer;
begin
select count(*) from client
where client.fio like :name_of_client||'%' into :buf;
if (:buf=0) then exception no_client;
else
for select client.fio, orders.order_number, orders.date_begin
from client join orders on client.passport_number_c = orders.passport_number_c
where client.fio like :name_of_client||'%'
into :name, :order_number, :date_begin
do
suspend;
endКод:
IBSQL1.SQL.Clear;
IBSQL1.SQL.Add('execute procedure client_and_orders (:nc)');
IBSQL1.Prepare;
IBSQL1.ParamByName('nc').asString:=namec;
IBSQL1.ExecQuery;
i:=1;
while not IBSQL1.Eof do
begin
stringgrid1.Cells[0,i]:=Datetimetostr(IBSQL1.Current.ByName('date_begin').AsDateTime);
stringgrid1.Cells[1,i]:=inttostr(IBSQL1.Current.ByName('order_number').AsInteger);
IBSQL1.Next;
stringgrid1.RowCount:=stringgrid1.RowCount+1;
inc(i);
end;Так вот, если вызываю процедуру в IBExpert - все отлично работает, но при вызове из программы IBSQL1.EOF возвращает true, т.е. результат не возвращается... Пробовал использовать IBQuery вместо IBSQL, результат тот же..( Есть идеи в чем может быть проблема? Последний раз редактировалось Admin, 14.01.2011 в 10:56. |
|
#2
|
|||
|
|||
|
Вобщем проблема решена. Пишу на тот случай, если кто-либо столкнется с такой же проблемой.
Для получения результата нужно обращаться к процедуре не execute procedure, а через обычный select, а имя входной переменной должно соответствовать той, что задана в БД. Вот так: Код:
IBSQL1.SQL.Clear;
IBSQL1.SQL.Add('select * from client_and_orders (:name_of_client)');
IBSQL1.Prepare;
IBSQL1.ParamByName('name_of_client').asString:=namec;
IBSQL1.ExecQuery; |