Fr4 и многопоточность

отредактировано October 2008 Раздел: FastReport 4.0
Помогите кто сможет...
Есть компонент реализующий несколько видов отчётов. При запуске отчётов по одному всё отлично работает. Проблемы начинаются когда запускается на выполнение более одной инстанции одного вида отчётов :) На выходе получаются кривые отчёты... кривые в плане данных. Может получиться что на выходе неполный отчёт для одного, для другого вообще пустой... или вообще в каком либо отчёте данные из другого...

Нашёл в ФАКе следующее:
Вопрос: Как отключить использование глобального списка датасетов при использовании TfrxReport в потоке ?

Ответ
По умолчанию FR использует глобальный список датасетов который инициализируется в модуле frxClass, при создании экземпляра TfrxDBDataset он добавляется в этот список. В связи с этим не возможно использовать датасеты с одинаковыми именами (даже в разных потоках).
Для использования локального списка датасетов нужно использовать следующий код (начиная с версии 4.5.46):
frxReport.EngineOptions.UseGlobalDataSetList := False;
frxReport.EnabledDataSets.Clear();
frxReport.EnabledDataSets.Add(frxDataSet);
frxReport.LoadFromFile(ReportName);

Очень интересно стало, что за глобальный список и зачем так сделано?
ЗЫ: сделал изменения в коде, ничего не поменялось...

Комментарии

  • gpigpi
    отредактировано 10:40
  • отредактировано 10:40
    Это я читал...
    Какое то странное проявление глюка. Уж лучше бы в ексепшн вылетал. Протестил ещё.... складывается впечатление что путаются датасеты....

  • отредактировано 10:40
    Обратите внимание что UseGlobalDataSetList нужно вызывать ДО загрузки шаблона, иначе такой трюк не пройдет(так же не сработает если отчет хранится в DFM).

    Глобальный список используется для поиска датасетов, т.е. когда Вы добавляете сначала TfrxDBDataSet, а потом TfrxReport - датасеты будут доступны в дизайнере, т.к. список создается при инициализации модуля frxClass.
    В глобальном списке нельзя использовать датасеты с одинаковыми именами, в этом случае будет выбран первый добавленный датасет.

    Чтобы этого избежать было добавлено св-во UseGlobalDataSetList, но работать оно будет только до загрузки шаблона.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.