Russian Qt Forum

Qt => Базы данных => Тема начата: Deiv от Декабрь 28, 2007, 15:53



Название: QODBC, кодировка получаемых строк
Отправлено: Deiv от Декабрь 28, 2007, 15:53
Есть сервер БД. Есть к нему драйвер ODBC.
В настройках драйвера ODBC есть возможность выставить кодировки в которой хранится база, в которой хочешь получать ответ на запрос и отсылать сам запрос. Пока пришел к мнению, что косячит драйвер - эти настройки в нем не действуют.
Чтобы получить данные в читаемом виде приходится выполнять такую процедуру:

Цитировать
    QTextCodec *codec = QTextCodec::codecForName("CP866");
    QSqlQuery q;
    if (!q.exec("select nmbr, var_name, help from defaults;")) {
       qDebug() << "   error #: " << qr.lastError().number();
       qDebug() << "descr (db): " << qr.lastError().databaseText();
       qDebug() << "descr (qt): " << qr.lastError().driverText();
       return 1;
    }
    while (qr.next()) {
       qDebug() << "nmbr: " << qr.value(0) << "variable: " << qr.value(1) << "=" << codec->toUnicode(qr.value(2).toByteArray());
    }

Драйвер закрытый. Срок поддержки давно истек.
Мы не работали с ODBC версией, потому вопросов не возникало.

Можно ли, малой кровью, научить qt отдавать результаты и отсылать запросы в нужной кодировке? Другие варианты?


Название: Re: QODBC, кодировка получаемых строк
Отправлено: WW от Декабрь 28, 2007, 16:21
Что за сервер? Что за драйвер?
Тут все телепаты в отпуск на НГ ушли...


Название: Re: QODBC, кодировка получаемых строк
Отправлено: Deiv от Декабрь 28, 2007, 16:40
Что за сервер? Что за драйвер?
Тут все телепаты в отпуск на НГ ушли...
сервер: Informix
клиент:
IBM/Informix-Client SDK Version 2.81.UC3
IBM/Informix ODBC LIBRARY Version 3.82.0000.UC3
Copyright (C) 1991-2003 IBM

А какое отношение сервер и драйвер имеет к моему вопросу?
Я ведь про "подкрутить Qt" спрашиваю?


Название: Re: QODBC, кодировка получаемых строк
Отправлено: WW от Декабрь 28, 2007, 16:56
Qt просто принимает то, что отдает сервер. Если сервер поддерживает перекодировки под клиента - надо указать на это ему. Если нет - то тут только конвертить самому.
А судя по коду, сервер отдает Вам данные в досовской кодировке, а в Qt все стороки в юникоде.
Покопайтесь в SDK драйвера, манах сервера. дело решается там.
Поищите на бимеровских сайтах. там у них много инфы есть, надо только найти.