Сохранение и загрузка отчета из Blob

отредактировано 00:57 Раздел: FastReport 4.0
Стоит задача хранения создаваемых в дизайнере отчетов в БД, в BLOB-поле. На форме у меня лежит 2 компонента: TfrxDesigner и TfrxReport. Собственно, для сохранения данных в BLOB использую следующий код:
bs:=TMemoryStream.Create;
try
 frxReport1.SaveToStream(bs);
 (DataModule1.ReportsDS.FieldByName('data') as TBlobField).LoadFromStream(bs);
finally
 bs.Free;
 DataModule1.ReportsDS.Post;
end;

Отчет в базу сохраняется нормально, для этого я специально потом проверил содержимое BLOB поля. Далее мне необходимо загрузить отчет из BLOB в TfrxReport. Для этого использую следующий код:
if not (DataModule1.ReportsDS.FieldByName('data') As TBlobField).IsNull then begin
 bs:=TMemoryStream.Create;
 try
  TBlobField(DataModule1.ReportsDS.FieldByName('data')).SaveToStream(bs); bs.Position:= 0;
  frxReport1.LoadFromStream(bs);
 finally
  bs.Free;
 end;
end;

Вот тут собственно и начинаются проблемы - сразу после загрузки отчета в TfrxReport программа вылетает с Access Violation. Трассировал построчно - ошибки после вызова метода LoadFromStream не возникает. Возникает она, судя по всему, сразу после того, как фокус передается в окно дизайнера, причем Delphi выбрасывает в модуль frxDesgnWorkspace1, или в frxDesgn, причем каждый раз произвольно в разные методы.
Помогите решить возникшую проблему - сохранять файл отчета из БД во временный файл, а потом загружать оттуда не предлагать, т.к. основная задача - загружать отчет из БД без использования временных файлов.

Параллельно озвучу еще один вопрос - как в дизайнере скрыть вкладку "Данные", которая позволяет создавать подключение к БД и таблицам БД - мне это принципиально не нужно, т.к. все датасеты я буду создавать вручную на этапе разработки программы.

Комментарии

  • отредактировано 00:57
    Дополнительные подробности: добавил в код после frxReport1.LoadFromStream(bs); следующее - frxReport1.Designer.ReloadReport; После этого отчет нормально отображается в дизайнере и ошибки не возникает, НО при следующем вызове кода для загрузки отчета из БД (уже другого отчета) возникает Access Violation.
  • gpigpi
    отредактировано 00:57
    Ваш код должен нормально работать. После него нужно выполнить frxReport1.DesignReport

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

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