Russian Qt Forum

Qt => Базы данных => Тема начата: Crazy Sage от Февраль 01, 2012, 19:12



Название: Проблема с кодировкой при QSqlQuery.prepare()\bindValue
Отправлено: 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'ом, чтобы влияние кодировки нивелировать?


Название: Re: Проблема с кодировкой при QSqlQuery.prepare()\bindValue
Отправлено: LisandreL от Февраль 02, 2012, 07:04
А так результат какой?
Код:
query.prepare("UPDATE documents SET document_name=:name WHERE id=:id");
query.bindValue(":name", "Тест");
query.bindValue(":id",docid);
query.exec();


Название: Re: Проблема с кодировкой при QSqlQuery.prepare()\bindValue
Отправлено: Crazy Sage от Февраль 02, 2012, 09:33
Мда, дело не в пдфке, дело в том, которая из них обрабатывается первой. Как будто для нее не срабатывает
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
При этом для всех последующих пдфок и для всех запросов с русскими буквами но без prepare() все работает нормально.


Название: Re: Проблема с кодировкой при QSqlQuery.prepare()\bindValue
Отправлено: Crazy Sage от Февраль 06, 2012, 08:51
Вызываю setCodecForCStrings прямо перед запросом - не помогает. Никаких других запросов\функций оперирующих с кодировками вроде вообще нет. Что еще можно сделать? Может как-то принудительно установить кодировку соединения с базой или еще что?