frReport1.LoadFromDB

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

frReport1.LoadFromDB

Сообщение bpg » 24.09.2018 22:07:05

Подскажите, как правильно работать с frReport1.LoadFromDB
Есть желанеи хранить все отчеты в БД (Firebird 2.5)
Создал таблицу settings
первое поле id - integer
второе blob - туда засунул файл отчета
При попытке считывания operation cannot be performed on an inactive dataset. Отстанов на строке - 10661 LR_Class.pas
Код: Выделить всё
procedure TfrReport.LoadFromDB(Table: TDataSet; DocN: Integer);
var
  Stream: TMemoryStream;
begin
  Table.First;
  while not Table.Eof do
  begin
    if Table.Fields[0].AsInteger = DocN then
    begin
      Stream := TMemoryStream.Create;
      TfrTBlobField(Table.Fields[1]).SaveToStream(Stream);
      Stream.Position := 0;
      LoadFromStream(Stream);
      Stream.Free;
      Exit;
    end;
    Table.Next;
  end;
end;                           


Добавлено спустя 1 минуту 5 секунд:
Вызываю таким кодом
Код: Выделить всё
frReport1.LoadFromDB(DM.DataSourceSettings.DataSet,1);
frReport1.ShowReport();
bpg
новенький
 
Сообщения: 36
Зарегистрирован: 28.11.2017 21:23:18

Re: frReport1.LoadFromDB

Сообщение Vadim » 25.09.2018 06:03:36

Судя по:
bpg писал(а): inactive dataset

не могло ли так случиться, что Вы позабыли открыть набор данных из которого пытаетесь взять отчёт?
Vadim
долгожитель
 
Сообщения: 2785
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: frReport1.LoadFromDB

Сообщение bpg » 25.09.2018 09:21:11

Это точно, открыть я его не забыл, а вот переоткрыть при Transaction.Commit забыл.
Но теперь другая проблема.
Нашел пример из интернета, там советуют сначала
Код: Выделить всё
frReport1.LoadFromFile('YourReport.lrf');
  frReport1.SaveToDB(EditableDataSet, FieldNumber);

а потом
Код: Выделить всё
//frReport1.LoadFromFile('YourReport.lrf');
  //frReport1.SaveToDB(EditableDataSet, FieldNumber);
  frReport1.LoadFromDB(DataSet, FieldNumber);

Но выдает ошибку неправильного формата данных отчета (60)
Видно что командой SaveDb он ничего не записывает в поле.
Через IBExpress, все записывается и читается как xml
Куда смотреть? Должен быть ли какой то специфичный формат BLOB поля для хранения отчета?
bpg
новенький
 
Сообщения: 36
Зарегистрирован: 28.11.2017 21:23:18

Re: frReport1.LoadFromDB

Сообщение Vadim » 25.09.2018 11:30:02

bpg писал(а):frReport1.LoadFromFile('YourReport.lrf');

И опять аналогичный вопрос - а у Вас этот самый файл с шаблоном отчёта существует в природе?
В БЛОБ по идее хранится голый текст, Вы ведь сами его видите в IBExpress:
bpg писал(а):Через IBExpress, все записывается и читается как xml
Vadim
долгожитель
 
Сообщения: 2785
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: frReport1.LoadFromDB

Сообщение bpg » 25.09.2018 14:47:44

Конечно существует, я его же до этого вызывал и сейчас он вызывается, только перед командой Show делаю SaveToDB
и ничего не происходит. В IBExpress нет данных.
Вот и думаю. может я как то не так создал поле BLOB, было такое с картинкой, не отображалось, потому что не записывался заголовок, может и тут что то подобное?
bpg
новенький
 
Сообщения: 36
Зарегистрирован: 28.11.2017 21:23:18

Re: frReport1.LoadFromDB

Сообщение Vadim » 25.09.2018 17:06:31

Честно говоря, ни разу не пробовал хранить шаблоны отчётов в БД. Надо будет попробовать и позже Вам отпишусь.
В связи с этим следующий вопрос:
Каким именно компонентом отчётов Вы пользуетесь:
1. Тем, что входит в состав Lazarus и является родственником FreeReport;
2. FreeReport;
3. FastReport.
Vadim
долгожитель
 
Сообщения: 2785
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: frReport1.LoadFromDB

Сообщение bpg » 25.09.2018 19:34:09

1. Lazarus 1.8.2
2. Встроеный компонент Lazreport
3. БД Firebird 2.5

Добавлено спустя 15 минут 17 секунд:
Я бы не против попытаться хранить шаблоны отчетов в каталоге, но при сетевой программе возникают сложности. Думал хранить в форме, но тогда нельзя пользоваться дизайнером, а если им пользоваться то пропадает смысл, хранить на сетевом каталоге??? но по закону бутерброда, глюки с одновременным открытием, или просто глюк сети и т.д. Поэтому и надумал хранить отчет в BLOB поле, как фотку, например. Но что то не получается.
Может я загоняю не туда и все проще, подскажите, но желательно не общими фразами, а примерами....
bpg
новенький
 
Сообщения: 36
Зарегистрирован: 28.11.2017 21:23:18

Re: frReport1.LoadFromDB

Сообщение wadman » 26.09.2018 09:06:07

bpg писал(а):может и тут что то подобное?

Там нет ничего скрытого. Пишется в stream, а куда в итоге он приведет, отчету по барабану (память, блоб, файл и т.п.).
Так что без полного воспроизводимого минимального примера сложно сказать в какой строке ошибка.
wadman
постоялец
 
Сообщения: 106
Зарегистрирован: 18.10.2016 15:54:28

Re: frReport1.LoadFromDB

Сообщение Снег Север » 26.09.2018 16:15:41

bpg, после записи текста в блоб post сделан, транзакция закрыта?
Аватара пользователя
Снег Север
энтузиаст
 
Сообщения: 1180
Зарегистрирован: 27.11.2007 16:14:47

Re: frReport1.LoadFromDB

Сообщение bpg » 26.09.2018 17:01:01

да.
bpg
новенький
 
Сообщения: 36
Зарегистрирован: 28.11.2017 21:23:18


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

Рейтинг@Mail.ru