Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BLOB в InterBase, загрузка .bmp файла 
:(
    Опции темы
RSV
Дата 27.8.2005, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 27.6.2005

Репутация: нет
Всего: нет



Как в С++ программе загрузить в IB (BLOB поле) картинку?
Не могу разобраться с какими именно классами необходимо работать.
Если можно по подробнее. Заранее спасибо.
PM MAIL   Вверх
Coocky
Дата 29.8.2005, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62



Да никак...
Тебе просто нужно сделать это поле текстовым, а в нем ххранить путь к картинке.
Ну а дальше, работай либо с запуском программы, для отображения картинки, либо с загрузкой картинки....


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
chaos
Дата 29.8.2005, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 2
Всего: 44



почему ни как?
Создаешь таблицу как нибудь так
Код

CREATE TABLE NEW_TABLE(
    "Image" BLOB SUB_TYPE 0 SEGMENT SIZE 80,
    "Name" VARCHAR(20))


и потом работаешь с этой таблици из С++ или через CByteArray(VC) или вот однажды занимался этим на CBuilder'e
http://forum.vingrad.ru/index.php?act=ST&f...=56048&unread=1
PM WWW   Вверх
chaos
Дата 29.8.2005, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 2
Всего: 44



или юзай соответствующие API
PM WWW   Вверх
Coocky
Дата 29.8.2005, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 2
Всего: 62



А....
Я не правильно прочитал, я подумал не В а ИЗ smile
Ты напиши с чем ты работаешь-- консольный С++, или библиотека GUI ?


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
RSV
Дата 2.9.2005, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 27.6.2005

Репутация: нет
Всего: нет



Цитата(Coocky @ 29.8.2005, 14:05)
А....
Я не правильно прочитал, я подумал не В а ИЗ smile
Ты напиши с чем ты работаешь-- консольный С++, или библиотека GUI ?

Я работаю в GUI.
PM MAIL   Вверх
chaos
Дата 2.9.2005, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 2
Всего: 44



будем постепенно вытягивать из тебя smile
какой гуи: VCL, MFC, QT или еще какой ?
Добавлено @ 08:59
или хотя бы скажи какой IDE пользуешься: MS Visual C++, Borland C Builder... ????

Это сообщение отредактировал(а) chaos - 2.9.2005, 08:54
PM WWW   Вверх
RSV
Дата 2.9.2005, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 27.6.2005

Репутация: нет
Всего: нет



Хорошо я все понял был не прав. Пишу клиенское приложение для работы
с IBase. Использую MS VC++7.0. Соответственно пользуюсь MFC(ёй).
Не могу понять как при помощи MFC либо API правильно поместить
изображение в BLOB поле БД IBase? Как затем просмотреть из базы
это изображение, как при необходимости отправить это изображение
на печать? Как проверить пустое BLOB поле или нет?
Заранее благодарен. Серега.
PM MAIL   Вверх
RSV
Дата 2.9.2005, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 27.6.2005

Репутация: нет
Всего: нет



Цитата(chaos @ 2.9.2005, 08:52)
будем постепенно вытягивать из тебя smile
какой гуи: VCL, MFC, QT или еще какой ?
Добавлено @ 08:59
или хотя бы скажи какой IDE пользуешься: MS Visual C++, Borland C Builder... ????

Хорошо я все понял был не прав. Пишу клиенское приложение для работы
с IBase. Использую MS VC++7.0. Соответственно пользуюсь MFC(ёй).
Не могу понять как при помощи MFC либо API правильно поместить
изображение в BLOB поле БД IBase? Как затем просмотреть из базы
это изображение, как при необходимости отправить это изображение
на печать? Как проверить пустое BLOB поле или нет?
Заранее благодарен. Серега.
PM MAIL   Вверх
chaos
Дата 3.9.2005, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 2
Всего: 44



вот тебе пока пример записи в блоб, прада без всяких обработок ошибок.
Код

CDatabase oDB;
bool fSuccess = true;

try
{
    oDB.Open("testblob");
}
catch (CDBException *x)
{
    cerr << x->m_strError << endl;
    fSuccess = false;
}

if (! fSuccess)
    return 0;
        
BYTE *Buf = NULL;
DWORD dwSize;

CStdioFile oFileImg;
oFileImg.Open("c:\\testblob.bmp", CFile::typeBinary | CFile::modeRead);
dwSize = oFileImg.GetLength();
Buf = new BYTE[dwSize];
oFileImg.Read(Buf, dwSize);

SQLHSTMT hStmt = NULL;
char soSql[] = "INSERT INTO NEW_TABLE (img) VALUES (?)";

short nSuccess;
nSuccess = ::SQLAllocStmt(oDB.m_hdbc, &hStmt);
nSuccess = ::SQLPrepare(hStmt, (SQLCHAR*)soSql, SQL_NTS);
nSuccess = ::SQLBindParameter(hStmt, 1, SQL_PARAM_INPUT, SQL_C_BINARY,
                        SQL_LONGVARBINARY, 0, 0, Buf, 0, (long *)&dwSize);

nSuccess = ::SQLExecute(hStmt);
    
SQLFreeStmt(hStmt,SQL_DROP);
oDB.Close();
delete[] Buf;


PM WWW   Вверх
chaos
Дата 3.9.2005, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 2
Всего: 44



а вот тебе еще и для чтения пример(также без проверок на ошибки и тп
)

Код

//...
BYTE *Buf = NULL;
DWORD dwSize;

CStdioFile oFileImg;

CRecordset rs;
rs.m_pDatabase = &oDB;
CDBVariant var;
    
char sql[] = "SELECT img FROM NEW_TABLE WHERE NUM = 1";

rs.Open(CRecordset::forwardOnly, sql, CRecordset::readOnly);

rs.GetFieldValue((short)0, var);
dwSize = var.m_pbinary->m_dwDataLength;

Buf = (BYTE*) GlobalLock(var.m_pbinary->m_hData);
        
BYTE *Buf2 = new BYTE[dwSize];
memcpy(Buf2, Buf, dwSize);
GlobalUnlock(var.m_pbinary->m_hData);

oFileImg.Open("c:\\blob.bmp", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
oFileImg.Write(Buf2, dwSize);

delete[] Buf2;
//...

Добавлено @ 10:06
PS все проверенно и работает smile
PM WWW   Вверх
RSV
Дата 4.9.2005, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 27.6.2005

Репутация: нет
Всего: нет



Цитата(chaos @ 3.9.2005, 10:04)
а вот тебе еще и для чтения пример(также без проверок на ошибки и тп
)

Код

//...
BYTE *Buf = NULL;
DWORD dwSize;

CStdioFile oFileImg;

CRecordset rs;
rs.m_pDatabase = &oDB;
CDBVariant var;
    
char sql[] = "SELECT img FROM NEW_TABLE WHERE NUM = 1";

rs.Open(CRecordset::forwardOnly, sql, CRecordset::readOnly);

rs.GetFieldValue((short)0, var);
dwSize = var.m_pbinary->m_dwDataLength;

Buf = (BYTE*) GlobalLock(var.m_pbinary->m_hData);
        
BYTE *Buf2 = new BYTE[dwSize];
memcpy(Buf2, Buf, dwSize);
GlobalUnlock(var.m_pbinary->m_hData);

oFileImg.Open("c:\\blob.bmp", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
oFileImg.Write(Buf2, dwSize);

delete[] Buf2;
//...

Добавлено @ 10:06
PS все проверенно и работает smile

Огромное спасибо!!!!

PM MAIL   Вверх
chaos
Дата 5.9.2005, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 2
Всего: 44



ПРЕДЛАГАЮ МОДЕРАТОРАМ
добавить в фак работу с блобами


PM WWW   Вверх
RSV
Дата 5.9.2005, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 27.6.2005

Репутация: нет
Всего: нет



Цитата(chaos @ 5.9.2005, 08:43)
ПРЕДЛАГАЮ МОДЕРАТОРАМ
добавить в фак работу с блобами

Сохраненная фотография в .bmp занимает слишком много места около 2.3 Mb
как с этим бороться? Если вариант загрузки в BLOB файла .jpg?
Или способ сжатия .bmp.
С уважением Серега.
PM MAIL   Вверх
chaos
Дата 6.9.2005, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 2
Всего: 44



Цитата(RSV @ 5.9.2005, 22:29)
Сохраненная фотография в .bmp занимает слишком много места около 2.3 Mb
как с этим бороться? Если вариант загрузки в BLOB файла .jpg?
Или способ сжатия .bmp.
С уважением Серега.

а какая нафиг(извеняюсь smile ) разница, можно запихивать хоть бмп, хоть джипег, хоть фильм - это по барабану!!!!
BLOB - длинный битовый объект
читай свой джипег и сохраняй в базе, все тоже самое

Это сообщение отредактировал(а) chaos - 6.9.2005, 06:23
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.