Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамическое создание полей в хранимой процедуре [D6, FireBird 2.1]


Dizzzel ©   (2008-05-16 10:06:00) 

Здравствуйте уважаемые мастера!
Нужно составить отчет за определенный период времени. Интервал задается. Условие таково, что каждый день должен быть выведен в виде столбца. Подскажите пожалуйста, как можно в хранимой процедуре добавлять выходные значения без перекомпиляции. Говорят такое возмозможно через EXECUTE BLOCK, но ни одного более-менее внятного примера не нашел.
Другим способ построить отчет не предоставляется возможным.
Сервер БД FB 2.1
Зарание спасибо.


Сергей М.   (2008-05-16 14:11:00) [1]


> можно по шагам


А тут и шагов никаких не надо - если токен неизвестен, то версия твоего ФБ-сервера меньше 2-й, с которой собссно и стала доступна эта фича. Он, сервер, просто не понимает что ты от него хочешь в предложении EXECUTE BLOCK, о чем честно и рапортует возвратом этой ошибки.


> по кросс-отчетам можно по подробнее?


В палитре компонентов есть стандартная закладка Decision Cube, в справке имеется назначение и описание компонентов с этой закладки.

Почитай для начала.


Dizzel   (2008-05-16 13:05:00) [2]


> Сергей М. ©   (16.05.08 12:30) [4]


А можно по шагам, что вы делаете? :)
А по кросс-отчетам можно по подробнее?


Сергей М.   (2008-05-16 12:30:00) [3]

У меня не ругается.
Что я делаю неправильно ?
Да и не EXECUTE BLOCK тебе нужен, не решает он твоей задачи.
Обычны кросс-отчетт6ебе нужен, а не выкрутасы с EXECUTE BLOCK.


Dizzel   (2008-05-16 12:13:00) [4]


> Johnmen ©   (16.05.08 10:38) [2]
>
> http://www.delphimaster.ru/cgi-bin/forum.pl?id=1210235833&n=1

PEAKTOP ©   (08.05.08 19:26) [4]
http://firebird.name/doku.php?id=execute_block


По данной ссылке есть пример :



execute block returns (result varchar(30))
AS
declare variable vtest integer;
begin
 UPDATE rdb$functions fr
    SET fr.rdb$function_name = fr.rdb$function_name
  WHERE 1 = 1;
 result = 'Обновили '||row_count||' записей';
 suspend;

 UPDATE rdb$functions fr
    SET fr.rdb$function_name = fr.rdb$function_name
  WHERE fr.rdb$function_name = 'test';
 result = 'Обновили '||row_count||' записей';
 suspend;

 FOR SELECT fr.rdb$function_type
       FROM rdb$functions fr
      WHERE fr.rdb$function_name LIKE 'RDB$%'
       INTO :vtest do
 begin
 end

 result = 'Получили '||row_count||' записей';
 suspend;
end


Но при попытке выполнить его через IbExpert в SQL Editor-e или же включив в тело хранимой процедуры IbExpert ругается на первую строчку данного примера

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 9.
block.


В чем может быть дело?


Johnmen   (2008-05-16 10:38:00) [5]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1210235833&n=1


DrPass   (2008-05-16 10:14:00) [6]


> Подскажите пожалуйста, как можно в хранимой процедуре добавлять
> выходные значения без перекомпиляции. Говорят такое возмозможно
> через EXECUTE BLOCK

Через EXECUTE BLOCK можно менять входные (грубо говоря) значения. Либо вообще отказаться от использования хранимых процедур, и динамически строить SQL.
А вообще, такая задача обычно легко решается не коверканьем хранимых процедур, а просто созданием кросс-отчета в генераторе отчетов. Ты ж, надеюсь, им пользуешься?


Наверх

Титульная страница Поиск, карта сайта Написать письмо