Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/34: Рейтинг темы: голосов - 34, средняя оценка - 4.62
 Аватар для GR3YVAC
2 / 2 / 3
Регистрация: 28.03.2016
Сообщений: 45
Interbase

Загрузка картинки в Jpeg - затем из буфера в DBImage

05.08.2016, 23:46. Показов 12654. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Подскажите, пожалуйста... Перекопал очень много источников, не нашел в чем причина:
Необходимо записать картинку в базу в поле BLOB.
Нашел следующий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <jpeg.hpp>
#include <Clipbrd.hpp>
...............................................
 
void __fastcall TForm2::BitBtn2Click(TObject *Sender)
{
if (OpenPictureDialog1->Execute())
{
   Image1->Picture->LoadFromFile(OpenPictureDialog1->Name);
}
   Clipboard()->Assign(Image1->Picture); //запись в буфер
   //Image1->Picture->Assign(Clipboard()); //запись из буфера
   DBImage1->PasteFromClipboard();
 
}
но при нажатии на эту кнопку - пишет ошибку:
C++
1
unknown picture file extension(.)
такая же ошибка при выборе .bmp файла.

Код кнопки добавления в бд:
C++
1
2
3
4
5
DM->IBDataSet1->Open();
 
DM->IBDataSet1->Append();
DM->IBDataSet1->FieldByName("P_PHOTO")->Value = DBImage1->Picture;
DM->IBDataSet1->Post();
Спасибо.

Добавлено через 14 часов 15 минут
Все еще актуально, подскажите, пожалуйста.
Спасибо.

