проблема с LoadFromStream

отредактировано 01:39 Раздел: FastReport 3.0
Отчет хранятся в blob, хочу его загрузить оттуда

TStream* Stream1=
dasetREPORTS->CreateBlobStream(dasetREPORTSFILES,bmRead);
frxReport1->LoadFromStream(Stream1);
frxReport1->ShowReport(true);

Результат - пустой Prewiev

если считываю из blob сначала в файл, а потом загружаю файл через LoadFromFile то все нормально!

Как правильно считывать напрямую используя LoadFromStream ???

Комментарии

  • отредактировано 01:39
    Две процедуры на зчтение и на запись (выдрал из работающей программы)
    // На чтение
    procedure TfmDesigner.LoadReport;
    var Stream:TStream;
    begin
    frReport.Clear;
    Stream:=TMemoryStream.Create;
    try
    // taReportREPORT - поле BLOB (memo) из DBF файла
    taReportREPORT.SaveToStream(Stream);
    Stream.Position:=0;
    if Stream.Size>0 then frReport.LoadFromStream(Stream);
    finally
    Stream.Free;
    end;
    end;

    // на запись
    procedure TfmDesigner.DesignReport;
    var
    Stream:TStream;
    begin
    frReport.DesignReport;
    if (MessageDlg('Сохранить отчет ?',mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
    begin
    Stream:=TMemoryStream.Create;
    frReport.SaveToStream(Stream);
    end;
    if Assigned(Stream) then
    try
    taReport.Edit;
    try
    Stream.Position:=0;
    taReportREPORT.LoadFromStream(Stream);
    taReport.Post;
    except
    taReport.Cancel;
    end;
    finally
    FreeAndNil(Stream);
    end;
  • отредактировано 01:39
    SeregaG
    с TMemoStream та же история.... не выводит отчет

    A ты после
    frReport.LoadFromStream(Stream);
    пробовал frReport.ShowReport ??? работает?
  • отредактировано 01:39
    SeregaG написал:
    Две процедуры на зчтение и на запись (выдрал из работающей программы)
    // На чтение
    procedure TfmDesigner.LoadReport;
    var Stream:TStream;
    begin
    frReport.Clear;
    Stream:=TMemoryStream.Create;
    try
    // taReportREPORT - поле BLOB (memo) из DBF файла
    taReportREPORT.SaveToStream(Stream);
    Stream.Position:=0;
    if Stream.Size>0 then frReport.LoadFromStream(Stream);
    finally
    Stream.Free;
    end;
    end;

    // на запись
    procedure TfmDesigner.DesignReport;
    var
    Stream:TStream;
    begin
    frReport.DesignReport;
    if (MessageDlg('Сохранить отчет ?',mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
    begin
    Stream:=TMemoryStream.Create;
    frReport.SaveToStream(Stream);
    end;
    if Assigned(Stream) then
    try
    taReport.Edit;
    try
    Stream.Position:=0;
    taReportREPORT.LoadFromStream(Stream);
    taReport.Post;
    except
    taReport.Cancel;
    end;
    finally
    FreeAndNil(Stream);
    end;
    // taReportREPORT - поле BLOB (memo) из DBF файла
    taReportREPORT.SaveToStream(Stream);

    Что-то я не понял - как мне сначала его описать то????

    А то я раньше грузил из blob-поля "Rep1" базы данных. ;)
  • отредактировано 01:39
    А так не пробовал?

    if not ADOQuery1FRBody.IsNull then begin
    ms := TADOBlobStream.Create(ADOQuery1FRBody, bmRead);
    frxReport1.LoadFromStream(ms);
    ms.Free;
    frxReport1.PrepareReport;
    frxReport1.ShowPreparedReport;
    end;

    У меня работает.

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

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