Как правильно сохранить отчет в BLOB?

zivziv
отредактировано 03:35 Раздел: FastReport 2.xx VCL
procedure Tfrmdm.designerSaveReport(Report: TfrReport;
var ReportName: String; SaveAs: Boolean; var Saved: Boolean);
var Report_Stream : TMemoryStream;
...
begin
...
ms_query := TMSQuery.Create(nil);
try
ms_query.Connection := ms_connect;
ms_query.SQL.Text := 'select * from schet where id = 1'
OpenQuery(@ms_query, qoOpen);

report_stream := TMemoryStream.Create;
try
Report.EMFPages.SaveToStream(Report_Stream);
ms_query.Edit;
TBlobField(ms_query.FieldByName('report')).LoadFromStream(report_stream);
ms_query.Post;
finally
FreeAndNil(report_stream);
end;
Saved := true;
finally
ms_query.Free;
end; {finally}
end

Подскажите, где ошибка: данные сохраняются, но старые, которые были перед редактированием пользователя (т.е. изменения не сохраняются).

Комментарии

  • macmac Минск
    отредактировано 03:35
    ziv написал:
        OpenQuery(@ms_query, qoOpen);
       
        report_stream := TMemoryStream.Create;
        try
          Report.EMFPages.SaveToStream(Report_Stream);
    Возможно, после открытия Query с новыми данными, надо "перестроить отчет"

    OpenQuery(@ms_query, qoOpen);
    Report.PrepareReport;
    report_stream := TMemoryStream.Create;
    try
    Report.EMFPages.SaveToStream(Report_Stream);
  • zivziv
    отредактировано 03:35
    Я пробовал. Не получается. Глючит.
    Пользователь ведь поредактировал отчет в дизайнере. И я хочу сохранить изменения сделанные пользователем в таблицу. Для этого я использую запрос ms_query.
  • macmac Минск
    отредактировано 03:35
    Если ты хочешь сохранить форму отчета, а не распечатанный отчет, то зачем используешь
    Report.EMFPages.SaveToStream
    а не
    Report.SaveToStream ?
  • zivziv
    отредактировано 03:35
    Я генерирую отчет и сохраняю его в распечатанном виде (через EMFPages.SaveToStream) в базу. Когда пользователь изменил данные, я хочу сохранить отчет в таком же виде, т. к. я не могу изменить форму (вид) отчетов, хранящихся в базе, т. к. ими уже пользуются. И по-этому просто SaveToStream не работает. Я уже пробовал.
  • BorisBoris Москва
    отредактировано 03:35
    По-моему, это уже вопрос доступа к данным (то, что одновременно используется один шаблон отчета). Мне видится выход из этой проблемы в том, чтобы проверять перед сохранением изменений используется ли шаблон отчета кем-то другим и, если да, то запретить сохранение изменений. А то получится, что два пользователя могут одновременно редактировать шаблон отчета и "перекрыть" изменения друг друга.

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

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