повторное использование отчета (Qreport)
Создал формочку с QuickRep и там QRBand (тип rbDetail - как положено) c парой контролов QRDBText. Данные для него беруться из процедуры ADOStoredProc. Проблема в том, что отчет надо показывать с разными наборами данных. А после того как один раз туда пересылаются данные(результат ADOStoredProc), их больше не изменить.
Подскажите как можно обнулить (заново инициализировать, обновить, очистить) QRDBText!
народ! помогите кто-нибудь с Quickrep!
Создал формочку с QuickRep и там QRBand (тип rbDetail - как положено) c парой контролов QRDBText. Данные для него беруться из процедуры ADOStoredProc. Проблема в том, что отчет надо показывать с разными наборами данных. А после того как один раз туда пересылаются данные(результат ADOStoredProc), их больше не изменить.
Подскажите как можно обнулить (заново инициализировать, обновить, очистить) QRDBText!
Используй событие BeforePrint. В нем выполни заново свою процедуру.
Используй событие 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();
Процедура работает правильно, параметр до нее "доходит". сам случай явно тривиальный. Может кто-нибудь уже сталкивался?
не помогло :( . Может у меня код не так написан?
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()
не помогло :( . Может у меня код не так написан?
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-а
Используй событие BeforePrint. В нем выполни заново свою процедуру.
Я о том - же и говорил. Но greyich утверждает, что не проходит, хотя это странно.
Я о том - же и говорил. Но greyich утверждает, что не проходит, хотя это странно.
Если не проходит, то скорей всего значение DBEdit1 не меняется во время печати.
Или же, если все нормально, то нужно бы заменить QRDBText на QRLabel и в OnValue событии этого компонента выполнить этот код и присвоить результат вручную параметру Value.
на 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!
QuiсkRep::BeforePrint - такая же бодяга
QRBand::BeforePrint - вообще не показывает ничего
события onneeddata тоже ничего не дали.
ЗЫ: все статьи в интернете по поводу отчетов в builder - одна и таже статья за авторством натальи елмановой!
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!
Ну так а так пробовал
{
Form1->ADOStoredProc1->Prepared = true;
Form1->ADOStoredProc1->Parameters->operator [](1)->Value= Form1->DBEdit1->Text;
Form1->ADOStoredProc1->Active = true;
Form1->ADOStoredProc1->CursorType = ctStatic;
Form1->ADOStoredProc1->ExecProc();
}
Form1->ADOStoredProc1->Prepared = true;
Form1->ADOStoredProc1->CursorType = ctStatic;
Form1->ADOStoredProc1->Active = true;
Form4->QuickReport1->Prepare();
Form4->QuickReport1->Preview();
Ну так а так пробовал
{
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(
пробовал заново сделать отчет - пофигу. либо я повторяю свою ошибку, либо тот же глюк...
я точно так и пробовал. результат тот же. отчет формируется один раз и в него фигачаться данные. и потом переписать их уже неполучается... я уже впал в транс... P(
пробовал заново сделать отчет - пофигу. либо я повторяю свою ошибку, либо тот же глюк...
Это похоже что-то с ADO. Для начала просто попробуй закрыть соединение и снова его открыть перед вызовом процедуры.
ЗЫ А на фига ты репорт на form4 посадил?
я точно так и пробовал. результат тот же.
Prepared = true; вызывает связывание параметров.
Но после этого меняется значение параметра, т.е. эти 2 команды нужно поменять местами, или убрать первую.
Active = true; выполняется SQL выражение. После этого задается тип курсора. Тоже нужно поменять местами.
Active = true и ExecProc() - это одно и то же. Разница только в том, что при ExecProc(), кроме результирующего набора, через параметры возвращаются какие-то значения. Т.е. одно из них лишнее.
Но наверно главная ошибка, что перед присвоением параметра, ADOQuery не закрывается.
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();
до этого добавлял эту строчку в beforeprint - ничего не работало! Огромное спасибо, AlexandrVSmirno и rostyslav!