Форум: "Базы";
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];
ВнизQReport ?? !!! ???? !!! Найти похожие ветки
← →
Koks (2002-01-08 14:43) [0]Использую QReport. Поместил его на отдельную форму (fmQForm), следуя многочисленным рекомендациям.
Эту самую форму создаю динамически в ран-тайме. И уничтожаю тоже в рантайме после использования.
Столкнулся с такой проблемой:
Procedure DoReport;
begin
Application.CreateFrom(TfmQForm, fmQForm);
fmQReport.Show;
fmQreport.MyReport.Preview;
end;
{до сих пор все работает нормально, отчет превьюится правильно, все путем)
но вот когда я закрываю preview отчета кнопкой close или через оконное меню ([X]),
то получается что я закрываю именно отчет, а не форму на которой он находится....
причем эта форма выглядит очень непрезентабильно....)
Как сделать так, чтобы вместе с отчетом автоматически закрывалась и форма на которой он\
находится?...
Пробовал так:
procedure MyReport.AfterPreview(Sender: TObject)
begin
Close; {метод формы}
end;
...... на этом месте выдается ошибка Invalid floating point operation !!!!!
какой-то бред.....
Пробовал открывать fmQuery через ShowModal, а отчет превьюить в обработчике OnShow формы, результат
почти такой же....
Пробовал использовать отчет напрямую, без формы (ка это предлагается в File - > New - > Report)....
Все вроде работатает, но после уничтожения отчета MyReport.Free начинаются такие глюки.... причем во всей программе....
Посоветуйте хоть че нибудь - все праздники бился.....
← →
panov (2002-01-08 15:19) [1]Я всегда делаю вот так.
Пока проблем не было...
Application.CreateForm(TfRep, fRep);
fRep.qrPP.Preview;
fRep.Free;
← →
Anatoly Podgoretsky (2002-01-08 17:39) [2]А не PreviewModal?
Иначе fRep будет сразу уничтожен.
← →
panov (2002-01-08 17:47) [3]>Anatoly Podgoretsky © (08.01.02 17:39
Нет, все нормально так работает...
← →
panov (2002-01-08 17:49) [4]Qreport для Preview сам создает и показывает форму модально.
← →
SoftOne (2002-01-09 02:01) [5]> panov © (08.01.02 17:49)
По-моему ты ошибаешься. При вызове Prewiew легко можно переключиться на любую другую форму проекта.
← →
panov (2002-01-09 07:27) [6]>SoftOne © (09.01.02 02:01)
Согласен, ошибся.
Однако отчет не уничтожается.
Хотя интересно было бы мысли по этому поводу услышать.
А вот следующий вопрос, связанный с этим, уже серьезнее:
Приведенный выше код работает. Это точно.
Но тогда освобождается или нет память после выполнения отчета?
Если нет, то тогда у меня грубейшая ошибка...
И если отчеты выполняются довольно часто, тогда будет выкушана вся память...
← →
Anatoly Podgoretsky (2002-01-09 08:00) [7]Поставь точку останова на fRep.Free и сразу все станет ясно.
А то что работает ни чего не означает.
← →
roottim (2002-01-09 08:31) [8]>Все вроде работатает, но после уничтожения отчета MyReport.Free начинаются такие глюки.... причем во всей программе....
попробуй вместо Free .. метод Release
← →
panov (2002-01-09 08:34) [9]>roottim (09.01.02 08:31)
Ни MyReport.Free, ни MyReport.Release выполнять не нужно, т.к. MyReport принадлежит форме, и будет уничтожен вместе с ней.
← →
panov (2002-01-09 08:46) [10]Продолжение:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1010555169&n=0
← →
sky3d (2002-01-09 08:56) [11]Вообще-то можно вообще не иметь QuickRep на форме( хотя это удобней для его инициализации на создании формы) а выбирать его из меню File -> New -> Report;
Я выполняю так
with TRepForm.Create(Application) do
try
QuickRep.Preview; // не modal
finally
Free; // освобождение по-любому !!!
end;
2Anatoly Podgoretsky :
Free выполнится уже после закрытия Preview отчета, а не сразу.
← →
panov (2002-01-09 09:41) [12]>panov © (09.01.02 08:46
Ты по ссылке сходи...:-)
Free выполнится в любом случае после закрытия Preview.
← →
koks (2002-01-09 09:45) [13]О-О-пс, а ларчик действительно просто открылся.... А я то городил вначале... (спасибо panov-у)
В любом случае, в результате экспериментов пришел к выводу что QReport лучше помещать на форму - так все выполняется стабильнее.
Но вот неувязка - этот QReport что-то делает с формой, на которой расположен. - ее нельзя сделать MDIСhild (опять появляется описанный в начале дискуссии глюк при закрытии отчета), у нее нельзя поменять некоторые свойства (точнее поменять-то можно, только все это будит игнориться в рантайме). Короче, у меня в результате все заработало, только возникла одна новая проблемка - необходимо запретить пользователю минимизировать окно preview отчета. Не приложу ума как - если в свойстве формы убрать системные кнопки - они все равно показываются....
← →
roottim (2002-01-09 09:51) [14]касательно MDI....
закрывай форму не методом Free... а Release...
незнаю как насчет репорта... а если уничтожаеш MDI... то лучше пользоваться этим методом... глюк не в репорте.. он именно из-за формы
← →
sky3d (2002-01-09 10:01) [15]2 koks
>этот QReport что-то делает с формой, на которой расположен.
А зачем Вам отображать форму на которой лежит отчет ?
Почему НЕ сделать отдельно просто форму для выполнения каких-то действий и отчет (либо отчет на форме которую не показывают, а используют только для подготовки отчета).
← →
SuperMama (2002-01-09 10:47) [16]>>> sky3d ©
Даа, это выход. Но потом появяться проблемы ...
он несможет доконца дотягивать данные для репорта,
глюки надо будет устранять страницами кода !
Или, смотря как у кого система работает !
← →
sky3d (2002-01-09 10:56) [17]2SuperMama
Что Вы имеете ввиду, говоря о проблемах ? Кто данные не сможет дотянуть ?
Сколько работаю, не чего криминального не происходило..все работает нормально.
← →
KSergey (2002-01-09 11:10) [18]А может проще уничтожать дочернюю MDI-форму просто Actioon:=caFree в OnClose формы? Все равно раз уж это дочерняя MDI, то по логике ее пользователь должен и закрывать...
И еще. Не как реклама - есть сайтик - народ QReport дорабатывает, в частности и про MDI они там что-то упоминали. Сам правда не пробовал, но описано вроде красиво.
http://bfqr.nm.ru/
← →
Baks (2002-01-09 19:06) [19]К вопросу о QReport, ни кто не сталкивался с подобной ошибкой:
"программа delphi32 вызвала ошибку ... dpr8.drv" причем она появляется только на WinME, 98-я и W2K шуршат изумительно. Появляется она при попытке распечатать отчет из Preview окна, причем если сначала зайти в настройки принтера и ничего не изменяя выйти, а затем снова попытаться распечатать - все ОК.
Проект скомпилен в D6.
Кто-нибудь может что-нибудь посоветовать?
← →
Koks (2002-01-10 10:32) [20]Все-таки глюк есть глюк. Проведя много разных экспериментов, я пришел к выводу - если динамически создавать форму, на которой находится отчет, а за тем ее (и его) мочить (что через Free, что через Releasе) - QReport ПОЛНОСТЬЮ ИЗ ПАМЯТИ НЕ УДУЛЯЕТСЯ!
Если в рантайме пару-тройку раз создать/уничтожить форму с QReport-ом - все OK. А вот если раз 10 - опять acess violation по всей программе. (ошибки начинают появляться при создании/уничтожении других форм).
Примеры, поставляемые вместе с Delphi по Qrep - все формы c QRep - статические..... и с собственными источниками данных....
Видать придется жертвовать объемами ради увеличения надежности...
← →
Baks (2002-01-11 06:52) [21]Так ни кто не сталкивался с подобным?
← →
Fay (2002-01-11 12:41) [22]Ничего не поможет.
Положи репорт на автокриатную форму - так проблем не будет точно.
следующим шагом - забудь QR!
← →
Baks (2002-01-11 20:41) [23]> Fay
Если вы имеете ввиду нечто вроде
with TQReport.Create(self) do
try
...
finally
free;
end;
так оно так и сделано, если нет, то немогли бы пояснить?
← →
roottim (2002-01-13 09:05) [24]>Baks:Fay сказал создай обычную форму и кинь туда свой репорт.. без динамического создания...
а вообще от статических отчеов отходить надо... пользуйтесь COM
передавайте в Word или Exel
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.006 c