Куда подевались функции?

отредактировано 16:12 Раздел: FastReport 3.0
Привет всем!
Необходимость (круговые диаграммы с заданным цветом секторов) вынудила перейти на FR 3.
Использую D6 и Interbase, TTable.
Так вот, для того чтобы прочитать/записать отчет в Blob поле Interbase использовались функции SaveToBlobField и LoadFromBlobField. В третьей версии Fast Report этих функций нет. Как быть? Приведите примеры кода, как записывать / считывать отчеты в Blob-поля?

Комментарии

  • отредактировано 16:12
    Через Load и SaveToStream
  • отредактировано 16:12
    написал:
    Через Load и SaveToStream
    пример кода, если можно, пожалуйста...
  • отредактировано 16:12
    Уже было в этом форуме:
    написал:
    var
    stream :TMemoryStream;
    begin
    stream := TMemoryStream.Create;
    YourDataset.YourFieldName.SaveToStream(stream);
    stream.Position:=0;
    frxReport1.LoadFromStream(stream);
    frxReport1.PrepareReport;
    stream.clear;
    YourDataset.Next;
    YourDataset.YourFieldName.SaveToStream(stream);
    stream.Position:=0;
    frxReport1.LoadFromStream(stream);
    frxReport1.PrepareReport(False);
    frxReport1.ShowPreparedReport;
    stream.Free;
    end;
  • отредактировано 16:12
    egik написал:
    Уже было в этом форуме:
    С загрузкой отчета из Blob-поля разобрался.
    Получилось не очень удачно, но работает:
    procedure LoadxFromBlobField(Blob: TBlobField);
    var
     Stream: TBlobStream;
    begin
      Stream := TBlobStream.Create(Blob, bmRead);
      try
        Stream.Position := 0;
        FRForm.frxReport1.LoadFromStream(Stream);
      finally
       Stream.Free;
      end;
    end;
    

    Вопрос теперь как отчет из FastReport в Blob поле кидануть?
    Раньше у меня использовалась такая процедура?
    procedure TFRForm.frDesigner1SaveReport(Report: TfrReport;
      var ReportName: String; SaveAs: Boolean; var Saved: Boolean);
    begin
      FRForm.tblTableShablon.Edit;
      FRForm.frReport1.SaveToBlobField(FRForm.tblTableShablonSHABLON);
      FRForm.tblTableShablon.Post;
      spCommitTransaction;
    end;
    

  • gpigpi
    отредактировано 16:12
    Опять через SaveToStream и LoadFromStream в обработчике frxDesigner.OnSaveReport
  • отредактировано 16:12
    gpi написал:
    Опять через SaveToStream и LoadFromStream в обработчике frxDesigner.OnSaveReport
    Написал такой обработчик:
    function TFRForm.frxDesigner1SaveReport(Report: TfrxReport;
      SaveAs: Boolean): Boolean;
     var
     Stream: TStream;
    begin
      Table1.Edit;
      try
       Stream := Table1.CreateBlobStream(Table1Field1, bmReadWrite);
       Stream.Position := 0;
       frxReport1.SaveToStream(Stream);
       Table1.Post;
      finally
       Stream.Free;
      end;
      Result := True;
    end;
    

    Вроде бы как даже работает. Редактирую отчет, нажимаю по "дискетке", процедура отрабатывает, отчет сохраняется в базе данных. Потом редактирую шаблон дальше. Снова нажимаю на "дискетку". Начинает отрабатывать функция frxDesigner1SaveReport.
    И на строке
      frxReport1.SaveToStream(Stream);
    
    Выдает исключительную ситуацию:
    Blob not opened
    Как же быть?
  • отредактировано 16:12
    Вопрос снимается, разобрался самостоятельно.
    Вот как заработало:
    function TFRForm.frxDesigner1SaveReport(Report: TfrxReport;
      SaveAs: Boolean): Boolean;
     var
      MemoryStream: TMemoryStream;
      Stream: TStream;
    begin
      Table1.Edit;
      try
      MemoryStream:=TMemoryStream.Create;
      Stream := tblTableShablon.CreateBlobStream(Table1Field1, bmReadWrite);
      frxReport1.SaveToStream(MemoryStream);
      MemoryStream.Position := 0;
      Stream.CopyFrom(MemoryStream, MemoryStream.Size);
      Table1.Post;
      finally
       MemoryStream.Free;
       Stream.Free;
      end;
      Result := True;
    end;
    
  • отредактировано 16:12
    HEPB написал:
    Вопрос снимается, разобрался самостоятельно.
    Вот как заработало:
    function TFRForm.frxDesigner1SaveReport(Report: TfrxReport;
      SaveAs: Boolean): Boolean;
     var
      MemoryStream: TMemoryStream;
      Stream: TStream;
    begin
      Table1.Edit;
      try
      MemoryStream:=TMemoryStream.Create;
      Stream := tblTableShablon.CreateBlobStream(Table1Field1, bmReadWrite);
      frxReport1.SaveToStream(MemoryStream);
      MemoryStream.Position := 0;
      Stream.CopyFrom(MemoryStream, MemoryStream.Size);
      Table1.Post;
      finally
       MemoryStream.Free;
       Stream.Free;
      end;
      Result := True;
    end;
    
    Теперь и так перестало работать...
    Что же делать?
    При попытке выполнить команду
    Stream.CopyFrom(MemoryStream, MemoryStream.Size);
    выдает ошибку на картинке.
    Причем в первый раз сохраняется отчет, при втором сохранении вылетает ошибка.
    Help!!!

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

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