|
|
Регистрация | << Правила форума >> | 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; |