BLOB

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

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

BLOB

Сообщение А.Н. » 12.07.2010 15:46:48

Не загружаются данные в поток. Вообще, не понимаю как с ними работать.

В одной строке, для примера, у меня записан XML. Но сообщение не выдаётся никогда:
Код: Выделить всё
    with TBlobField(FieldByName('TICKET_BODY')) do
      if (BlobSize > 0) then
        begin
          SaveToStream(FTicketBody);
          FTicketBody.Position := 0;
ShowMessage(FInsCompanyName);
        end;


Т.е., ни один BLOB не загружается. Почему? В них хранятся формы отчётов lazreport'а.
Как загрузить бланк из произвольного поля? Как сохранить?
И будет ли редактор отчётов сохранять форму в тот же поток, откуда она была загружена, при нажатии кнопки "Сохранить"?
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: BLOB

Сообщение B4rr4cuda » 14.07.2010 16:46:22

Тоже храню формы отчетов в блоб полях, загружаю так:
Код: Выделить всё
//загрузка формы отчета
procedure TAnalogProtocol.LoadReportBy(FieldName: string; ts: TStream);
begin
  with frmMain do
    begin
      zqtmp2.Close;
      zqtmp2.SQL.Clear;
      zqtmp2.SQL.Add('SELECT * FROM TIP where ID_OF_VID='+inttostr(pnlHead.tag));
      ZQtmp2.Active:=true;
      (ZQtmp2.FieldByName(FieldName) as TBlobField).SaveToStream(ts);
      ts.Position:=0;
    end;
end;

//вызов
procedure TfrmMain.btnView1Click(Sender: TObject);
var ms:TMemoryStream;
begin
  ms:=TMemoryStream.Create;
  AnalogProtocol.LoadReportBy('TPROTOCOL1',ms);
  frReport1.LoadFromStream(ms);
  ms.free;
  frReport1.ShowReport;
end;
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: BLOB

Сообщение А.Н. » 16.07.2010 11:26:59

Аналогичный код:
Код: Выделить всё
    with FieldByName('TICKET_BODY') as TBlobField do
      if (BlobSize > 0) then
        begin
          SaveToStream(FTicketBody);
          FTicketBody.Position := 0;
        end;

не работает. :(
Хотя, проблем с BLOB в MyDAC быть не должно.

Добавлено спустя 3 минуты 27 секунд:
Работает без "if (BlobSize > 0) then".
Но отчёт говорит "неподдерживаемый формат FRF". Я засунул туда бланк, сохранённый в файле.
Ведь ему без разницы откуда грузить? Формат всегда один и тот же? У меня такое впечатление, что BLOB просто не грузится.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: BLOB

Сообщение B4rr4cuda » 16.07.2010 16:15:04

хм, а как "засунул"? Надо также как и выдергиваешь отчет, так и заливать его в блоб поле, потоком.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: BLOB

Сообщение А.Н. » 16.07.2010 16:41:52

Просто загрузил в студии. Зачем именно так, с помощью потока? Ведь не должно быть разницы.
Чёрт, пробовал сохранить таким способом:
Код: Выделить всё
    Edit();
    with TBlobField(FieldByName('TICKET_BODY')) do
      begin
        FTicketBody.Position := 0;
        LoadFromStream(FTicketBody);
      end;

    Post();


Не сохраняет. Говорит incorrect string value. :(
У вас нет необходимых прав для просмотра вложений в этом сообщении.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: BLOB

Сообщение B4rr4cuda » 17.07.2010 19:41:35

Код: Выделить всё
procedure TfrmMain.imgProt1Click(Sender: TObject);
  var ts:tStream;
begin
  //загрузка репорта из файла и сохранение в блоб
  if opd1.Execute then
    begin
      frReport1.LoadFromFile(opd1.FileName);
      ts:=TMemoryStream.Create;
      frReport1.SaveToStream(ts);
      ts.Position:=0;

      ZQtmp.Edit;
      (ZQtmp.FieldByName('TPROTOCOL1')as TBlobField).LoadFromStream(ts);
      ZQtmp.Post;
    end;

end;
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: BLOB

Сообщение А.Н. » 19.07.2010 14:40:49

Не работает. Та же ошибка. :-( Какая-то проблема с сохранением.

Добавлено спустя 27 секунд:
Почему "некорректное значение строки"? :-|
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: BLOB

Сообщение B4rr4cuda » 19.07.2010 16:57:22

Без понятия, проект из которого дергаются эти куски кода собирался еще на 0.9.24, да так и работает. А в новых проектах возни с отчетами, к счастью, нету.

Добавлено спустя 2 минуты 27 секунд:
Задам глупый вопрос, а поле точно обьявлено как Blob? =)
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: BLOB

Сообщение А.Н. » 19.07.2010 18:24:11

Задам глупый вопрос, а поле точно обьявлено как Blob? =)

Как TEXT в таблице и внесено в список полей запроса, используя редактор полей.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: BLOB

Сообщение B4rr4cuda » 19.07.2010 20:10:10

Как TEXT в таблице и внесено в список полей запроса, используя редактор полей.

Хе, вопрос оказался не глупым)) Поменяй тип поля на Blob и должно заработать.
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: BLOB

