Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сохранить отчет в БД? 
:(
    Опции темы
Ravend
Дата 17.8.2005, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет, All!

для вывода отчета на печать использую FastReport 3.0
требуется предоставление пользователю возможности самому создавать отчеты
сложность в том что храниться и извлекаться отчеты должны в БД (MSSQL 2000, blob-поле)

подскажите как возможно перехватить загрузку и сохранение отчета с перенаправлением этого процесса в БД?

Спасибо
PM MAIL   Вверх
Alex
Дата 17.8.2005, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



У TfrxDesigner есть два события OnLoadReport и OnSaveReport


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


Шустрый
*


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

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



Спасибо за подсказку.

Залез в местный FAQ, попытался сделать по образу и подобию описанных там действий:
Код


function TmyForm.myDesSaveReport(Report: TfrxReport;
  SaveAs: Boolean): Boolean;
var
  Data: TStream;
  DataString: String;
begin
    Data := TMemoryStream.Create;
    Report.SaveToStream(Data);
    try
      SetLength(DataString, Data.Size);
      Data.ReadBuffer(DataString[1], Data.Size); - !!!!!
      myTable.Edit;
      myTable.FieldByName('_Data').asString := DataString;
      myTable.Past;
    finally
      Data.Free;
    end;
end;


Но в указанной строке считывание в буфер не происходит, вызываемый в ReadBuffer метод Read возвращает 0, почему?
P.S.
Data.Size > 0
PM MAIL   Вверх
Alex
Дата 19.8.2005, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Код

function TmyForm.myDesSaveReport(Report: TfrxReport;
  SaveAs: Boolean): Boolean;
var
  Data: TStream;
  DataString: String;
begin
    Data := TMemoryStream.Create;
    Report.SaveToStream(Data);
    try
      SetLength(DataString, Data.Size);
      Data.Position:= 0;
      Data.ReadBuffer(DataString[1], Data.Size);
      myTable.Edit;
      myTable.FieldByName('_Data').asString := DataString;
      myTable.Past;
    finally
      Data.Free;
    end;
end;



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


Шустрый
*


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

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



Alex
Спасибо, как раз глянул исходники (.Read), все стало понятно

PM MAIL   Вверх
Ravend
Дата 19.8.2005, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Теперь проблема с чтением из базы:
Код

function TmyForm.myDesLoadReport(Report: TfrxReport): Boolean;
var
  Data: TStream;
  DataString: String;
begin
    Data := TMemoryStream.Create;
    try
      DataString := myTable.FieldByName('_Data').asString;
      Data.WriteBuffer(DataString[1], Length(DataString));
      if Data.Size > 0 then
        Report.LoadFromStream(Data); - !!!!!
    finally
      Data.Free;
    end;
end;


в указанной строке выдает 'Invalid file format', почему?
P.S.
из базы получен ровно тот же XML что туда и клался, размер тот же
PM MAIL   Вверх
Ravend
Дата 19.8.2005, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



спасибо, сам разобрался, все тот же присловутый:
Код

  Data.Position := 0;

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

Запрещено:

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

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


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

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

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


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

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


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

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


 




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


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

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