Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.01.29;
Скачать: CL | DM;

Вниз

Добавление в БД и извлечение картинки JPG   Найти похожие ветки 

 
Laguna ©   (2011-10-14 11:00) [0]

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


 
Ega23 ©   (2011-10-14 11:09) [1]

Код показывай, где ошибка.


 
Laguna ©   (2011-10-14 11:16) [2]

Кода нет, стер, т.к. разные варианты пробывал и уже запутался что где брал. Факт что ничто не подходило. Помню, что если зайти в редактирование структуры таблицы и тыкнуть мышом по заполненному полю Bloи, то там где картинк Bmp - показывается в другом окошке, а где сохранена через поток jpg? то выскакмвает окошко, в котором написано "Load image error" или что то в этом роде.


 
stas ©   (2011-10-14 11:45) [3]

Laguna ©   (14.10.11 11:16) [2]
>Кода нет, стер
Пишите по новой)


 
Ega23 ©   (2011-10-14 12:01) [4]


> Кода нет


Ты предлагаешь написать его за тебя?


>  Факт что ничто не подходило.


Ты предлагаешь подыскать что-нибудь подходящее за тебя?


>  или что то в этом роде.


Ты предлагаешь воссоздать ошибку за тебя?


 
Laguna ©   (2011-10-14 12:03) [5]

Записывал в таблицу на основе этого примера

if Picture.Graphic is TJPegImage then
begin
 bs:=TBlobStream.Create(TBlobField(Field),bmWrite);
 Picture.Graphic.SaveToStream(bs);
 bs.Free;
end


 
Laguna ©   (2011-10-14 12:05) [6]

> Ega23

> > Кода нетТы предлагаешь написать его за тебя?


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


 
Ega23 ©   (2011-10-14 12:16) [7]


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


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


 
Laguna ©   (2011-10-14 12:20) [8]


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

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


 
stas ©   (2011-10-14 14:18) [9]

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


 
Laguna ©   (2011-10-14 14:37) [10]

если я создаю 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:46) [11]

По поводу 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 16:26) [12]

> stas ©

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

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


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

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


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

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

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...


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

Запись

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

Чтение

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


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

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


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

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


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


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


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


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


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

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


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


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

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


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

> [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-22 21:58) [22]


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


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


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

> [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-23 00:03) [24]

> Inovet

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


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

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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2012.01.29;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.007 c
3-1270836090
AlexJ
2010-04-09 22:01
2012.01.29
Не видны изменения при модификации через Edit ... Post


2-1319248809
inspiring
2011-10-22 06:00
2012.01.29
В TreeView из TTable.


1-1283001637
alexjfx
2010-08-28 17:20
2012.01.29
многострочный listbox


2-1318932404
rammic
2011-10-18 14:06
2012.01.29
Как применить FindComponent на дочерних окнах


15-1318268712
Jeer
2011-10-10 21:45
2012.01.29
Вот я и стал тестем и приобрел второго сына.