Сообщение А.Н. » 19.07.2010 20:15:33

:D Гы-гы-гы. :( Что б я сдох. Работает. Но ведь в доках ясно написано, что TEXT - это BLOB, в котором, при сравнении не учитывается регистр.
Что ж это такое?
Спасибо огромное.

Добавлено спустя 4 минуты:
Теперь ещё вопрос.
Как обработать нажатие кнопки "Сохранить" в редакторе бланка?

Добавлено спустя 31 минуту 42 секунды:
Кажется, разобрался:
Код: Выделить всё
ProcedureInitDesigner();
  if (frDesigner = nil) then exit;
  ShowMessage((frDesigner as TfrDesignerForm).FileBtn3.Name);
exit;


FileBtn3 - кнопка сохранения на панельке редактора отчёта.

Ещё раз спасибо.

Кстати, в модуле LR_Desgn:
{.$Define ExtOI} // External Custom Object inspector (Christian)
{.$Define StdOI} // External Standard Object inspector (Jesus)
Возможно подключить другой инспектор объектов в дизайнере (хотя, похоже, что он там, вообще, не работает).
Также, есть опция, отключающая модальный показ редактора из DesignReport отчётов.
Естественно, всё требует перекомпиляции lazreport'а.

Возник другой вопрос.
Что такое шаблоны Fast Report (FastReportTemplate), для чего они нужны и как их использовать?
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: BLOB

Сообщение Mr.Smart » 19.07.2010 21:55:28

А.Н. писал(а):Возможно подключить другой инспектор объектов в дизайнере (хотя, похоже, что он там, вообще, не работает).

Прекрасно работает Сервис>Инструментальные панели>Инспектор объектов.

p.s. Я пока ещё в lazreport особо не разбирался, но это предстоит в будущем....
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: BLOB

Сообщение А.Н. » 19.07.2010 21:58:32

Оно там есть, но что делает непонятно...

Добавлено спустя 24 минуты 16 секунд:
>> load handel
>> sound(y, Fs)
Аллиллуйя! Аллилуйя! Аллиллуйя! :mrgreen:
После серии грязных хаков, типа создания класса TfrDumbReport с пустыми методами сохранения, с последующим переопределением переменной CurrentReport, в сменённом на мой, обработчике нажатия кнопки сохранения формы дизайнера отчёта, квитанции стали сохраняться в потоке, затем в БД. Ну наконец-то.
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

Re: BLOB

Сообщение Mr.Smart » 19.07.2010 22:24:05

В принципе он там вообще не нужен т.к. все свойства дублируется различными тулбарами и редакторами...
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: BLOB

Сообщение А.Н. » 19.07.2010 22:25:07

В принципе он там вообще не нужен

Да и непонятно работает ли он...

Вопрос про то что такое шаблоны - остаётся. Кто знает?

Добавлено спустя 7 минут 52 секунды:
О, блин, я рано порадовался. Сволочи, неужели не могли сделать public свойства у этого чёртового дизайнера? :-(
И процедуры TfrReport:
procedure SaveToFile(FName: String);
procedure SaveToXMLFile(const FName: String);
не виртуальные. :-(
Косячит бланк, если его пытаться загрузить, а, затем сохранить. Или создаст новый бланк, если такого ещё не существует. Стоило сделать создателям lazreport одно свойство public и проблем бы не было. Так нет же...
А.Н.
постоялец
 
Сообщения: 230
Зарегистрирован: 13.03.2010 12:23:58

След.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 12

Рейтинг@Mail.ru