frReport1.LoadFromDB

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

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

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

frReport1.LoadFromDB

Сообщение bpg »

Подскажите, как правильно работать с 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();
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

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

не могло ли так случиться, что Вы позабыли открыть набор данных из которого пытаетесь взять отчёт?
bpg
новенький
Сообщения: 36
Зарегистрирован: 28.11.2017 20:23:18

Сообщение bpg »

Это точно, открыть я его не забыл, а вот переоткрыть при 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 поля для хранения отчета?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

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

И опять аналогичный вопрос - а у Вас этот самый файл с шаблоном отчёта существует в природе?
В БЛОБ по идее хранится голый текст, Вы ведь сами его видите в IBExpress:
bpg писал(а):Через IBExpress, все записывается и читается как xml
bpg
новенький
Сообщения: 36
Зарегистрирован: 28.11.2017 20:23:18

Сообщение bpg »

Конечно существует, я его же до этого вызывал и сейчас он вызывается, только перед командой Show делаю SaveToDB
и ничего не происходит. В IBExpress нет данных.
Вот и думаю. может я как то не так создал поле BLOB, было такое с картинкой, не отображалось, потому что не записывался заголовок, может и тут что то подобное?
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Честно говоря, ни разу не пробовал хранить шаблоны отчётов в БД. Надо будет попробовать и позже Вам отпишусь.
В связи с этим следующий вопрос:
Каким именно компонентом отчётов Вы пользуетесь:
1. Тем, что входит в состав Lazarus и является родственником FreeReport;
2. FreeReport;
3. FastReport.
bpg
новенький
Сообщения: 36
Зарегистрирован: 28.11.2017 20:23:18

Сообщение bpg »

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

Добавлено спустя 15 минут 17 секунд:
Я бы не против попытаться хранить шаблоны отчетов в каталоге, но при сетевой программе возникают сложности. Думал хранить в форме, но тогда нельзя пользоваться дизайнером, а если им пользоваться то пропадает смысл, хранить на сетевом каталоге??? но по закону бутерброда, глюки с одновременным открытием, или просто глюк сети и т.д. Поэтому и надумал хранить отчет в BLOB поле, как фотку, например. Но что то не получается.
Может я загоняю не туда и все проще, подскажите, но желательно не общими фразами, а примерами....
wadman
постоялец
Сообщения: 122
Зарегистрирован: 18.10.2016 14:54:28
Контактная информация:

Сообщение wadman »

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

Там нет ничего скрытого. Пишется в stream, а куда в итоге он приведет, отчету по барабану (память, блоб, файл и т.п.).
Так что без полного воспроизводимого минимального примера сложно сказать в какой строке ошибка.
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3067
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

bpg, после записи текста в блоб post сделан, транзакция закрыта?
bpg
новенький
Сообщения: 36
Зарегистрирован: 28.11.2017 20:23:18

Сообщение bpg »

да.
Ответить