Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как сохранить в базу и восстановить объекты типа CImage, CBitmap  (Прочитано 16377 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Boriska
Помогающий

ua
Offline Offline

« : 03-02-2016 07:23 » 

Привет народ.

Подскажите как сохранить в базу и восстановить объекты типа CImage, CBitmap. Нашел только
функцию член класса CImage

Код: (C++)
HRESULT Save(   IStream* pStream,   REFGUID guidFileType) const throw();
HRESULT Save(   LPCTSTR pszFileName,   REFGUID guidFileType= GUID_NULL) const throw();

но это в файл. Точнее в поток. А как переделать под базу ума не приложу, а рядом никто не знает.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 03-02-2016 12:04 » 

Что значит "базу"? БД?

Можно как массив байтов, такой способ я использую для сохранения картинок в XML.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Boriska
Помогающий

ua
Offline Offline

« Ответ #2 : 03-02-2016 13:03 » 

Погодие вот нашел здесь на форуме
"BLOB из MFC в базу данных (ODBC)" https://forum.shelek.ru/index.php/topic,6103.0.html
почитаю. Подразберусь, а то зелен как огурец.

Добавлено через 15 часов, 56 минут и 16 секунд:
По ссылке выше есть такой код
Код: (C++)
//текст запроса
                        sql="UPDATE objects SET picture=? WHERE nomer=5";
                        //выделяем память под стейтмент
                        retcode=SQLAllocStmt(m_base.m_hdbc,&hstmt);
                        checkRetCode;
                        //подготовка стейтмента для выполнения запроса
                        retcode=SQLPrepare(hstmt,(BYTE*)sql.GetBuffer(sql.GetLength()),SQL_NTS);
                        checkRetCode;
                        //прикрепляем данные к маркеру
                        retcode=SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT,
                                        SQL_C_BINARY,SQL_LONGVARBINARY,
                                        0,0, bufer, 0, (long*)&dwdLen);
Я так понимаю это есть работа с параметрическими запросом.(ни разу не работал). И полагаю без него мне с моей задачей не обойтись. Но вроде в mfc такого нет, подскажите пожалуйста где взять и как прикрутить.
« Последнее редактирование: 04-02-2016 04:59 от lkote » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 04-02-2016 06:51 » 

Boriska, у тебя какая СУБД используется ?
Записан

Boriska
Помогающий

ua
Offline Offline

« Ответ #4 : 04-02-2016 07:19 » 

mysql
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 04-02-2016 14:46 » 

Boriska, у мускуля свой интерфейс, смотри функции

я из Qt работаю с ним, но по аналогии это должны быть функции
http://dev.mysql.com/doc/refman/5.7/en/mysql-stmt-prepare.html
http://dev.mysql.com/doc/refman/5.7/en/mysql-stmt-bind-param.html
http://dev.mysql.com/doc/refman/5.7/en/mysql-stmt-execute.html
Записан

Boriska
Помогающий

ua
Offline Offline

« Ответ #6 : 04-02-2016 19:50 » 

А что надо студии дать чтоб она их кушала ?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 05-02-2016 05:02 » 

Boriska, для начала установить MySQL, скачавши с официального сайта

http://dev.mysql.com/downloads/windows/

MySQL Installer - это сама служба и исходники
MySQL Workbench - достаточно удобная оболочка для администрирования

затем поискать в сети, как работать со службой mysql через libmysql.dll . К примеру,  вот что-то есть
http://rusdir.blogspot.ru/2011/03/mysql-c.html

Детали я не помню, но указанных ссылок должно быть достаточно для того, чтобы разобраться ))

Не исключено, что кем-то написаны классы, инкапсулирующие рассыпуху API mysql . Поищи в сети
« Последнее редактирование: 05-02-2016 05:04 от Алексей++ » Записан

Boriska
Помогающий

ua
Offline Offline

« Ответ #8 : 05-02-2016 07:08 » 

База стоит. Я с ней работаю. Но всегда работал через ODBC. Просто стала задача
писать туда BLOB. Ну теперь придется разобраться как работать через их dllку.
Было удобно через ODBC со всеми работать одинаково. А тут под конкретную
базу. А неужели нельзя через ODBC BLOB?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 05-02-2016 09:51 » 

http://dev.mysql.com/doc/refman/5.7/en/blob.html
Цитата
MySQL Connector/ODBC defines BLOB values as LONGVARBINARY and TEXT values as LONGVARCHAR.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #10 : 05-02-2016 10:27 » 

