Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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




Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.77 MB
Время: 0.02 c
1-18850           Starkom               2002-01-22 13:39  2002.02.07  
помогите с проблемой


1-18854           Dmitry S. Negriy      2002-01-22 16:07  2002.02.07  
Прикол: TMemoryStream.Memory^ = (no value), хотя остальное видит


7-18996           T2                    2001-10-29 17:04  2002.02.07  
Эквалайзер


3-18695           Ars P                 2002-01-09 13:38  2002.02.07  
Interbase - как сделать в Stored Procedure базы вывод окошка с сообщением для пользователя?


1-18857           @andrew               2002-01-21 11:15  2002.02.07  
Привет Всем! У меня почему-то такой глюк.