Russian Qt Forum

Qt => Базы данных => Тема начата: TukiNov от Сентябрь 10, 2006, 15:32



Название: QT3.3.6 Вставка картинок в MySQL
Отправлено: TukiNov от Сентябрь 10, 2006, 15:32
Суть проблемы такова. Необходимо загружать файлы в базу данных, а именно картинки, Создал поле blob.
Я так понимаю мне нада использовать QByteArray, но я ни как не могу понять как превести картинку к такому виду :
Код:

static const unsigned char image_6_data[] = {
    0x00,0x00,0x07,0x90,0x78,0x9c,0xbd,0xd3,0x5b,0x4c,0x93,0x77,0x18,0x06,
    0xf0,0xda,0x2d,0xbd,0x36,0x5e,0xec,0x00,0xa8,0xe0,0x89,0x7a,0x08,0x2a,
    ....
};

Я так понимаю если привести картинку к такому виду то, её можно будет без проблем сохранить в blob обычным sql запросом. Или я ошибаюсь ?
Помогите плиз :) Желательно подробно :)
Читал это : http://www.qtcentre.org/forum/f-qt-programming-2/t-save-images-to-database-2083.html
и это : http://www.qtcentre.org/forum/f-qt-programming-2/t-insert-an-qimage-or-an-qpixmap-into-a-mysql-database-and-then-get-it-back-3251.html
но в первом для QT4 а как во втором не получилось :(


Название: QT3.3.6 Вставка картинок в MySQL
Отправлено: Sergeich от Сентябрь 10, 2006, 21:58
Код:
QByteArray ba;
QBuffer buf( ba );
buf.open( IO_WriteOnly );
yourImage.save( &buf, "XPM" );
buf.close();

QSqlQuery query;
query.prepare( "ISERT INTO aTable (id, image) VALUES ( :id, :image )" );
query.bindValue( ":id", imageId );
query.bindValue( ":image", ba );
query.exec();


Название: QT3.3.6 Вставка картинок в MySQL
Отправлено: Admin от Сентябрь 10, 2006, 22:02
и еще простой SQL бы тут не прокатил
надо было бы из 8 бит переводить в 7 бит


Название: QT3.3.6 Вставка картинок в MySQL
Отправлено: Sergeich от Сентябрь 10, 2006, 23:05
Цитата: "Admin"
и еще простой SQL бы тут не прокатил
надо было бы из 8 бит переводить в 7 бит
А это зачем?


Название: QT3.3.6 Вставка картинок в MySQL
Отправлено: TukiNov от Сентябрь 11, 2006, 00:33
х.м. кажется в базу она поместилась.
а вот считать её от туда что то не очень получается. делаю вот так :
Код:

void Form1::init()
{
QSqlQuery query;
query.exec("SELECT image from tmp");
 while (query.next()){
     QPixmap pixmap( query.value( 0 ).toPixmap() );
     image->setPixmap( pixmap );
 }
 if(!query.isActive()){query.lastError().showMessage();}
}

ошибок в query нет.


Название: QT3.3.6 Вставка картинок в MySQL
Отправлено: Admin от Сентябрь 11, 2006, 08:16
Цитата: "Sergeich"
Цитата: "Admin"
и еще простой SQL бы тут не прокатил
надо было бы из 8 бит переводить в 7 бит
А это зачем?


ну к примеру, ты задумайся

INSERT INTO TABLE (......данные....)

среди данных могут встетится кавычки - значит эх надо экранировать
к тому же есть непечатные символы и символы после 128

поэтому то и ввели операцию bind


Название: QT3.3.6 Вставка картинок в MySQL
Отправлено: TukiNov от Сентябрь 11, 2006, 12:29
Цитата: "Admin"
Цитата: "Sergeich"
Цитата: "Admin"
и еще простой SQL бы тут не прокатил
надо было бы из 8 бит переводить в 7 бит
А это зачем?


ну к примеру, ты задумайся

INSERT INTO TABLE (......данные....)

среди данных могут встетится кавычки - значит эх надо экранировать
к тому же есть непечатные символы и символы после 128

поэтому то и ввели операцию bind

Картинка вставляется в базу нормально, проверял через mysqlcc, при клике на поле она показывается. Вот только вытащить её пока не получается :(

добавлено спустя 1 час 16 минут:

 сорри, тупил
сделал.
Воть :
Код:

void Form1::init()
{
QByteArray ba;
QSqlQuery query;
query.exec("SELECT image from tmp where id = '1'");
while (query.next()){
     ba = query.value( 0 ).toByteArray();
     QPixmap pixmap(ba);
     image->setPixmap( pixmap );
}
 if(!query.isActive()){query.lastError().showMessage();}
}