Подготовка отчёта в потоке
Mr. Konopko
Белоруссия
Господа,
1. Мне бы хотелось подготовить отчёт b]TfrxReport.PrepareReport[/b в потоке, т.к. подготовка может занять много времени, а софт не должен "висеть". При этом хочется иметь возможность отменить подготовку в любой момент. Нашёл что-то по TfrxReport.EngineOptions.ReportThread, но как это работает и относится ли к делу вообще - непонятно. Печатать из потока не нужно. Отчёт с диалоговым окном.
Прошу разъяснить ситуацию.
2. Почему TfrxReport.Print выдаёт диалог на анг языке, хотя винда (ХР) у меня русская?
Мне нужен локализованных диалог.
Спасибо.
Версия компонентов 4.4.7
1. Мне бы хотелось подготовить отчёт b]TfrxReport.PrepareReport[/b в потоке, т.к. подготовка может занять много времени, а софт не должен "висеть". При этом хочется иметь возможность отменить подготовку в любой момент. Нашёл что-то по TfrxReport.EngineOptions.ReportThread, но как это работает и относится ли к делу вообще - непонятно. Печатать из потока не нужно. Отчёт с диалоговым окном.
Прошу разъяснить ситуацию.
2. Почему TfrxReport.Print выдаёт диалог на анг языке, хотя винда (ХР) у меня русская?
Мне нужен локализованных диалог.
Спасибо.
Версия компонентов 4.4.7
Комментарии
в create:
Report := TfrxReport.Create(nil);
Report.EngineOptions.ReportThread := Self ; (self - текущий поток)
Report.EngineOptions.EnableThreadSafe := True;
Report.EngineOptions.DestroyForms := False;
в execute :
Report.PrepareReport;
в Destroy:
Report.free;
Если выполнять в фоне диалоги лучше отключить.
2. локализуйте FR.
Вот что получается:
Error
The following error(s) have occured:
System Error. Code: 5.
Отказано в доступе
ОК
А как мне без диалоговых окон быть-то?! У меня вся суть отчёта в предварительной установке фильтров.
Ошибка вылетает на PrepareReport в Execute;
Может чёго неверно делаю?
Диалоги должны выводится.
Сделал. Диалогов нет.
Если выставить FReport.EngineOptions.SilentMode := False;
то появляется ошибка:
Error
The following error(s) have occured:
Access violation at address 0050ECE7 in module 'FastReport.exe'. Read of address 00000008
ОК
Что делать?
Да ничего подобного.
Приложил файлик - посмотрите поток:
Но у меня в отчёте идёт подключение к базе данных. Просто подставляя свой отчёт в ваш пример, диалогов не видно и отчёт не препаривается.
Прикладываю свой отчёт:
Как это пользовать?
У меня в отчёте БД и запрос к ней. Ну меняю запрос в зависимости от параметров в диалоге.
Куда этот DataSet прикручивать-то?
Кстати, если в основном потоке мой отчёт запустить, то всё работает без всяких ДатаСетов, несмотря на то, что frxReport генерится в рантайме.
А в отдельном потоке работают только простые отчёты, а как только добавляешь БД - всё, отчёт не хочет генериться.
Что делать?
Компоненты куплены, уши шефу маслом намазаны, а прога всё ещё не работает...
Алярма!
Для саппорта есть хелпдеск.
Я так понял вы используете ADO ?
ADO это com, в многопоточном приложении нужно вызывать CoInitializeEx(nil, COINIT_MULTITHREADED) перед созданием ком объекта в потоке.
Т.е. получается :
Пример в аттаче .