Russian Qt Forum
Июнь 11, 2024, 02:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: BLOB + Update  (Прочитано 3925 раз)
INZER
Гость
« : Май 31, 2012, 23:37 »

Не могу понять почему неверно заполняется QSqlQuery.

Код:
Код:
    QSqlQuery sql;
    sql.prepare("UPDATE proj_task SET file_data = ? WHERE id="+QString::number(3));
    sql.bindValue(0,QVariant("000"));
    sql.exec();
    qDebug () << sql.lastQuery();

Результат qDebug ():
"UPDATE proj_task SET file_data = ? WHERE id=3"

Пробовал такой вариант:
Код:
    QSqlQuery sql;
    sql.prepare("UPDATE proj_task SET file_data = :filename WHERE id="+QString::number(3));
    sql.bindValue(":filename",QVariant("000"));
    sql.exec();
    qDebug () << sql.lastQuery();
Результат qDebug ():
"UPDATE proj_task SET file_data = :filename WHERE id=3"

Пробовал вариант c addBindValue результат такой же

Табличка:
Код:
DROP TABLE IF EXISTS `parman`.`proj_task`;
CREATE TABLE  `parman`.`proj_task` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `id_proj` int(10) unsigned NOT NULL,
  `task` text,
  `date_plan` date NOT NULL,
  `date_fact` date default NULL,
  `responsibility` int(10) unsigned default NULL,
  `receiver` int(10) unsigned default NULL,
  `status` int(10) unsigned default NULL,
  `file_data` longblob,
  `file_name` text,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=107 DEFAULT CHARSET=utf8;
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Июнь 01, 2012, 01:06 »

Всё правильно заполняется.
Но я полагаю, вы думали, что забинденные значения заменят плейсхолдеры в запросах в QSqlQuery::lastQuery().
Этого не происходит.
Записан
interv
Гость
« Ответ #2 : Июнь 01, 2012, 07:21 »

Тока вчера написал решение:
http://www.prog.org.ru/topic_22078_0.html

и скорее всего так
Код
C++ (Qt)
   QByteArray bytes;
   // Fill or change "bytes"
   QSqlQuery sql(my_database);
   sql.prepare("UPDATE proj_task SET file_data=:filedata, file_name=:filename WHERE id=:id");
   sql.bindValue("id", QVariant((int)3));
   sql.bindValue("filedata", QVariant(bytes));
   sql.bindValue("filename", QVariant(QString("temp.txt")));
   sql.exec();
 
По скольку longblob скорее всего должен принимать не строку а набор байтов
Если ты используешь название файла на кирилице, то тут сложнее...
Обычно я делаю проект в кодировке UTF-8 в main.cpp прописываю
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
и строка терь будет выглядить так
sql.bindValue("filename", QVariant(tr("ТЭМП.текст")));
« Последнее редактирование: Июнь 01, 2012, 07:41 от interv » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.1 секунд. Запросов: 19.