powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Access. Вывод картинки из поля типа Вложение
17 сообщений из 17, страница 1 из 1
Access. Вывод картинки из поля типа Вложение
    #39660795
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток! Есть БД на Access, в ней есть поле с типом "Вложение". В каждом таком поле лежит картинка jpg. Отвечу сразу на вопрос почему не OLE? Просто не я делал эту базу, а переделывать, сохраняя картинки в файлы и загоняя их в другой тип поля как-то не хочется.
Вопрос до банального прост. Мне надо вывести эту картинку в каой-нибудь контрол (Image, DBImage, cxImage...)
Методом гуглежа нарыл, что в данном типе файла есть подтипы: FileName, FileData, FileType. Получается, что данные находятся в FileData. Делаем запрос типа:

Код: sql
1.
2.
3.
4.
Select
id,
name.FileData as Picture
From table1



Делфя в ADOQuery воспринимает его как Blob. Вроде все хорошо, но через DBImage не выводится (Bitmap image is not valid). Подумал, что дело в jpg. Попробовал через простой Image и объекты MemoryStream & JpegImage грузить картинку, но на считывании в jpegimage из memoryStream ошибка #53. По дебагеру после загрузки блоба в МС пусто.
Подскажите пожалуйста как победить?
...
Рейтинг: 0 / 0
Access. Вывод картинки из поля типа Вложение
    #39660797
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13Попробовал через простой Image и объекты MemoryStream & JpegImage грузить картинку, но на считывании в jpegimage из memoryStream ошибка #53.
Как именно пробовал?
...
Рейтинг: 0 / 0
Access. Вывод картинки из поля типа Вложение
    #39660803
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

Вот так пробовал первый раз
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
var
j: TJPEGImage;
b: TADOBlobStream;
begin
j := TGPEGImage.Create;
b := TADOBlobStream.Create(TBlobField(QPicture.FieldByName('Picture')), bmRead);
try
j.LoadFromStream(b); // тут ошибка 53
Image.Picture.Assign(j);
finally
FreeandNil(b);
FreeandNil(j);
end;
end;
...
Рейтинг: 0 / 0
Access. Вывод картинки из поля типа Вложение
    #39660810
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlobStream на MemoryStream пробовал заменить, та же фигня. Мне кажется что раз в таком типе поля может быть несколько файлов, может ему еще как то надо FileName указать? Только как?
...
Рейтинг: 0 / 0
Access. Вывод картинки из поля типа Вложение
    #39660819
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13
Код: pascal
1.
j.LoadFromStream(b); // тут ошибка 53


Вместо этого сохрани в локальный файл и посмотри содержимое. Точно там jpeg?
...
Рейтинг: 0 / 0
Access. Вывод картинки из поля типа Вложение
    #39660826
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman, неа, это не чистый jpg. Но в кракозябрах файла тоталом по F3 в начале есть буквы j.p.g
...
Рейтинг: 0 / 0
Access. Вывод картинки из поля типа Вложение
    #39660830
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13wadman, неа, это не чистый jpg. Но в кракозябрах файла тоталом по F3 в начале есть буквы j.p.g
А раз это не "чистый jpg", то перед тем, как подсовывать TJPEGImage его нужно как-то очистить.
ЗЫ: У jpeg вначале идёт сигнатура FF D8 FF E0 00 10 A4 46 49 46
...
Рейтинг: 0 / 0
Access. Вывод картинки из поля типа Вложение
    #39660831
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldmi45, ммм а как его очистить?
...
Рейтинг: 0 / 0
Access. Вывод картинки из поля типа Вложение
    #39660832
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldmi45сигнатура FF D8 FF E0 00 10 4A 46 49 46 поправил
...
Рейтинг: 0 / 0
Access. Вывод картинки из поля типа Вложение
    #39660838
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13goldmi45, ммм а как его очистить?
Возможно, в блобе просто дописаны буквы " j.p.g". Если так, то нужно просто брать не весь блоб, а только то, что начинается после этого заголовка. Посмотрите, есть ли в файле, в который вы сохранили блоб, сигнатура jpeg или нет.
...
Рейтинг: 0 / 0
Access. Вывод картинки из поля типа Вложение
    #39660840
Дураг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько помню Access в начало блоба jpg пишет свою служебную информацию
потому нужно сначала сделать b.Seek куда нужно...
...
Рейтинг: 0 / 0
Access. Вывод картинки из поля типа Вложение
    #39660842
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot dartveider13
Отвечу сразу на вопрос почему не OLE?
[/quot]
Дурагнасколько помню Access в начало блоба jpg пишет свою служебную информацию

А не в OLE формате ли он пишет содержимое?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Access. Вывод картинки из поля типа Вложение
    #39660911
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovА не в OLE формате ли он пишет содержимое?..

+
...
Рейтинг: 0 / 0
Access. Вывод картинки из поля типа Вложение
    #39661019
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldmi45, Ну F3 в тотале сигнатуру вряд ли покажет, там кракозябры только. Буду сегодня дальше гуглить. Мне кажется должно быть какое-то простое решение... Судя по описанию типа поля в вложении могут быть разные файлы (их может быть несколько). Вот скорее всего в этом блобе они кучей и хранятся.
...
Рейтинг: 0 / 0
Access. Вывод картинки из поля типа Вложение
    #39661021
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HeX - просмотрщик показывает, что есть сигнатура jpeg, но до нее действительно есть какая-то служебная информация. Ща будем пробовать обрезать
...
Рейтинг: 0 / 0
Access. Вывод картинки из поля типа Вложение
    #39661024
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем опытным путем хирурга-проктолога оказалось, что первые 20 байт как раз лишняя инфа. В итоге

Код: pascal
1.
2.
3.
4.
5.
6.
b := TADOBlobStream.Create(TBlobField(Q.FieldByName('Picture')), bmRead);
ms := TMemoryStream.Create;

b.Seek(20, soFromBeginning);
ms.CopyFrom(b, b.Size - 20);
ms.SaveToFile('D:\111.jpg');



дало картинку))) Всем спасибо. Особенно за сигнатуру.)))
...
Рейтинг: 0 / 0
Access. Вывод картинки из поля типа Вложение
    #39661082
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13,

https://www.filesignatures.net/index.php?page=search&search=JPEG&mode=EXT - в дополнение по сигнатурам. У ЖПГ они разные могут быть.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Access. Вывод картинки из поля типа Вложение
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]