Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

повторное использование отчета (Qreport)

2.1K
02 февраля 2005 года
greyich
117 / / 02.02.2005
народ! помогите кто-нибудь с Quickrep!

Создал формочку с QuickRep и там QRBand (тип rbDetail - как положено) c парой контролов QRDBText. Данные для него беруться из процедуры ADOStoredProc. Проблема в том, что отчет надо показывать с разными наборами данных. А после того как один раз туда пересылаются данные(результат ADOStoredProc), их больше не изменить.

Подскажите как можно обнулить (заново инициализировать, обновить, очистить) QRDBText!
259
02 февраля 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by greyich
народ! помогите кто-нибудь с Quickrep!

Создал формочку с QuickRep и там QRBand (тип rbDetail - как положено) c парой контролов QRDBText. Данные для него беруться из процедуры ADOStoredProc. Проблема в том, что отчет надо показывать с разными наборами данных. А после того как один раз туда пересылаются данные(результат ADOStoredProc), их больше не изменить.

Подскажите как можно обнулить (заново инициализировать, обновить, очистить) QRDBText!


Используй событие BeforePrint. В нем выполни заново свою процедуру.

2.1K
03 февраля 2005 года
greyich
117 / / 02.02.2005
Цитата:
Originally posted by AlexandrVSmirno

Используй событие BeforePrint. В нем выполни заново свою процедуру.



