Russian Qt Forum
Ноябрь 23, 2024, 12:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с кодировкой при QSqlQuery.prepare()\bindValue  (Прочитано 3273 раз)
Crazy Sage
Гость
« : Февраль 01, 2012, 19:12 »

Работаю с БД Access (выбора нет, тз жесткое), записываю в нее поля из свойств pdf-ок, поля вытаскиваю Poppler'ом
Поскольку в них, как оказалось, могут быть спецсимволы - решил воспользоваться prepare\bindValue, с некоторыми все ок, у некоторых русская кодировка при записи в базу слетает напрочь?

Код:
Poppler::Document* document = Poppler::Document::load(file.absoluteFilePath());
QString title=document->info("Title");
query.prepare("UPDATE documents SET document_name=:name WHERE id=:id");
query.bindValue(":name",title);
query.bindValue(":id",docid);
query.exec();

Делаю QListWidget->addItem(title); - все ок, все по русски, а в базу выводятся кракозябры
Если вместо prepare\bindValue делаю title=title.replace("'","\"") - все нормально с кодировками, но менять апострофы на кавычки все-таки не айс. А при title.replace("'","\\'") запрос почему-то вообще не выполняется.

Qt 4.7.3, работаю под виндой, подскажите, что можно сделать с QString'ом, чтобы влияние кодировки нивелировать?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


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


Просмотр профиля
« Ответ #1 : Февраль 02, 2012, 07:04 »

А так результат какой?
Код:
query.prepare("UPDATE documents SET document_name=:name WHERE id=:id");
query.bindValue(":name", "Тест");
query.bindValue(":id",docid);
query.exec();
Записан
Crazy Sage
Гость
« Ответ #2 : Февраль 02, 2012, 09:33 »

Мда, дело не в пдфке, дело в том, которая из них обрабатывается первой. Как будто для нее не срабатывает
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
При этом для всех последующих пдфок и для всех запросов с русскими буквами но без prepare() все работает нормально.
Записан
Crazy Sage
Гость
« Ответ #3 : Февраль 06, 2012, 08:51 »

Вызываю setCodecForCStrings прямо перед запросом - не помогает. Никаких других запросов\функций оперирующих с кодировками вроде вообще нет. Что еще можно сделать? Может как-то принудительно установить кодировку соединения с базой или еще что?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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