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

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

Вызов ХП из FastReport [D2005, XP]


Страницы:   1 2

девушка ©   (2009-06-17 12:22:00) 

Добрый день!

Помогите пожалуйста, не могу понять в чем туплю.
Хочу в FR вызвать процедуру с параметрами.

В design-time создаю в репорте ADOQuery, цепляю его через frxADOComponent к своему основному коннекшену.

В тексте ADOQuery пишу вызов хранимки. Набор возвращаемых полей он определеяет.
НО!

Если пишу вызов просто процедуры (у которой нет параметров), то все работает.

exec dbo.p_select_PERSON_all


А если пишу вызов процедуры с параметром:

exec dbo.p_select_PERSON 1

то ничего не возвращает. Тот же самый запрос в SQLредакторе возвращает нужные данные.

В чем туплю???

Delphi 2005, FR 4


AndreyV   (2009-06-22 19:20:00) [1]

> [20] Dennis I. Komarov ©   (22.06.09 17:02)
> > Я хочу вынести все запросы в отчет и передавать туда переменные,
> >  а отчет уж пусть сам разбирается что да как...
>
> :) Я поражен логикой...
>
> А давайте праграммировать "на отчетах и т.п." Зыж здорово
> - прикрутил отчет и программа готова  :)

Да нормальная логика - ФР это позволяет, в том его большой плюс, вот у автора, похоже, каша в голове.


Dennis I. Komarov   (2009-06-22 17:02:00) [2]


> Я хочу вынести все запросы в отчет и передавать туда переменные,
>  а отчет уж пусть сам разбирается что да как...

:) Я поражен логикой...

А давайте праграммировать "на отчетах и т.п." Зыж здорово - прикрутил отчет и программа готова  :)


AndreyV   (2009-06-20 22:57:00) [3]

> [18] девушка   (20.06.09 09:15)
> Я хочу вынести все запросы в отчет и передавать туда переменные,
> а отчет уж пусть сам разбирается что да как...

А в [9] что?

Надо назначить обработчик на OnGetValue и в нём передавать значение переменных в ФР.


девушка   (2009-06-20 09:15:00) [4]


> как я вижу, у тебя не тот случай.


вся идея-то какраз в том чтобы вынести логику построения отчета из приложения. Вот у меня в приложении 10 видов отчетов, принимающих 1-2 целочисленых параметра.
Я хочу вынести все запросы в отчет и передавать туда переменные, а отчет уж пусть сам разбирается что да как...


AndreyV   (2009-06-18 16:14:00) [5]

> [9] девушка   (17.06.09 13:38)
> имелось ввиду:
>
> var C: TfrxComponent;
> ...
> C:=frxReport1.FindObject('ADOQuery1');
> if (C <> nil) and (C is TfrxADOQuery) then
>   TfrxADOQuery(C).ParamByName('IdDoc').Value:=DBGrid.DataSource.DataSet.
> FieldValue s['IdDoc'];
> ...
> frxReport1.ShowReport();
>
> ADOQuery - не компонент на форме, а компонент ВНУТРИ ОТЧЕТА

По моему не понимание подходов ФР. Зачем лезть из хоста в "ADOQuery компонент ВНУТРИ ОТЧЕТА"? Ну и создай TADOQuery на форме и сделай всё как обычно, а свяжи с ФР посредством TfrxDBDataSet, или уж всё делай в ФР - TfrxADOQuery обёртка над TADOQuery, для изменения отчёта без перекомпиляции, но, как я вижу, у тебя не тот случай.


Dennis I. Komarov   (2009-06-17 17:05:00) [6]


> Но профайлер видит что запрос был и отработал.

Ну, значит он был, и если был правилен, значит должен был вернуть результат запроса, ну а как с ним FR и куда его девает, это уже на его совести...


девушка   (2009-06-17 16:49:00) [7]

Нет - Катей.


Dennis I. Komarov   (2009-06-17 14:27:00) [8]

Девушку не Виталиком зовут?


девушка   (2009-06-17 14:01:00) [9]

пробовала (запрос уже без параметров)

procedure Page1OnBeforePrint(Sender: TfrxComponent);
begin
 ShowMessage('Page1OnBeforePrint');                                
ADOQuery.Active:=true;
ShowMessage('Page1OnBeforePrint end');    
end;


не помогло.
Но профайлер видит что запрос был и отработал.


девушка   (2009-06-17 13:55:00) [10]

Оказывается, тут дело вообще не в параметрах.

Profiler показывает что запрос вообще не отправляется на сервер.

В дата модуле есть ADOConnection - через который работают все датасеты в программе.
Для FR кидаю на форму frxADOComponents1, указываю там DefaultDatabase мой ADOConnection.
Кидаю на форму компонент frxReport. Создаю новый отчет.
В отчете в разделе Data кидаю ADOQuery. Этот ADOQuery сразу видет мой ADOConnection. У ADOQuery скуль-текст.

Так вот - похоже что где-то глючит вся эта связка и в момент когда я вызываю
frxReport.ShowReport();

Обнавление данных в ADOQuery не происходит :(


Dennis I. Komarov   (2009-06-17 13:45:00) [11]

речь вроде о хранимках шла, зачем ParamByName?

P.S.
 У меня нету FR...


девушка   (2009-06-17 13:38:00) [12]

все-равно нифига не работает :(
параметр присваивает - но показывает пустую страницу


девушка   (2009-06-17 13:38:00) [13]

имелось ввиду:

var C: TfrxComponent;
...
 C:=frxReport1.FindObject('ADOQuery1');
 if (C <> nil) and (C is TfrxADOQuery) then
   TfrxADOQuery(C).ParamByName('IdDoc').Value:=DBGrid.DataSource.DataSet.FieldValue s['IdDoc'];
...
 frxReport1.ShowReport();


ADOQuery - не компонент на форме, а компонент ВНУТРИ ОТЧЕТА


Dennis I. Komarov   (2009-06-17 13:33:00) [14]


> И еще вопрос - на какое событие повесить присвоение параметров?

???


Dennis I. Komarov   (2009-06-17 13:32:00) [15]

:) А у меня FR. если нету, тогда не меняйте...


девушка   (2009-06-17 13:30:00) [16]

Странный глюк - когда создаю Query в уже существующем отчете - ничего не возвращает :(

И еще вопрос - на какое событие повесить присвоение параметров?


девушка   (2009-06-17 13:29:00) [17]

Да нету у меня такого компонента в фаст-репорте :(
Я создаю квери в САМОМ ОТЧЕТЕ


Dennis I. Komarov   (2009-06-17 13:13:00) [18]

Все-таки Query замените...


девушка   (2009-06-17 13:11:00) [19]

Извините, все работает - просто какое-то сочетание моих внутренних глюков.
Создала чистый отчет, создала новые квери - все берет.
Осталось только параметры в отчет передаваить и все зашибись будет.


Dennis I. Komarov   (2009-06-17 13:08:00) [20]

1. Query -> DataSet
2. Вызвать процедуру скажем из QA(или аналоги)


Страницы:   1 2

Наверх

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