Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
AHTOIIIKA
0 / 0 / 0
Регистрация: 29.01.2013
Сообщений: 75
1

Прочесть картинку из BLOB поля БД

19.03.2017, 22:02. Просмотров 275. Ответов 1
Метки нет (Все метки)

Мне нужно отобразить картинку в редакторе (использую компонент TRichViewEdit).
Чтобы отобразить JPEG картинку на листе, использую такой код:

Delphi
1
2
3
4
5
6
7
8
procedure InsertPicture;
var
  jpgPict: TJpegImage;
begin
  jpgPict := TJPegImage.Create;
  jpgPict.LoadFromFile('Картинка.jpg');
  RVE1.AddPictureEx('', jpgPict, 0, rvvaLeft);  // RVE1 переменная типа TRichViewEdit
end;
Дальше - понадобилось картинку хранить не в файле, а в базе данных.
Засунул её в BLOB поле таблицы СУБД Firebird и пробую достать и отобразить,
(пользуясь набором компонент FIB Plus). Для этого написал такой код:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure InsertPictureFromDB;
var
  jpgPict: TJpegImage;
  Stream : TMemoryStream;
begin
  QueryPicture.ExecQuery;  // QueryPicture запрос типа pFIBQuery, вытаскивающий из БД 
        // одну запись с одним BLOB полем 'PICT_IMAGE', содержащим JPEG картинку
  Stream := TMemoryStream.Create;
  try
    jpgPict := TJPegImage.Create;
    QueryPicture.FN('PICT_IMAGE').SaveToStream(Stream);
    jpgPict.LoadFromStream(Stream);
    RVE1.AddPictureEx('', jpgPict, 0, rvvaLeft);
  finally
    QueryPicture.Close;
    Stream.Free;
  end;
end;
не понимаю - почему в этом случае возникает ошибка при считывании картинки?
(текст ошибки такой: 'JPEG error #42')

Добавлено через 27 минут
Добавлю ещё:

1) ошибка такого содержания, как я понял, обозначает, что картинка пустая, изображение не найдено.

2) Если вместо использования TMemoryStream подставить сохранение в обычный файл, и потом считывание из него,
вышеприведённый код начинает нормально работать:

Delphi
1
2
3
4
//          QueryPicture.FN('PICT_IMAGE').SaveToStream(Stream);
          QueryPicture.FN('PICT_IMAGE').SaveToFile('temp.ipg');
//          jpgPict.LoadFromStream(Stream);
          jpgPict.LoadFromFile( 'temp.ipg');
Где же я ошибаюсь?..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2017, 22:02
Ответы с готовыми решениями:

Просмотр blob поля в cds таблице
data.cds - данные с профилометра – в blob поле bData содержится массив 3…6 тыс....

Сохранить в графический файл (tif, jpg, bmp) изображение из blob-поля Oracle
Добрый день, столкнулся с проблемой. В проекте на Delphi есть возможность...

Вывести картинку с BLOB поля удаленной БД (php)
Здравствуйте! Пробовал вот так: $path = $_SERVER; require_once $path ....

Как занести картинку в BLOB-поле?
база сделана через Database Desktop типа Paradox7, при создании поля выбрала...

Можно ли стандартными средствами ASP прочесть нетекстовый файл (например, картинку)?
Есть в ASP у объекта FileSystemObject метод для чтения текстовых файлов...

1
krapotkin
3418 / 3025 / 1047
Регистрация: 14.04.2014
Сообщений: 14,677
Записей в блоге: 15
19.03.2017, 22:49 2
не факт, что loadFromStream и loadFromFile реализованы одинаково
прояснить этот вопрос может только курение исходников
вполне возможно, что это не работает

сделайте тест средствами FIB+:
insert;
ЗАПИСАТЬ картинку;
post;
ПРОЧИТАТЬ картинку;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2017, 22:49

Из BLOB-поля в TDBImage
Всем привет, подскажите, что делаю не так?

Blob-поля в ADOTable
Всем желаю здравствовать. Посоветуйте пожалуйста как решить одну проблему. В...

BLOB поля в Interbase?
Вот я добавил фотографию в BLOB поле таким способом procedure...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru