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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [FreeTDS][Qt4] Русские буковки для MS SQL Server'а  (Прочитано 5167 раз)
Ay49Mihas
Гость
« : Июнь 09, 2010, 09:34 »

Здравствуйте!
По не зависящим от меня причинам приходится кодить для работы с MS SQL Server'ом 2005. Ограничения FreeTDS известны (нет результатов из хранимых процедур и тэдэ), с ограничениями Qt4 повеселее --- узнаю только после наступления на грабли.
Вот ещё не сталкивался с проблемой. Операция INSERT, в bindValue передаю строку QString с русскими символами (без них всё работает как и надо). При выполнении запроса выдаётся следующая ошибка:
Код:
[FreeTDS][SQL Server]The incoming tabular data stream (TDS) protocol stream is incorrect. The stream ended unexpectedly. [FreeTDS][SQL Server]Error converting characters into server's character set. Some character(s) could not be converted.
Если подставлять в bindValue() не саму строку, а типа преобразованную к 8-битной кодировке методами типа toAscii(), toLatin1() (кароче, QByteArray передаётся в bindValue()), то выдаёт ошибку
Код:
[FreeTDS][SQL Server]Operand type clash: image is incompatible with varchar.
что вроде бы логично --- ведь bindValue подставляет не строку, а набор байтов, что он понимает как изображение.
Как с этим делом бороться?
Локаль UTF-8. В freetds.conf client charset = UTF-8. В программе на Qt4 запускается QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
Куда ещё можно копать? Заранее благодарен!

PS: система OpenSuSE 11.2, Qt 4.5.2 с драйвером obdc, скомпилированным с ODBC 2 (по рекомендации Trolltech из-за проблем в FreeTDS с UTF-8). unixODBC 2.2.12, freetds 0.82
Записан
Ay49Mihas
Гость
« Ответ #1 : Июнь 09, 2010, 13:36 »

Итак, у меня непонятки с преобразованием кодировок в Qt4 при передаче их unixODBC. Сделал полностью текстовый запрос с русской строкой в UTF-8, добавляет в базу кракозябры. На cp1251 --- то же самое, только кракозябры другие.

В общем, между засовыванием в запрос путём bindValue значения на русском языке и передачей этого запроса на выполнение unixODBC (я правильно понимаю, что bindValue() не обращается к unixODBC, а сама биндит значения в запрос?), выполняется какое-то неправильное перекодирование, которое мне портит всю малину...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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