![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов ХП из FastReport [D2005, XP]
девушка © (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(или аналоги)