не помогло :( . Может у меня код не так написан?
Form1->ADOSearch1->Prepared = true;
Form1->ADOSearch1->Parameters->operator [](1)->Value= Form1->DBEdit1->Text;
Form1->ADOSearch1->Active = true;
Form1->ADOSearch1->CursorType = ctStatic;
Form1->ADOSearch1->ExecProc();


Процедура работает правильно, параметр до нее "доходит". сам случай явно тривиальный. Может кто-нибудь уже сталкивался?

259
04 февраля 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by greyich


не помогло :( . Может у меня код не так написан?
Form1->ADOSearch1->Prepared = true;
Form1->ADOSearch1->Parameters->operator [](1)->Value= Form1->DBEdit1->Text;
Form1->ADOSearch1->Active = true;
Form1->ADOSearch1->CursorType = ctStatic;
Form1->ADOSearch1->ExecProc();


Процедура работает правильно, параметр до нее "доходит". сам случай явно тривиальный. Может кто-нибудь уже сталкивался?


Приведи текст подробнее. Как запускаешь отчет?, что делаешь в отчете?

ЗЫ И попробуй перед Preview() сделать Prepare()

368
04 февраля 2005 года
rostyslav
629 / / 13.07.2004
Цитата:
Originally posted by greyich
не помогло :( . Может у меня код не так написан?
Form1->ADOSearch1->Prepared = true;
Form1->ADOSearch1->Parameters->operator [](1)->Value= Form1->DBEdit1->Text;
Form1->ADOSearch1->Active = true;
Form1->ADOSearch1->CursorType = ctStatic;
Form1->ADOSearch1->ExecProc();


Процедура работает правильно, параметр до нее "доходит". сам случай явно тривиальный. Может кто-нибудь уже сталкивался?


Этот код нужно поместить скорей всего в BeforePrint событие Band-а

259
04 февраля 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by AlexandrVSmirno

Используй событие BeforePrint. В нем выполни заново свою процедуру.


Я о том - же и говорил. Но greyich утверждает, что не проходит, хотя это странно.

368
04 февраля 2005 года
rostyslav
629 / / 13.07.2004
Цитата:
Originally posted by AlexandrVSmirno
Я о том - же и говорил. Но greyich утверждает, что не проходит, хотя это странно.

Если не проходит, то скорей всего значение DBEdit1 не меняется во время печати.
Или же, если все нормально, то нужно бы заменить QRDBText на QRLabel и в OnValue событии этого компонента выполнить этот код и присвоить результат вручную параметру Value.

2.1K
04 февраля 2005 года
greyich
117 / / 02.02.2005
DBEdit1 меняется. я выводил через showmessage(несколько банально, правда) его значение и проверял.
на Form1 есть кнопка с кодом:

Form1->ADOStoredProc1->Prepared = true;
Form1->ADOStoredProc1->Parameters->operator [](1)->Value= Form1->DBEdit1->Text;
Form1->ADOStoredProc1->Active = true;
Form1->ADOStoredProc1->CursorType = ctStatic;
Form1->ADOStoredProc1->ExecProc();
Form4->QuickReport1->Prepare();
Form4->QuickReport1->Preview();

где StoredProc1 - компонент, обращающийся к хранимой процедуре из SQL сервера. Процедура рабочая (лично проверял 8) ).
Form4 - содержит QuickRep1, QRBand (со значением rbDetail) и QRDBText. У всех (кроме QRBand) свойство Dataset настроено на Form1->ADOStoredProc1.
QRDBText->DataField = "поле из запроса";

Первый раз отчет генерится абсолютно верно - QRBand повторяется столько раз сколько нужно. но когда я еще раз жму на кнопку запускается этот же отчет со старыми данными. Хотя в процедуру переслалось новое значение и она по идее сработала и вернула другой набор данных. :{

задницей чую - здесь гдето маленькая банальность, но где найти не могу. Все свойства отчета прописаны мышкой через Object Inspector.

HELP!
2.1K
04 февраля 2005 года
greyich
117 / / 02.02.2005
пробовал поместить такой код в события:

QuiсkRep::BeforePrint - такая же бодяга
QRBand::BeforePrint - вообще не показывает ничего
события onneeddata тоже ничего не дали.

ЗЫ: все статьи в интернете по поводу отчетов в builder - одна и таже статья за авторством натальи елмановой!
259
04 февраля 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by greyich
DBEdit1 меняется. я выводил через showmessage(несколько банально, правда) его значение и проверял.
на Form1 есть кнопка с кодом:

Form1->ADOStoredProc1->Prepared = true;
Form1->ADOStoredProc1->Parameters->operator [](1)->Value= Form1->DBEdit1->Text;
Form1->ADOStoredProc1->Active = true;
Form1->ADOStoredProc1->CursorType = ctStatic;
Form1->ADOStoredProc1->ExecProc();
Form4->QuickReport1->Prepare();
Form4->QuickReport1->Preview();

где StoredProc1 - компонент, обращающийся к хранимой процедуре из SQL сервера. Процедура рабочая (лично проверял 8) ).
Form4 - содержит QuickRep1, QRBand (со значением rbDetail) и QRDBText. У всех (кроме QRBand) свойство Dataset настроено на Form1->ADOStoredProc1.
QRDBText->DataField = "поле из запроса";

Первый раз отчет генерится абсолютно верно - QRBand повторяется столько раз сколько нужно. но когда я еще раз жму на кнопку запускается этот же отчет со старыми данными. Хотя в процедуру переслалось новое значение и она по идее сработала и вернула другой набор данных. :{

задницей чую - здесь гдето маленькая банальность, но где найти не могу. Все свойства отчета прописаны мышкой через Object Inspector.

HELP!


Ну так а так пробовал

 
Код:
void __fastcall QReport::BeforePrint(...)
{
   Form1->ADOStoredProc1->Prepared = true;
   Form1->ADOStoredProc1->Parameters->operator [](1)->Value=    Form1->DBEdit1->Text;
   Form1->ADOStoredProc1->Active = true;
   Form1->ADOStoredProc1->CursorType = ctStatic;
   Form1->ADOStoredProc1->ExecProc();
}
368
04 февраля 2005 года
rostyslav
629 / / 13.07.2004
неисключено, что нужно
 
Код:
Form1->ADOStoredProc1->Parameters->operator [](1)->Value= Form1->DBEdit1->Text;
 Form1->ADOStoredProc1->Prepared = true;
 Form1->ADOStoredProc1->CursorType = ctStatic;
 Form1->ADOStoredProc1->Active = true;
 Form4->QuickReport1->Prepare();
 Form4->QuickReport1->Preview();
2.1K
07 февраля 2005 года
greyich
117 / / 02.02.2005
Цитата:
Originally posted by AlexandrVSmirno

Ну так а так пробовал
 
Код:
void __fastcall QReport::BeforePrint(...)
{
   Form1->ADOStoredProc1->Prepared = true;
   Form1->ADOStoredProc1->Parameters->operator [](1)->Value=    Form1->DBEdit1->Text;
   Form1->ADOStoredProc1->Active = true;
   Form1->ADOStoredProc1->CursorType = ctStatic;
   Form1->ADOStoredProc1->ExecProc();
}



я точно так и пробовал. результат тот же. отчет формируется один раз и в него фигачаться данные. и потом переписать их уже неполучается... я уже впал в транс... P(
пробовал заново сделать отчет - пофигу. либо я повторяю свою ошибку, либо тот же глюк...

259
07 февраля 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by greyich


я точно так и пробовал. результат тот же. отчет формируется один раз и в него фигачаться данные. и потом переписать их уже неполучается... я уже впал в транс... P(
пробовал заново сделать отчет - пофигу. либо я повторяю свою ошибку, либо тот же глюк...


Это похоже что-то с ADO. Для начала просто попробуй закрыть соединение и снова его открыть перед вызовом процедуры.

ЗЫ А на фига ты репорт на form4 посадил?

368
07 февраля 2005 года
rostyslav
629 / / 13.07.2004
Цитата:
Originally posted by greyich

я точно так и пробовал. результат тот же.


Prepared = true; вызывает связывание параметров.

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

Active = true; выполняется SQL выражение. После этого задается тип курсора. Тоже нужно поменять местами.

Active = true и ExecProc() - это одно и то же. Разница только в том, что при ExecProc(), кроме результирующего набора, через параметры возвращаются какие-то значения. Т.е. одно из них лишнее.

Но наверно главная ошибка, что перед присвоением параметра, ADOQuery не закрывается.

 
Код:
Form1->ADOStoredProc1->Active = false;
Form1->ADOStoredProc1->Parameters->operator [](1)->Value= Form1->DBEdit1->Text;
Form1->ADOStoredProc1->Prepared = true;
Form1->ADOStoredProc1->CursorType = ctStatic;
Form1->ADOStoredProc1->Active = true;
Form4->QuickReport1->Prepare();
Form4->QuickReport1->Preview();
2.1K
07 февраля 2005 года
greyich
117 / / 02.02.2005
Народ! все работает теперь. после добавления adostoredproc1->active = false в события onclick кнопки.

до этого добавлял эту строчку в beforeprint - ничего не работало! Огромное спасибо, AlexandrVSmirno и rostyslav!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог