SQLRU.net
Разработка приложений баз данных

Начало » Программирование » Delphi » FireDac+PostgreSQL+bytea (blob)
FireDac+PostgreSQL+bytea (blob) [сообщение #2644] Tue, 27 June 2023 23:47 Переход к следующему сообщению
GrigoryFomin в настоящее время не в онлайне  GrigoryFomin
Сообщений: 90
Зарегистрирован: April 2023
Member
Уже несколько дней воюю - документации ноль, в форумах ответа не нашел, мож слеп, подскажите плз направление.
Нужно в bytea поле загрузить стрим. Стрим из FB вытащил, а вот засунуть - ошибка:

 while not qFBPhotos.Eof do
  begin
    qPG.Active := false;
    qPG.ParamByName('PHID').AsSmallInt := qFBPhotos.FieldByName('PID').AsInteger;
    bb.Clear;
    (qFBPhotos.FieldByName('pict') as TBlobField).SaveToStream(bb);
    bb.Seek(0,0);
    qPG.ParamByName('photo').DataType:=ftBlob;
    qPG.ParamByName('photo').AsStream:=bb;
    qPG.ParamByName('phDBDATE').AsDateTime := qFBPhotos.FieldByName('DBDATE').AsDateTime;
    qPG.ExecSQL;
//И тут вылазит ошибка, которую  снизу указал

    memo1.Lines[memo1.Lines.Count-1]:='Переносится фото '+qFBPhotos.RecNo.ToString+' из '+qFBPhotos.recordcount.tostring;
    Application.ProcessMessages;
    qFBPhotos.next;
  end;

First chance exception at $00007FF9B7C2CF19. Exception class EFDException with message '[FireDAC][Phys][PG]-352. Object value for [PHOTO] parameter of [ftBlob] type is not supported'.
Re: FireDac+PostgreSQL+bytea (blob) [сообщение #2648 является ответом на сообщение #2644] Wed, 28 June 2023 13:09 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 800
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
ничо не понял.
что именно ты хочешь засунуть в BLOB - файл, или поток?
Re: FireDac+PostgreSQL+bytea (blob) [сообщение #2649 является ответом на сообщение #2648] Wed, 28 June 2023 13:29 Переход к предыдущему сообщениюПереход к следующему сообщению
МП в настоящее время не в онлайне  МП
Сообщений: 800
Зарегистрирован: August 2022
Географическое положение: бурятский тун...
Senior Member
в общем тебе нужно делать так:
qPG.ParamByName('photo').LoadFromFile(...);
или же
qPG.ParamByName('photo').LoadFromStream(...);
вместо
qPG.ParamByName('photo').AsStream:=bb;
и можешь убрать
qPG.ParamByName('photo').DataType:=ftBlob;
Re: FireDac+PostgreSQL+bytea (blob) [сообщение #2655 является ответом на сообщение #2649] Wed, 28 June 2023 21:02 Переход к предыдущему сообщению
GrigoryFomin в настоящее время не в онлайне  GrigoryFomin
Сообщений: 90
Зарегистрирован: April 2023
Member
Спасибо помогло, итоговый вариант стал
 while not qFBPhotos.Eof do
  begin
    qPG.Active := false;
    qPG.ParamByName('PHID').AsSmallInt := qFBPhotos.FieldByName('PID').AsInteger;
    bb.Clear;
    (qFBPhotos.FieldByName('pict') as TBlobField).SaveToStream(bb);
    bb.Seek(0,0);
    qPG.ParamByName('photo').LoadFromStream(bb,ftBlob);
    qPG.ParamByName('phDBDATE').AsDateTime := qFBPhotos.FieldByName('DBDATE').AsDateTime;
    qPG.ExecSQL;
    memo1.Lines[memo1.Lines.Count-1]:='Переносится фото '+qFBPhotos.RecNo.ToString+' из '+qFBPhotos.recordcount.tostring;
    Application.ProcessMessages;
    qFBPhotos.next;
  end;
Предыдущая тема: идеи для современного пользовательского интерфейса
Следующая тема: И снова про FireDac - он обзавелся ИИ?
Переход к форуму:
  


Текущее время: Mon Apr 29 02:22:25 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00609 секунд