Я не знаю как с mysql, никогда не занимался, но можно попробовать, если в инсталляции присутствует библиотека типов, сделать всё просто через OLE DB.

Вот так (просто), например, это делается для работы с файлами Excel

1. Добавляем к проекту класс

2. Выбираем источник

3. Выбираем нужные классы (или все)


Всё. После этого Студия автоматом создаёт классы-обёртки, с которыми и работаем.

зы Проблема с прицепами в сообщении, пэтому сопровождающие картинки будут как только заработает

* ss1.png (10.17 Кб - загружено 1152 раз.)
* ss2.png (22.63 Кб - загружено 1188 раз.)
* ss3.png (31.91 Кб - загружено 1251 раз.)
« Последнее редактирование: 05-02-2016 13:49 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Boriska
Помогающий

ua
Offline Offline

« Ответ #11 : 05-02-2016 10:35 » 

В установленой папке от mysql только папка bin. Там только dll, exe....

Пробую чере dll. Подключил хидер #include "mysql\mysql.h" IntelliSense подсветил функции нормально.
А вот куда подложить libmySQL.dll ?
Код: (C++)
Error   6       error LNK2019: unresolved external symbol _mysql_init@4 referenced in function "protected: void __thiscall CBitmapViewer::OnBnClickedChoseBmpBtn(void)" (?OnBnClickedChoseBmpBtn@CBitmapViewer@@IAEXXZ)

А если добавляю в Additional Dependencies
то ругается так C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin\libmySQL.dll : fatal error LNK1107: invalid or corrupt file: cannot read at 0x2A0
« Последнее редактирование: 05-02-2016 10:42 от Boriska » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 05-02-2016 12:39 » 

Boriska, я ж ссылку скидывал - там рядом пример есть
http://rusdir.blogspot.ru/2011/03/mysql.html

чтобы линковщик нашёл функции, укажи либу

Цитата
#pragma comment(lib, "libmysql.lib") // подключаем библиотеку

и в проект саму *.lib в этом случае тоже нужно добавить, а то студия не увидит.

саму dll нужно класть возле твоего экзешника - там первым делом будет производится поиск
Записан

Boriska
Помогающий

ua
Offline Offline

« Ответ #13 : 05-02-2016 13:49 » 

Осталось дело за малым. Где нарыть libmySQL.lib Попробовал сделать ее из dll. Выдрал из dll при помощи depends.exe список функций. Озаглавил при помощи EXPORTS, пропустил через C:\Program Files (x86)\Microsoft Visual Studio 12.0>lib /def:c:\libmySQL.def /out:c:\libmySQL.lib Не получилось.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #14 : 05-02-2016 16:20 » 

Джон, я сомневаюсь, что в студии будет такой класс для mysql встроен )) А посмотреть мне негде

Boriska, в папке, где установлена mysql, должны быть исходники - там ищи и dll и либу.  Если не ищутся - просто качай последний дистр mysql с офсайта и ставь

Скажем, у меня файлы нашлись тут
"C:\Program Files\MySQL\MySQL Server 5.6\lib\libmysql.lib"
"C:\Program Files\MySQL\MySQL Server 5.6\lib\libmysql.dll"


а у более старой версии тут
"C:\MySQL\MySQL Server 5.1\lib\opt\libmysql.lib"
"C:\MySQL\MySQL Server 5.1\lib\opt\libmysql.dll"

видимо, куда указали при установке
« Последнее редактирование: 05-02-2016 16:26 от Алексей++ » Записан

Boriska
Помогающий

ua
Offline Offline

« Ответ #15 : 06-02-2016 13:28 » 

Цитата
В установленой папке от mysql только папка bin. Там только dll, exe...
А еще один сервер ставить смысл ? Не, я попробую на другой машине эту же версию
поставить, может при инсталяции там спрашивается (скидывать исходники или нет,
но на моей машине их нет). Зашел на еще одну - там mysql 5.1. У меня 5.0 - беру, думаю
не сильно отличаются.

А по поводу lib from dll, есть положительный опыт ?
« Последнее редактирование: 06-02-2016 13:30 от Boriska » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #16 : 06-02-2016 23:24 » new

Джон, я сомневаюсь, что в студии будет такой класс для mysql встроен ))

Лёш, ты не понял. В Студии НЕТ таких встроенных классов. Она создаёт классы-обёртки из бибилиотеки типов. Когда-то очень давно таким образом встраивал Flash.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines