Russian Qt Forum

Qt => Базы данных => Тема начата: vvvxmag от Март 02, 2011, 16:18



Название: [РЕШЕНО]Русские символы при обащении к DBF
Отправлено: vvvxmag от Март 02, 2011, 16:18
открываю БД

QSqlDatabase dbfdb = QSqlDatabase::addDatabase("QODBC", "dbfcon");
   QString dbfDriver;
   dbfDriver = "DRIVER={Microsoft dBase Driver (*.dbf)};FIL={dBase IV;};DefaultDir=c:\\Projects\\petrogold\\Bill\\Data";
   dbfdb.setDatabaseName(dbfDriver);

Кодировка файлов ANSI(CP-1251)

Выполняю запрос
QSqlQuery query.exec("SELECT * FROM goods");
QSqlRecord source_record = query.record();

Далее в пытаюсь получить значение поля содержащего русские символы

query.value(source_record.indexOf("name_iz")).toString();

Возвращаются непонятные символы.

установил
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("Windows-1251"));

Всячески пытался сконвертировать полученную строку
toLocal8Bit
toLatin1
toUtf8

ничего не помогает.

Подскажите пожалуйста, что с этим можно сделать.


Название: Re: Русские символы при обащении к DBF
Отправлено: vvvxmag от Март 03, 2011, 09:43
В какой бы кодировке я не сохранял файл DBF
query.value(source_record.indexOf("name_iz")).toString();
возвращает одно и тоже


Название: Re: Русские символы при обащении к DBF
Отправлено: Пантер от Март 03, 2011, 10:44
Там, вроде, в строке коннекта нужно указать кодировку.


Название: Re: Русские символы при обащении к DBF
Отправлено: vvvxmag от Март 03, 2011, 14:18
Я догадываюсь что это нужно сделать, но не нашел как.
Кучу сайтов перерыл, но не нашел.

Если есть пример connection string поделитесь.


Название: Re: Русские символы при обащении к DBF
Отправлено: Пантер от Март 03, 2011, 14:42
Давно это было, уже не помню. Гугление привело к DriverID, но дальше что-то глухо.


Название: Re: Русские символы при обащении к DBF
Отправлено: vvvxmag от Март 04, 2011, 07:26
Помогло следующее:

изменил значение ключа в реестре

HKLM\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase\DataCodePage - ANSI
до этого стояло OEM.

Всем спасибо за внимание.