Сохранение и загрузка отчета из Blob
Стоит задача хранения создаваемых в дизайнере отчетов в БД, в BLOB-поле. На форме у меня лежит 2 компонента: TfrxDesigner и TfrxReport. Собственно, для сохранения данных в BLOB использую следующий код:
Отчет в базу сохраняется нормально, для этого я специально потом проверил содержимое BLOB поля. Далее мне необходимо загрузить отчет из BLOB в TfrxReport. Для этого использую следующий код:
Вот тут собственно и начинаются проблемы - сразу после загрузки отчета в TfrxReport программа вылетает с Access Violation. Трассировал построчно - ошибки после вызова метода LoadFromStream не возникает. Возникает она, судя по всему, сразу после того, как фокус передается в окно дизайнера, причем Delphi выбрасывает в модуль frxDesgnWorkspace1, или в frxDesgn, причем каждый раз произвольно в разные методы.
Помогите решить возникшую проблему - сохранять файл отчета из БД во временный файл, а потом загружать оттуда не предлагать, т.к. основная задача - загружать отчет из БД без использования временных файлов.
Параллельно озвучу еще один вопрос - как в дизайнере скрыть вкладку "Данные", которая позволяет создавать подключение к БД и таблицам БД - мне это принципиально не нужно, т.к. все датасеты я буду создавать вручную на этапе разработки программы.
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, причем каждый раз произвольно в разные методы.
Помогите решить возникшую проблему - сохранять файл отчета из БД во временный файл, а потом загружать оттуда не предлагать, т.к. основная задача - загружать отчет из БД без использования временных файлов.
Параллельно озвучу еще один вопрос - как в дизайнере скрыть вкладку "Данные", которая позволяет создавать подключение к БД и таблицам БД - мне это принципиально не нужно, т.к. все датасеты я буду создавать вручную на этапе разработки программы.
Комментарии