Boriska
Помогающий
Offline
|
|
« : 03-02-2016 07:23 » |
|
Привет народ. Подскажите как сохранить в базу и восстановить объекты типа CImage, CBitmap. Нашел только функцию член класса CImage HRESULT Save( IStream* pStream, REFGUID guidFileType) const throw(); HRESULT Save( LPCTSTR pszFileName, REFGUID guidFileType= GUID_NULL) const throw(); но это в файл. Точнее в поток. А как переделать под базу ума не приложу, а рядом никто не знает.
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
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
Помогающий
Offline
|
|
« Ответ #2 : 03-02-2016 13:03 » |
|
Погодие вот нашел здесь на форуме "BLOB из MFC в базу данных (ODBC)" https://forum.shelek.ru/index.php/topic,6103.0.htmlпочитаю. Подразберусь, а то зелен как огурец. Добавлено через 15 часов, 56 минут и 16 секунд:По ссылке выше есть такой код //текст запроса 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 »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #3 : 04-02-2016 06:51 » |
|
Boriska, у тебя какая СУБД используется ?
|
|
|
Записан
|
|
|
|
Boriska
Помогающий
Offline
|
|
« Ответ #4 : 04-02-2016 07:19 » |
|
mysql
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #5 : 04-02-2016 14:46 » |
|
|
|
|
Записан
|
|
|
|
Boriska
Помогающий
Offline
|
|
« Ответ #6 : 04-02-2016 19:50 » |
|
А что надо студии дать чтоб она их кушала ?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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
Помогающий
Offline
|
|
« Ответ #8 : 05-02-2016 07:08 » |
|
База стоит. Я с ней работаю. Но всегда работал через ODBC. Просто стала задача писать туда BLOB. Ну теперь придется разобраться как работать через их dllку. Было удобно через ODBC со всеми работать одинаково. А тут под конкретную базу. А неужели нельзя через ODBC BLOB?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #9 : 05-02-2016 09:51 » |
|
http://dev.mysql.com/doc/refman/5.7/en/blob.htmlMySQL Connector/ODBC defines BLOB values as LONGVARBINARY and TEXT values as LONGVARCHAR.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #10 : 05-02-2016 10:27 » |
|
Я не знаю как с mysql, никогда не занимался, но можно попробовать, если в инсталляции присутствует библиотека типов, сделать всё просто через OLE DB. Вот так (просто), например, это делается для работы с файлами Excel 1. Добавляем к проекту класс 2. Выбираем источник 3. Выбираем нужные классы (или все) Всё. После этого Студия автоматом создаёт классы-обёртки, с которыми и работаем. зы Проблема с прицепами в сообщении, пэтому сопровождающие картинки будут как только заработает
|
ss1.png (10.17 Кб - загружено 1237 раз.)
ss2.png (22.63 Кб - загружено 1268 раз.)
ss3.png (31.91 Кб - загружено 1324 раз.)
|
« Последнее редактирование: 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
Помогающий
Offline
|
|
« Ответ #11 : 05-02-2016 10:35 » |
|
В установленой папке от mysql только папка bin. Там только dll, exe.... Пробую чере dll. Подключил хидер #include "mysql\mysql.h" IntelliSense подсветил функции нормально. А вот куда подложить libmySQL.dll ? 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 »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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
Помогающий
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 Не получилось.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
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
Помогающий
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 »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #16 : 06-02-2016 23:24 » |
|
Джон, я сомневаюсь, что в студии будет такой класс для 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."
|
|
|
|