Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хранение формы FastReport в базе данных 
:(
    Опции темы
Siplex
  Дата 27.12.2004, 14:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Имеется SQL-Server 2000 на котором хранится некая база данных. В этой базе данных имеется таблица, которая состоит из двух полей:

1 - № - Автоинкрементное

2 – Report_body – Binary - вот в этом-то поле и все дело.



Я использую FastReport для создания и генерации отчетов в программе. Формы отчетов можно хранить как в отдельном файле, как в потоке и как в таблице базы данных.



Форму отчета я храню (точнее пытаюсь хранить) в таблице базы данных. Открываю Дизайнер отчетов и размещаю на 1 странице компонент «Форма» на 2 странице сам лист отчета. На форме (в дизайнере отчетов) у меня располагается компонент TfrADOQuery с описанным SQL и Parametr. Все создал сохранил в файл все работает.

Теперь пытаюсь сохранить этот файл в бинарное поле таблицы на сервере при помощи процедуры FastReport’a SaveToBlobField – сохраняет, но только бланк отчета, а то, что у меня было на первой странице не сохраняет. А проверил я это попытавшись загрузить с сервера сохраненную форму при помощи команды LoadFromBlobField.

  Вверх
Alex
Дата 2.1.2005, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



Код

procedure SaveReport(report_id:Integer);
var
 Stream:TMemoryStream;
begin
 Stream:=TMemoryStream.Create;
 try
   frReport.SaveToStream(Stream);
   Query.SQL.Clear;
   Query.SQL.Add('insert into REPORTS (report_id,report_body) values (:report_id,:report_body)');
   Query.ParamByName('report_id').AsInteger:=report_id;
   Query.ParamByName('report_body').LoadFromStream(Stream,ftBlob);
   Query.ExecSQL;
 finally
   Stream.Free;
 end;
end;

procedure LoadReport(report_id:Integer);
var
 Stream:TMemoryStream;
begin
 Stream:=TMemoryStream.Create;
 try
   Query.SQL.Clear;
   Query.SQL.Add('select * from REPORTS where report_id=:report_id');
   Query.ParamByName('report_id').AsInteger:=report_id;
   Query.Open;
   TBlobField(Query.FieldByName('report_body')).SaveToStream(Stream);
   frReport.LoadFromStream(Stream);
 finally
   Query.Close;
   Stream.Free;
 end;
end;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
rOOxus
Дата 13.5.2009, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 95
Регистрация: 28.8.2006

Репутация: нет
Всего: нет



у меня похожая штука только я храню готовые отчеты в базе. FastReport 4, СУБД FireBird 2
с сохранением проблем нет, а в то с отображением...
процедура сохранения:
Код
procedure TPreviewForm.SaveReport( ReportName : String );
var
   Stream : TMemoryStream;
begin
   if IBTran.InTransaction then
      IBTran.Rollback;

   IBTran.StartTransaction;      

   Stream := TMemoryStream.Create;

   frxPreview.PreviewPages.SaveToStream( Stream );

   IBQ.SQL.Clear;
   IBQ.SQL.Add('insert into DAT_PREPORTS ( name, report ) values ( :name, :report )');
   IBQ.ParamByName('name').AsString:= ReportName;
   IBQ.ParamByName('report').LoadFromStream( Stream, ftBlob );
   IBQ.ExecSQL;

   IBTran.Commit;

   Stream.Free;
end;

процедура загрузки:
Код
procedure TPreviewForm.LoadReport( Id: Integer );
var
 Stream : TMemoryStream;
begin
   if IBTran.InTransaction then
      IBTran.Rollback;

   IBTran.StartTransaction;


   Stream := TMemoryStream.Create;

   IBQ.SQL.Clear;
   IBQ.SQL.Add('select * from DAT_PREPORTS where id = :id');
   IBQ.ParamByName('id').AsInteger := Id;
   IBQ.Open;

   if not IBQ.FieldByName('report').IsNull then
      TBlobField( IBQ.FieldByName('report') ).SaveToStream(Stream);

   frxPreview.PreviewPages.LoadFromStream( Stream );

   IBQ.Close;

   IBTran.Commit;   

   Stream.Free;
end;
вот тут и вылетае ошибка [color=red]Invalid file format[/color]

однако если сделать вот так:
Код
procedure TPreviewForm.LoadReport( Id: Integer );
var
 Stream : TMemoryStream;
begin
   if IBTran.InTransaction then
      IBTran.Rollback;

   IBTran.StartTransaction;


   Stream := TMemoryStream.Create;

   IBQ.SQL.Clear;
   IBQ.SQL.Add('select * from DAT_PREPORTS where id = :id');
   IBQ.ParamByName('id').AsInteger := Id;
   IBQ.Open;

   if not IBQ.FieldByName('report').IsNull then
      TBlobField( IBQ.FieldByName('report') ).SaveToStream(Stream);

//   frxPreview.PreviewPages.LoadFromStream( Stream );

   Stream.SaveToFile( ExtractFilePath( Application.ExeName ) + 'tmp.fp3' );

   if FileExists( ExtractFilePath( Application.ExeName ) + 'tmp.fp3' ) then
   begin
      frxPreview.LoadFromFile( ExtractFilePath( Application.ExeName ) + 'tmp.fp3' );
      DeleteFile( ExtractFilePath( Application.ExeName ) + 'tmp.fp3' );
   end;

   IBQ.Close;

   IBTran.Commit;   

   Stream.Free;
end;

то ошибки нет все ОК. как обойтись без выгрузки во временный файл?



PM MAIL   Вверх
rOOxus
Дата 10.6.2009, 16:31 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 95
Регистрация: 28.8.2006

Репутация: нет
Всего: нет



что неужто никто не знает?
PM MAIL   Вверх
HeliX
Дата 10.6.2009, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 6.6.2009

Репутация: нет
Всего: нет



Цитата(rOOxus @ 10.6.2009,  16:31)
что неужто никто не знает?

Нужно добавить 
Код

Stream.Position := 0;


перед
Код

 frxPreview.PreviewPages.LoadFromStream( Stream );

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0770 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.