Название: Считывание изображений из базы данных Отправлено: dsp от Июнь 12, 2011, 15:08 Есть база данных, которая хранит изображения и другую инфу.
Структура бд Код: model->setTable("photos"); Записываю все это так Код: void dbCreate::downloadData(QString &file, QString &floor, QString &order) Необходимо считывать подряд по щелчку по кнопке и отображать фотографию(отображение пока не трогаем...). Пытаюсь считать изображение(передавая его номер): Код: void dbCreate::writeData(int Scene_Id) файл появляется, но его размер всегда 0. В чем может быть проблема? Название: Re: Считывание изображений из базы данных Отправлено: _OLEGator_ от Июнь 12, 2011, 20:04 Может query.value(0).toByteArray() ?
Название: Re: Считывание изображений из базы данных Отправлено: dsp от Июнь 12, 2011, 20:34 Может query.value(0).toByteArray() ? Результат запроса находится в первой колонке - Value(1), а не в нулевой ( Value(0) ). Название: Re: Считывание изображений из базы данных Отправлено: _OLEGator_ от Июнь 12, 2011, 20:36 Тогда не вяжется
query.prepare("SELECT Photo FROM photos WHERE Id = :Id"); с query.value(1).toByteArray(); нумерация колонок идет с 0 Название: Re: Считывание изображений из базы данных Отправлено: dsp от Июнь 12, 2011, 22:34 Тогда не вяжется query.prepare("SELECT Photo FROM photos WHERE Id = :Id"); с query.value(1).toByteArray(); нумерация колонок идет с 0 Значит я хреново понимаю чего делает Value... Value возвращает результат запроса - в данном случае результатом должна быть ячейка в колонке под названием Photo с Id = какое-то число! или я наврал? Название: Re: Считывание изображений из базы данных Отправлено: LisandreL от Июнь 12, 2011, 23:06 Value возвращает результат запроса - в данном случае результатом должна быть ячейка в колонке под названием Photo с Id = какое-то число! или я наврал? Да именно одна колонка и она будет иметь индекс ноль. С номером столбца в исходной таблице этот индекс не имеет ничего общего.Название: Re: Считывание изображений из базы данных Отправлено: dsp от Июнь 12, 2011, 23:17 Value возвращает результат запроса - в данном случае результатом должна быть ячейка в колонке под названием Photo с Id = какое-то число! или я наврал? Да именно одна колонка и она будет иметь индекс ноль. С номером столбца в исходной таблице этот индекс не имеет ничего общего.на value(0) ошибка Код: QSqlQuery::value: not positioned on a valid record Название: Re: Считывание изображений из базы данных Отправлено: ecspertiza от Июнь 13, 2011, 08:42 Проверь результат запроса, возвращает ли он что нибудь, и вместо query.first() сделай query.next()
Название: Re: Считывание изображений из базы данных Отправлено: dsp от Июнь 13, 2011, 10:47 Ураааааа!
Сделал так Цитировать QByteArray dbCreate::writeData(int Scene_Id) { QSqlQuery query(db); query.prepare("SELECT Photo FROM photos WHERE Id = :Id"); query.bindValue(":Id", Scene_Id); if(query.exec()) { while(query.next()) { QByteArray photo = query.value(0).toByteArray(); QFile filePhoto(QString::number(Scene_Id) + ".jpg"); if(filePhoto.open(QIODevice::WriteOnly)) { filePhoto.write(photo); return filePhoto; } else qDebug() << "error"; } } else qDebug() << query.lastError().type() << query.lastError().text(); и заработало - файлы стали появляться и отображаться... только как-то не очень хорошо так делать - return где-то внутри, а логика программы дальше идет... Название: Re: Считывание изображений из базы данных Отправлено: Alucard от Июнь 13, 2011, 10:54 exceptions
Название: Re: Считывание изображений из базы данных Отправлено: LisandreL от Июнь 13, 2011, 10:55 только как-то не очень хорошо так делать - return где-то внутри, а логика программы дальше идет... return внутри это нормально, если в данной ветке больше ничего делать не надо.Но по хорошему надо возвращать хоть какой-то результат даже если ничего не прочиталось, функция-то должна результат возвращать. Скажем, пустой массив: return QByteArray(); Название: Re: Считывание изображений из базы данных Отправлено: dsp от Июнь 13, 2011, 11:04 Спасибо всем, друзья. Проблема решена - все работает!
Функуция немного изменилась. Возвращает теперь QString,т.к. мне в OpenGL надо передавать имя файла, который будет отображаться. Код: QString dbCreate::writeData(int Scene_Id) Название: Re: Считывание изображений из базы данных Отправлено: dsp от Июнь 13, 2011, 11:09 Кстати, совсем забыл, была еще одна небольшая проблема.
Если в бд начинаешь в первый раз что-то добавлять, то не отображаются ни ее названия столбцов ни содержимое. Если программу перезапустить, то все появляется и дальше все отображаеся, когда делаешь INSERTы. Вроде бы select() поставил, а толку нет... |