Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Добавление в БД и извлечение картинки JPG [D6]


Страницы:   1 2

Laguna ©   (2011-10-14 11:00:00) 

Поиск по форуму ничего не дал. Ветки с вопросами или закрыты или ссылка в никуда. Поиск по сетке дает кусок переписанного поголовно кода, смысл которго записать картинку в поток с последующей записью в базу, т.к. просьба не пинать. На данном этапе в базу приходится записывать bmp, но хотелось бы уменьшить размер и хранить в ней картинки jpg. Если не затруднит дать нормальный пример или ссылку на такой. Спасибо. Какая база не принципиально, интересует сам алгоритм сохранения и извлечения в Timage. Какой то пример испытывал. Запись в БД проходила нормально, а при извлечении - ошибка.


Laguna   (2011-10-23 00:17:00) [1]

Если честно, то по хэлпу не смотрел, смотрел по коду при отладке. Заметил, что DBImage использует потоки, только обработка типа картинки вроде ка не определяется, что именно jpg. Я нашел способ загрузки из блоб поля на в Timage. Вся обработка и загрузка происходит как то с притормаживанием, это напрягает.


Inovet   (2011-10-23 00:13:00) [2]

> [24] Laguna ©   (23.10.11 00:03)
> Ты вобще в курсе, что речь идет о DBImage а не TImage?

А ты вообще хелп-то открывал?
DBCtrls.TDBImage.Picture


Laguna   (2011-10-23 00:03:00) [3]

> Inovet

Ты вобще в курсе, что речь идет о DBImageа не TImage?


Inovet   (2011-10-22 23:35:00) [4]

> [22] Laguna ©   (22.10.11 21:58)
> > The property value is a TPicture object which can contain
> > an icon, metafile, bitmap, or other graphic object
>
> О каком свойстве идет речь?

Представь себе, о Picture.


Laguna   (2011-10-22 21:58:00) [5]


> The property valueis a TPicture object which can contain
> an icon, metafile, bitmap, or other graphic object


О каком свойстве идет речь?


Inovet   (2011-10-21 00:08:00) [6]

> [20] Laguna ©   (20.10.11 23:59)
> > ты хоть бы хелп почитал..
>
> При чем тут модуль?!? Речь о том, что DBImage не связывается с jpg

The property value is a TPicture object which can contain an icon, metafile, bitmap, or other graphic object


Laguna   (2011-10-20 23:59:00) [7]


> ты хоть бы хелп почитал..

При чем тут модуль?!? Речь о том, что DBImage не связывается с jpg


Витлий Панасенко   (2011-10-20 14:46:00) [8]


> Стоило сохранить jpg,

ты хоть бы хелп почитал.. модуль нужный подключи.. или используй JEDI - халявные компоненты


Jeer   (2011-10-16 00:25:00) [9]


> Не совсем удобно..


Удобно бывает только в собственноручно обустроенном туалете, да и то - пока не увидишь кем-то более обустроенный вариант. (С)


Laguna   (2011-10-16 00:19:00) [10]

Казалось вопрос уже можно было закрыть. Найден метод загрузки картинки jpg или bmp в Blob-поле и извлечение его обратно в Timage. Однако проявилась следующая проблема. На форме лежат DBImage, которые связаны с Blob-полем. Когда в базе была картинка bmp - все было нормально. Стоило сохранить jpg, то при загрузке формы сразу же вылетает ошибка. Как поступить в данной ситуации? Убирать вообще DBImage, вместо их ставить Timage  и банально в момент открытия таблицы загружать в них картинки? Не совсем удобно...


Laguna   (2011-10-15 00:57:00) [11]

А есть принципиальное отличие в использовании BlobStream и MemorySream ?


DVM   (2011-10-15 00:23:00) [12]

Запись

AdoCmd.Parameters.ParamByName('Field').LoadFromFile(PictureFile, ftVarBytes);

Чтение

Stream := DataSet.CreateBlobStream(DataSet.FieldByName(Field), bmRead);


Jeer   (2011-10-14 21:43:00) [13]

Где-то примерно так:

M: TStream;
jpg: TJPEGImage;
qu: T*Dataset;

//
jpg := TJPEGImage.Create;

jpg.Performance := jpBestQuality;
jpg.Scale := jsFullSize;
qu.Open;
M := qu.CreateBlobStream(vFieldName, bmRead);
jpg.LoadFromStream(M);

...
ну и там всякие try, free...


Laguna   (2011-10-14 20:16:00) [14]

Все, разобрался. Сделал через MemoryStream. C BlobStream так и не заработало.


Laguna   (2011-10-14 16:26:00) [15]

> stas ©

Видать я такой способ уже применял. Т.к. отработал криво, поэтому его и стер. Да,  через MemoryStream нечто в базу записывается, но сами смотрите.
http://s011.radikal.ru/i316/1110/a4/3a6d91c0d961.jpg
Я уже писал, что если по полю Blob в базе тыкнуть мышом, то должна показаться картинка в окошке, а здесь какая то несуразица и при загрузке выдает ошибку.

ps
еще из наблюдений. Если поле блоб не содержит данных, то "Blob" написано так, а если есть, то "BLOB" так.


stas   (2011-10-14 14:46:00) [16]

По поводу TBlobStream не знаю, вот так через MemoryStream
Var
bs : TMemoryStream;
begin
bs := TMemoryStream.Create();
Image1.Picture.Graphic.SaveToStream(bs);
Table1.Insert;
 Bs.position:=0;
 Table1Foto1.LoadFromStream(bs);
Table1.Post;
bs.Free;


Laguna   (2011-10-14 14:37:00) [17]

если я создаю Blob-поток и ассоциируе его с конкретным полем таблицы, то почему не происходит записи картинки ?

Var
 bs : TBlobStream;
begin
 bs := TBlobStream.Create(Table1Foto1, bmWrite);
 Image1.Picture.Graphic.SaveToStream(bs);

или нужно делать так?

Var
 bs : TBlobStream;
begin
 bs := TBlobStream.Create(Table1Foto1, bmWrite);
 Image1.Picture.Graphic.SaveToStream(bs);
 Table1.Insert;
  Table1Foto1.LoadFromStream(bs);
 Table1.Post;
 bs.Free;


stas   (2011-10-14 14:18:00) [18]

Laguna ©   (14.10.11 12:20) [8]
через поток загружаешь картинку в блоб поле, а тип присваиваешь обычно.


Laguna   (2011-10-14 12:20:00) [19]


> Либо записываешь как есть,

Это как? Через потоки? Через обычное присваивание полю?


Ega23   (2011-10-14 12:16:00) [20]


> Или хотя бы алгоритм правильных действий по записи картинки
> в базу и извлечения.


Приводишь всё к одному виду (либо bmp, либо jpg, либо что-то ещё) и записываешь. Либо записываешь как есть, но в отдельном поле помечаешь тип картинки.
Считываешь также.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо