Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
7-19008
Poroh
2001-10-24 02:57
2002.02.07
Подскажите, пожалуйста, как перехватить сообщение о том, что программа выполнила недопустимую операцию и будет закрыта.


3-18770
Вика
2002-01-14 08:02
2002.02.07
IB 5.6 , как сделать экпорт/импорт части таблицы через дискету?


1-18812
Koroleva
2002-01-25 12:18
2002.02.07
FormStyle


1-18923
LamerMen
2002-01-24 09:56
2002.02.07
Что использовать TMemo TR..Edit?


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский