Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C/C++ Базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2015, 07:20   #1
swkion
 
Регистрация: 28.10.2015
Сообщений: 8
Вопрос Загрузка и просмотр изображения в Базу

Пишу на Qt, нужно загрузить(сохранить) изображение(jpg) в базе данных в MySQL.Загружаю в поле mediumblob.

Загружаю изображение в QImage:
Код:
...
    QByteArray *qByteArray = new QByteArray();
    QBuffer *qBuffer = new QBuffer(qByteArray, this);
    if(img.byteCount()!=0)
   {
      qBuffer->open(QIODevice::WriteOnly);
      img.save(qBuffer,"JPG");
      qBuffer->close();
    }
 
...
//загружаю изображение в базу,
    rielt->query->bindValue(":pl",qByteArray->constData());
...
Вывожу из базы загруженное изображение:
Код:
...
        QByteArray fromDB;
        fromDB=q.value(19).toByteArray();
        qDebug()<<fromDB;
        img.loadFromData(fromDB,"JPG");
        img.scaled(251,161,Qt::IgnoreAspectRatio,Qt::SmoothTransformation);
        ui->lblImg->setPixmap(QPixmap::fromImage(img));
        ui->lblImg->show();
...
При показе изображения(выводе) выдает ошибку:
Код:
...
"\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD"
QImage::scaled: Image is a null image
"\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD\xEF\xBF\xBD"
QImage::scaled: Image is a null image
...
Судя по всему изображение загружается не правильно
Форумчане подскажите что я делаю не так?

Во вложении запрос создания этой таблицы.
Вложения
Тип файла: txt create.txt (2.1 Кб, 134 просмотров)
swkion вне форума Ответить с цитированием
Старый 28.10.2015, 07:32   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Выгрузи из БЛОБ в файл. Открой файл - покажут из него просмотрщики картинку?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.10.2015, 08:11   #3
swkion
 
Регистрация: 28.10.2015
Сообщений: 8
Сообщение

Цитата:
Сообщение от Stilet Посмотреть сообщение
Выгрузи из БЛОБ в файл. Открой файл - покажут из него просмотрщики картинку?
Картинку не показывает пишет нет данных.
Значит ошибка где-то в коде которых грузит в базу. Вопрос открыт.

Гружу в базу(ошибок не выдает):
Код:
...
    QByteArray *qByteArray = new QByteArray();
    QBuffer *qBuffer = new QBuffer(qByteArray, this);
    if(img.byteCount()!=0)
    { 
      qBuffer->open(QIODevice::WriteOnly);
      img.save(qBuffer,"JPG");
      qBuffer->close();
    }
...

Последний раз редактировалось swkion; 28.10.2015 в 08:14.
swkion вне форума Ответить с цитированием
Старый 28.10.2015, 09:13   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от swkion Посмотреть сообщение
Значит ошибка где-то в коде которых грузит в базу.
Ошибка может быть в коде, который пишет в базу.

Последний раз редактировалось waleri; 28.10.2015 в 09:15.
waleri вне форума Ответить с цитированием
Старый 28.10.2015, 09:16   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Вопрос открыт.
Покажи код записи в БД.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.10.2015, 09:20   #6
swkion
 
Регистрация: 28.10.2015
Сообщений: 8
Сообщение

В самом первом посте первый код.
swkion вне форума Ответить с цитированием
Старый 28.10.2015, 09:40   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
В самом первом посте первый код.
Там только привязка данных к полю. А постинг с коммитом где?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.10.2015, 10:13   #8
swkion
 
Регистрация: 28.10.2015
Сообщений: 8
Сообщение

Все уже выложил, что еще нужно?

Загружаю jpg в QImage
QImage гружу в QByteArray
Привязываю QByteArray к полю и выполняю запрос.

вот код всей процедуры:
Код:
...
   //Гружу изображение в QByteArray
    QByteArray *qByteArray = new QByteArray();
    QBuffer *qBuffer = new QBuffer(qByteArray, this);
    if(img.byteCount()!=0)
    { // Заходит в этот блок
      qBuffer->open(QIODevice::WriteOnly);
      img.save(qBuffer,"JPG");//сохраняю изображение
      qBuffer->close();
    }
    //Запрос на добавление записи(хр.процедура)
    rielt->query=new QSqlQuery(rielt->db);
    rielt->query->prepare("call addre(:num,:re,:c,:p,:th,:empl,:cl,:org,:op,:dogv,:n,:city,:r,:adr,:room,:sqr,:fl,:flh,:hdate,:pl,:st,:sum,:clt)");
    rielt->query->bindValue(":num",ui->eNum->text().toInt());
    rielt->query->bindValue(":re",ui->cbEstate->currentText());
    rielt->query->bindValue(":c",ui->cbCountry->currentText());
    rielt->query->bindValue(":p",ui->cbPlan->currentText());
    rielt->query->bindValue(":th",ui->cbPostroy->currentText());
    rielt->query->bindValue(":empl",ui->cbEmpl->currentText());
    rielt->query->bindValue(":cl",ui->cbClient->currentText());
    rielt->query->bindValue(":org",ui->cbOrg->currentText());
    rielt->query->bindValue(":op",ui->cbOp->currentText());
    rielt->query->bindValue(":dogv",ui->deDateDog->text());
    rielt->query->bindValue(":n",ui->eName->text());
    rielt->query->bindValue(":city",ui->eCity->text());
    rielt->query->bindValue(":r",ui->eRaion->text());
    rielt->query->bindValue(":adr",ui->eAdr->text());
    rielt->query->bindValue(":room",ui->eRooms->text().toInt());
    rielt->query->bindValue(":sqr",ui->eSqr->text().toInt());
    rielt->query->bindValue(":fl",ui->eEtaj->text().toInt());
    rielt->query->bindValue(":flh",ui->eCountE->text().toInt());
    rielt->query->bindValue(":hdate",ui->deDateHouse->text());
    rielt->query->bindValue(":pl",qByteArray->constData());//QByteArray (mediumblob)
    rielt->query->bindValue(":st",ui->eStatus->text());
    rielt->query->bindValue(":sum",ui->teSummary->toPlainText());
    if(ui->bComplite->isChecked())
    {
        rielt->query->bindValue(":clt",1);
    }
    else
    {
        rielt->query->bindValue(":clt",0);
    }
//выполняю запрос
    rielt->query->exec();
...

Последний раз редактировалось swkion; 28.10.2015 в 10:20.
swkion вне форума Ответить с цитированием
Старый 28.10.2015, 10:27   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
что еще нужно?
Нужно еще не нервничать, а почитать доку, где сказано, что exec() вернет результат вставки.
Код:
if(!rielt->query->exec()) проверяем QSqlQuery::lastError()
Ты уверен что твоя addre() правильно отрабатывает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.10.2015, 10:41   #10
swkion
 
Регистрация: 28.10.2015
Сообщений: 8
Сообщение

Проверял несколько раз, работает, все вствляет,запрос работает нормально, вот только с изображениями не понятно что твориться, данные в поле вствляет. а вот на выходе нет изображения.

Изображение в QImage грузится. Загружал его(QImage) в Label перед сохранением в базе. А вот дальше не пойму. Гуглил все примеры привиденные сделаны также.
swkion вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка сообщения в базу данных VitStar03 PHP 14 08.04.2013 13:37
Сохранение изображения в базу данных bob15 C# (си шарп) 1 03.06.2012 15:38
Просмотр изображения Artem Мультимедиа в Delphi 4 08.05.2012 18:58
Загрузка изображения в IB базу данных kitty19 Помощь студентам 2 12.11.2010 23:29
Загрузка blob в базу eldalex БД в Delphi 3 04.10.2010 14:01