Добавлено через 14 часов 12 минут
Использую RAD STUDIO XE4
может это чем-то поможет?((
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.08.2016, 23:46
Ответы с готовыми решениями:

Отобразить JPEG из буфера
Если из файла, то получается так: pic := TbitMap.Сreate; jpg := TJpegImage.Create; jpg.LoadFromFile ('pic.jpg'); ...

Сохранение картинки в DBImage
Есть DBGrid с полями (фамилия,Имя,Фото-поле типа OLE) есть DBImage для отображения фото есть код загрузки картинки через кнопку картинку...

Загрузка фотографий в DBImage
Привет! Помогите пожалуйста с проблемой. У меня есть главная таблица &quot;Человек&quot;(ФИО, адрес и т.д). Подчиненная таблица называется ...

12
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
06.08.2016, 00:02
GR3YVAC, для BLOB нужно использовать стримы, посмотрите по форуму, я тут писал примеры для более древнего билдера, сдается мне, что с того времени ничего не поменялось...
1
 Аватар для GR3YVAC
2 / 2 / 3
Регистрация: 28.03.2016
Сообщений: 45
06.08.2016, 00:14  [ТС]
Lord_Voodoo, Спасибо, сейчас попробую!
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
06.08.2016, 00:46
https://www.cyberforum.ru/cpp-... post508169
1
 Аватар для GR3YVAC
2 / 2 / 3
Регистрация: 28.03.2016
Сообщений: 45
06.08.2016, 00:54  [ТС]
Lord_Voodoo, Спасибо огромное!!!
Как сделаю, обязательно отпишусь
P.S. при поиске по форуму эту тему не нашло...((
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
06.08.2016, 00:55
GR3YVAC, надо было использовать расширенный... так вы пишите в любом случае, вдруг смогу подкорректировать и заработает...
1
 Аватар для GR3YVAC
2 / 2 / 3
Регистрация: 28.03.2016
Сообщений: 45
06.08.2016, 00:59  [ТС]
Lord_Voodoo, Спасибо.
Тогда сразу вопрос: это писать в обработчике кнопки "загрузить изображение" или на кнопке "добавить в базу"?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
06.08.2016, 01:04
GR3YVAC, ну вам решать, по идее - это нужно вешать на обработчик клика той кнопки, которая будет грузить изображение в БД, но тогда вам надо использовать не BDImage, а обычный Image
1
 Аватар для GR3YVAC
2 / 2 / 3
Регистрация: 28.03.2016
Сообщений: 45
06.08.2016, 01:44  [ТС]
Лучший ответ Сообщение было отмечено Lord_Voodoo как решение

Решение

Lord_Voodoo,
Вот повесил на "загрузить изображение"
C++
1
2
3
4
if (OpenPictureDialog1->Execute())
{
    Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
}
а это на "добавить в бд"
C++
1
2
3
4
TMemoryStream* strm = new TMemoryStream();
Image1->Picture->Bitmap->SaveToStream(strm);
((TGraphicField*)DM->IBDataSet1->FieldByName("P_PHOTO"))->LoadFromStream(strm);
delete strm;
про просмотре в DBImage ничего нет. В хотя.... 1 мин.....

Добавлено через 11 минут
не, не получается.
Опишу работу программки:
Есть форма добавления карточки (form1), форма редактирования карточки (form2) и форма с dbgrid`om (form3)
при добавлении картинки на form1 все происходит нормально(без ошибок). Дальше я иду и кликаю двойным щелчкем на dbgrid -> открывается форма редактирования(form2).
на OnShow form2 ставлю:
C++
1
2
3
4
5
6
7
8
Edit1->Text = DM->IBDataSet1->FieldByName("P_FAMILIJA")->AsString;
Edit2->Text = DM->IBDataSet1->FieldByName("P_NAME")->AsString;
 
TMemoryStream* strm = new TMemoryStream;
((TGraphicField*)DM->IBDataSet1->FieldByName("P_PHOTO"))->SaveToStream(strm);
strm->Seek(0,0);
Image1->Picture->Bitmap->LoadFromStream(strm);
delete strm;
получается добавление происходит так:
кнопка "загрузить изображение":
C++
1
2
3
4
if (OpenPictureDialog1->Execute())
{
    Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
}
и кнопка "добавить в БД"

C++
1
2
3
4
5
6
7
8
9
10
DM->IBDataSet1->Open();
 
DM->IBDataSet1->Insert();
DM->IBDataSet1->FieldByName("P_FAMILIJA")->AsString = Edit1->Text;
DM->IBDataSet1->FieldByName("P_NAME")->AsString = Edit2->Text;
TMemoryStream* strm = new TMemoryStream();
Image1->Picture->Bitmap->SaveToStream(strm);
((TGraphicField*)DM->IBDataSet1->FieldByName("P_PHOTO"))->LoadFromStream(strm);
       delete strm;
DM->IBDataSet1->Post();
Добавлено через 12 минут
Решил! Все заработало!
Спасибо еще раз: Lord_Voodoo за оказанную помощь!!!
Все-таки сейчас пока отложу вникание в стримы. Но позже обязательно этим займусь.

Сделал через буфер с Image в DBImage.
код:
C++
1
2
3
4
5
6
7
8
// предварительно настроив DBImage на DataSourse и DataField
if (OpenPictureDialog1->Execute())
{
    Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
}
Clipboard()->Assign(Image1->Picture);
Image1->Picture->Assign(Clipboard()); //запись из буфера
DBImage1->PasteFromClipboard();
________________________________________ ___________________________________
Вся причина не работающего кода при создании темы, оказалась в невнимательности....
Вместо:
C++
1
Image1->Picture->LoadFromFile(OpenPictureDialog1->Name);
Надо писать:
C++
1
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);
И все работает!
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
06.08.2016, 01:48
GR3YVAC, а вы поменяли компонент с TDBImage на TImage, картинка вообще загружается? попробуйте для теста при загрузке картинки из базы сохранить ее в файл, что получится...

Добавлено через 1 минуту
ну значит версии растут, а ничего по сути не меняется... в общем, этот финт можете применять для любой БД, будет работать, я проверял на оракле, постгресе... даже всего и не вспомню...
1
 Аватар для GR3YVAC
2 / 2 / 3
Регистрация: 28.03.2016
Сообщений: 45
06.08.2016, 02:07  [ТС]
Я оставил Timage и TDBimage т.к. у меня получается картинка из TImage копируется в буфер и загружается в TDBImage.
А на "просмотреть карточку" просто TDBImage для отображения данных поля P_PHOTO ))
Все вроде бы корректно работает.
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
попробуйте для теста при загрузке картинки из базы сохранить ее в файл, что получится...
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
GR3YVAC, а вы поменяли компонент с TDBImage на TImage, картинка вообще загружается?
Попробую, но уже утром... и отпишу

Lord_Voodoo, спасибо за то, что отозвались на помощь. Мне очень приятно было с Вами побеседовать, спасибо!
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
06.08.2016, 07:54
GR3YVAC, да это все нужно было сделать до того, как у вас все получилось... а если все работает, то уже неактуально...
1
0 / 0 / 0
Регистрация: 04.10.2020
Сообщений: 1
16.10.2024, 18:23
Была ошибка 'Cannot open clipboard: Отказано в доступе'. Сделал так:

C++
1
2
3
4
5
6
7
 Clipboard()->Assign(Image1->Picture);
 Sleep(10);
 Image1->Picture->Assign(Clipboard());
 Sleep(10);
 DBImage1->PasteFromClipboard();
 Sleep(10);
 EmptyClipboard();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.10.2024, 18:23
Помогаю со студенческими работами здесь

Загрузка фото с DBImage
Доброго времени суток. Столкнулся с нерешаемой для моего скудоумия проблемой. Есть form2 где в dbgrib хранится инфа о сотрудниках. При...

Вывод вложения (картинки) в DBImage
Всем привет! Помогите решить проблему. Нужно вывести вложение (картинку) из базы данных Access в DBImage. Привязываю DBOmage к DataSource,...

Вывод картинки из dbimage в word
Друзья, такой вопрос как вывести картинку из dbimage в word. Я разобрался с тем как выводить данные из dbedit в word, с использованием...

Картинки из в DBImage. Переход по записям
Вся программа в архиве! После запуска программы и нажатия на &quot;Начать тест&quot;. Все вопросы считываются из БД. Проблема, в том, что при...

Ошибка при загрузке картинки в DBImage из БД
Не получается из БД Access загрузить картинку в компонент DBImage. Появляется ошибка &quot;Bitmap image is not valid&quot;. Также пробовал...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru