Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.01.2011, 10:50
SaNeX SaNeX вне форума
Прохожий
 
Регистрация: 14.01.2011
Сообщения: 2
Репутация: 10
По умолчанию Вызов хранимой процедуры

Здравствуйте!
Работаю с 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  
Старый 16.01.2011, 08:39
SaNeX SaNeX вне форума
Прохожий
 
Регистрация: 14.01.2011
Сообщения: 2
Репутация: 10
По умолчанию

Вобщем проблема решена. Пишу на тот случай, если кто-либо столкнется с такой же проблемой.
Для получения результата нужно обращаться к процедуре не 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;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:55.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter