Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

QReport ?? !!! ???? !!! [D5, dBase, FoxPro, ]


Страницы:   1 2

Koks ©   (2002-01-08 14:43:00) 

Использую 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 начинаются такие глюки.... причем во всей программе....

Посоветуйте хоть че нибудь - все праздники бился.....


roottim   (2002-01-13 09:05:00) [1]

>Baks:Fay сказал создай обычную форму и кинь туда свой репорт.. без динамического создания...
а вообще от статических отчеов отходить надо... пользуйтесь COM
передавайте в Word или Exel


Baks   (2002-01-11 20:41:00) [2]

> Fay
Если вы имеете ввиду нечто вроде

with TQReport.Create(self) do
try
...
finally
free;
end;

так оно так и сделано, если нет, то немогли бы пояснить?


Fay   (2002-01-11 12:41:00) [3]

Ничего не поможет.
Положи репорт на автокриатную форму - так проблем не будет точно.
следующим шагом - забудь QR!


Baks   (2002-01-11 06:52:00) [4]

Так ни кто не сталкивался с подобным?


Koks   (2002-01-10 10:32:00) [5]

Все-таки глюк есть глюк. Проведя много разных экспериментов, я пришел к выводу - если динамически создавать форму, на которой находится отчет, а за тем ее (и его) мочить (что через Free, что через Releasе) - QReport ПОЛНОСТЬЮ ИЗ ПАМЯТИ НЕ УДУЛЯЕТСЯ!
Если в рантайме пару-тройку раз создать/уничтожить форму с QReport-ом - все OK. А вот если раз 10 - опять acess violation по всей программе. (ошибки начинают появляться при создании/уничтожении других форм).
Примеры, поставляемые вместе с Delphi по Qrep - все формы c QRep - статические..... и с собственными источниками данных....
Видать придется жертвовать объемами ради увеличения надежности...


Baks   (2002-01-09 19:06:00) [6]

К вопросу о QReport, ни кто не сталкивался с подобной ошибкой:
"программа delphi32 вызвала ошибку ... dpr8.drv" причем она появляется только на WinME, 98-я и W2K шуршат изумительно. Появляется она при попытке распечатать отчет из Preview окна, причем если сначала зайти в настройки принтера и ничего не изменяя выйти, а затем снова попытаться распечатать - все ОК.
Проект скомпилен в D6.
Кто-нибудь может что-нибудь посоветовать?


KSergey   (2002-01-09 11:10:00) [7]

А может проще уничтожать дочернюю MDI-форму просто Actioon:=caFree в OnClose формы? Все равно раз уж это дочерняя MDI, то по логике ее пользователь должен и закрывать...
И еще. Не как реклама - есть сайтик - народ QReport дорабатывает, в частности и про MDI они там что-то упоминали. Сам правда не пробовал, но описано вроде красиво.
http://bfqr.nm.ru/


sky3d   (2002-01-09 10:56:00) [8]

2SuperMama
Что Вы имеете ввиду, говоря о проблемах ? Кто данные не сможет дотянуть ?
Сколько работаю, не чего криминального не происходило..все работает нормально.


SuperMama   (2002-01-09 10:47:00) [9]

>>> sky3d ©
Даа, это выход. Но потом появяться проблемы ...
он несможет доконца дотягивать данные для репорта,
глюки надо будет устранять страницами кода !
Или, смотря как у кого система работает !


sky3d   (2002-01-09 10:01:00) [10]

2 koks
>этот QReport что-то делает с формой, на которой расположен.

А зачем Вам отображать форму на которой лежит отчет ?
Почему НЕ сделать отдельно просто форму для выполнения каких-то действий и отчет (либо отчет на форме которую не показывают, а используют только для подготовки отчета).


roottim   (2002-01-09 09:51:00) [11]

касательно MDI....
закрывай форму не методом Free... а Release...
незнаю как насчет репорта... а если уничтожаеш MDI... то лучше пользоваться этим методом... глюк не в репорте.. он именно из-за формы


koks   (2002-01-09 09:45:00) [12]

О-О-пс, а ларчик действительно просто открылся.... А я то городил вначале... (спасибо panov-у)
В любом случае, в результате экспериментов пришел к выводу что QReport лучше помещать на форму - так все выполняется стабильнее.
Но вот неувязка - этот QReport что-то делает с формой, на которой расположен. - ее нельзя сделать MDIСhild (опять появляется описанный в начале дискуссии глюк при закрытии отчета), у нее нельзя поменять некоторые свойства (точнее поменять-то можно, только все это будит игнориться в рантайме). Короче, у меня в результате все заработало, только возникла одна новая проблемка - необходимо запретить пользователю минимизировать окно preview отчета. Не приложу ума как - если в свойстве формы убрать системные кнопки - они все равно показываются....


panov   (2002-01-09 09:41:00) [13]

>panov © (09.01.02 08:46
Ты по ссылке сходи...:-)
Freeвыполнится в любом случаепосле закрытия Preview.


sky3d   (2002-01-09 08:56:00) [14]

Вообще-то можно вообще не иметь QuickRep на форме( хотя это удобней для его инициализации на создании формы) а выбирать его из меню File -> New -> Report;

Я выполняю так
with TRepForm.Create(Application) do
try
QuickRep.Preview; // не modal
finally
Free; // освобождение по-любому !!!
end;

2Anatoly Podgoretsky :
Free выполнится уже после закрытия Preview отчета, а не сразу.


panov   (2002-01-09 08:46:00) [15]

Продолжение:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1010555169&n=0


panov   (2002-01-09 08:34:00) [16]

>roottim (09.01.02 08:31)
Ни MyReport.Free, ни MyReport.Release выполнять не нужно, т.к. MyReport принадлежит форме, и будет уничтожен вместе с ней.


roottim   (2002-01-09 08:31:00) [17]

>Все вроде работатает, но после уничтожения отчета MyReport.Free начинаются такие глюки.... причем во всей программе....

попробуй вместо Free .. метод Release


Anatoly Podgoretsky   (2002-01-09 08:00:00) [18]

Поставь точку останова на fRep.Free и сразу все станет ясно.
А то что работает ни чего не означает.


panov   (2002-01-09 07:27:00) [19]

>SoftOne © (09.01.02 02:01)
Согласен, ошибся.

Однако отчет не уничтожается.

Хотя интересно было бы мысли по этому поводу услышать.
А вот следующий вопрос, связанный с этим, уже серьезнее:

Приведенный выше код работает. Это точно.
Но тогда освобождается или нет память после выполнения отчета?
Если нет, то тогда у меня грубейшая ошибка...

И если отчеты выполняются довольно часто, тогда будет выкушана вся память...


SoftOne   (2002-01-09 02:01:00) [20]

> panov © (08.01.02 17:49)
По-моему ты ошибаешься. При вызове Prewiew легко можно переключиться на любую другую форму проекта.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо