Fr 4.6 ошибка при записи в Blob-поле БД

отредактировано 03:15 Раздел: FastReport 4.0
Добрый день, уважаемые пользователи форума!

Пытаюсь создать функционал сохранения шаблонов отчетов в BLOB-поле таблицы БД. Для этого в своем модуле динамически создаю объекты:
var
     vReport:TfrxReport;
     vDesigner:TfrxDesigner;
...

    vDataStream:=TMemoryStream.Create;
    vReport:=TfrxReport.Create(Owner as TF_Multi);
   //Designer
    vDesigner:=TfrxDesigner.Create(Owner as TF_Multi);
и загружаю шаблон отчета из BLOB-поля таблицы БД
    (R_Reports.FieldByName('rep_data') as TBlobField).SaveToStream(vDataStream);
    vDataStream.Position:=0;
    vReport.LoadFromStream(vDataStream);
обработчик для события OnSaveReport для vDesigner:
function TReports_Frm.vDesignerOnSaveReport(Report: TfrxReport; SaveAs: Boolean): boolean;
var 
    vMess:String;
    vDataStream:TMemoryStream;
begin
  vDataStream:=nil;
  if not SaveAs then
  begin
      vDataStream.Create; <-на этой команде возникает ошибка №1 (см. ниже)
      vReport.SaveToStream(vDataStream);
      vDataStream.Position:=0;
      try
        R_Reports.Edit;
        (R_Reports.FieldByName('rep_data') as TBlobField).LoadFromStream(vDataStream);
        R_Reports.Post;
        MessageDlg('Сохранено.', mtError, [mbOk], 0);
        Result:=True;
      except
        on e:exception do
        begin
          vMess:='Ошибка при сохранении отчета в БД! '+E.Message;
          MessageDlg(vMess, mtError, [mbOk], 0);
          R_Reports.Cancel;
          R_Reports.CancelUpdates;
        end;
      end;//try-except
      vDataStream.Free;
  end;//if SaveAs
end;
подключаю этот обработчик к объекту TfrxDesigner и запускаю дизайнер:
vDesigner.OnSaveReport:=vDesignerOnSaveReport;
vReport.PrepareReport(True);
vReport.DesignReport;
при сохранении возникают ошибки:
№1 в моем обработчике
написал:

Debugger Exception Notification
Project Scais.exe raised exception class EAccessViolation with message 'Access violation at address 004049B7 in module 'Scais.exe'. Read of address 00000000'.
Break Continue Help
в модуле frxDesgn в функции
function TfrxDesignerForm.SaveFile(SaveAs: Boolean; UseOnSaveEvent: Boolean): Boolean;
при срабатывании команды
if frxDesignerComp.FOnSaveReport(Report, SaveAs) then
возникает ошибка №2:
написал:

Debugger Exception Notification
Project Scais.exe raised exception class EAccessViolation with message 'Access violation at address 004049F3 in module 'Scais.exe'. Read of address 00000000'.
Break Continue Help
Пробовал использовать TfrxReport и TfrxDesigner, добавленные на форму в Design-Time - результат тот же.

Какие будут соображения?

Комментарии

  • gpigpi
    отредактировано 03:15
    vDataStream.Create; <-на этой команде возникает ошибка №1 (см. ниже)
    
    используйте
    vDataStream := TMemoryStream.Create;
    

    P.S. FR, тем более версии 4.6, здесь вообще ни при чём
  • отредактировано 03:15
    упс... прошу пардона, называется "заработался"...
    благодарю!

    тему можно закрывать.

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

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