Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
4 / 4 / 0
Регистрация: 16.08.2011
Сообщений: 182
1
Interbase

Сохранение изображения в БД Firebird

27.09.2016, 17:27. Показов 2376. Ответов 3
Метки нет (Все метки)

Здравствуйте! Поле в БД Firebird - FOTO_SOTR, тип этого поля BLOB, подтип -1. Вопрос - как мне сохранить изображение BMP или другого формата в БД Firebird?
Сохранить пытаюсь вот таким образом
AdresDataSet.FieldByName('FOTO_SOTR').? :=Image1.Canvas;
Изображение беру из компонента Image1.
Что должно быть написано после точки?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2016, 17:27
Ответы с готовыми решениями:

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

FireBird + Interbase&Firebird Development Studio
Установил FireBird 2.5 SuperClassic и Interbase&Firebird Development Studio. Зашел в студию,...

Сохранение форматированного текста в FireBird
Здравствуйте! Не подскажете как сохранить форматированный текст в базе данных вместе с рисунками....

Сохранение картинки в базу Firebird
риветствую. Пытаюсь сохранить картинку в базу в поле blob, но вылетает ошибка: "Access violation at...

3
5081 / 3962 / 1308
Регистрация: 14.04.2014
Сообщений: 18,238
Записей в блоге: 18
28.09.2016, 11:00 2
100500 строк кода по запросу Delphi blob поля
например вот
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Вставка файла в поле базы данных
Код:
 
if OpenDialog1.Execute then
begin
ADOQuery1.Insert;
tblobfield(form1.ADOQuery1.FieldByName('MyBlob')).LoadFromFile(OpenDialog1.FileName);
ADOQuery1.Post;
end;
Чтение файла из Базы Данных
Код:
 
var
ptkwrd:Tmemorystream;
begin
ptkwrd:= Tmemorystream.Create;
tblobfield(form1.ADOQuery1.FieldByName('MyBlob')).SaveToStream(ptkwrd);
ptkwrd.Position:=0;
ptkwrd.SaveToFile('temp.doc');
shellexecute(Handle, 'open','temp.dwg',nil,nil,SW_SHOWNORMAL);
ptkwrd.Free;



только с чего бы Image.Canvas???
канвас - это набор настроек передающихся ОС для отрисовки того или иного примитива, завернутого в метод
но никак не файл данных
в Image1 откуда изображение попадает??

http://docwiki.embarcadero.com... TBlobField
сделайте нормальные поля в Field Editor и пользуйтесь
AdresDataSetFOTO_SOTR.

Добавлено через 14 часов 18 минут
Разъясняю по просьбе трудящихся

Про поля.
Если вы создаете поля в Field Editor, то создаются объекты на форме - поля того типа, который нужен
TIntegerField, TFloatField, TStringField, и, в данном случае, TBlobField
и обращаться к ним просто. Это обычные компоненты. Пример
AdresDataSetFOTO_SOTR.LoadFromFile(stream)
а если пользоваться FieldByName, вы получаете тип TField - общего предка для всех этих типов. Есс-но у него может не быть нужных методов.

по поводу Canvas. Все рисование в Windows идет через небольшой набор примитивов
Line, Rectangle, Ellipse, BitBlt и немного других.
Перед рисованием каждого примитива мы должны настроить т.н. перо (Pen) и кисть (Brush) а так же шрифт (Fone) и эти настройки хранятся в некоем объекте, называемом контекст. Delphi имеет класс TCanvas, который работает как хранилище для контекста windows и для каждого метода windows у него есть т.н. обертка - соответствующий метод. Внутри он просто вызывает метод windows и все.
Поэтому сохранять набор настроек инструментов рисования в поле бессмысленно. Ну, я так думаю...

Данные TImage в соответствии с документацией хранятся в TImage.Picture.Graphic при этом Graphic - это универсальный объект. Он может быть TBitmap TIcon TMetafile. Можно обращаться прямо TImage.Picture.Bitmap например. Если там действительно битмап.

И уже этот битмап можно сохранить в поле
Delphi
1
2
3
4
5
6
7
stream:=TMemoryStream.Create;
bitmap:=Image1.Picture.Bitmap;
bitmap.saveToStream(stream);
AdresData.Edit;
AdresDataSetFOTO_SOTR.LoadFromStream(stream);
AdresData.Post;
stream.free;
код я не проверял. возможно нужны какие-то исправления

надеюсь, так понятнее коллегам, которые могли бы дописывать эту повесть и сами...
0
0 / 0 / 1
Регистрация: 24.04.2015
Сообщений: 4
28.09.2016, 13:19 3
Лучший ответ Сообщение было отмечено Алексей_Т как решение

Решение

Можно проще:
Delphi
1
2
3
AdresDataSet.Edit;
TBlobField(AdresDataSet.FieldByName('FOTO_SOTR')).Assign(Image1.Picture.Bitmap);
AdresDataSet.Post;
Очистить:
Delphi
1
2
3
AdresDataSet.Edit;
TBlobField(AdresDataSet.FieldByName('FOTO_SOTR')).Clear;
AdresDataSet.Post;
0
4 / 4 / 0
Регистрация: 16.08.2011
Сообщений: 182
05.10.2016, 16:03  [ТС] 4
Огромное спасибо! Всё получилось!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2016, 16:03

Firebird DBImage - вывод изображения в LazReport
Если делать по мурзилке http://wiki.freepascal.org/LazReport_Tutorial Now we have to tell the...

Сохранение изображения
Вообщем вот весь код. Проблема заключается в чем: я отправляю на vk.com запрос о поиске людей,...

Сохранение изображения
Почему, когда я пытаюсь сохранить изображение из буфера обменаDim img As New...

Сохранение изображения
возможно ли изображение сформированное DirecX распечатать или сохранить в файл? не делая снимок с...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru