Здравствуйте.
Подскажите, пожалуйста, как в QT 5 правильео прочитать DBF файлы от 1С.
При печати в панеле отладки текстовых полей из DBF, кодированных в windows-1251, получаю "кракозяблы".
Вот код:
#include <QApplication>
#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlRecord>
bool readDBF()
{
const QStringList dbParams = QStringList()
<< "DRIVER={Microsoft dBASE Driver (*.dbf)}"
<< "DBQ=C:\\DBaseEx";
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName(dbParams.join(';'));
if (!db.open()) {
QMessageBox::critical(0, qApp->tr("Ощибка при открытии базы"),
qApp->tr("Не возможно установить соединенние с базой данных.\n"
"Это необходимо для SQLite поддержки. Прочитайте "
"документацию по Qt SQL, чтобы правильно настроить "
"соединение с базой данных.\n\n"
"Продолжение работы невозможно."), QMessageBox::Cancel);
return false;
}
QTextCodec *codecWin = QTextCodec::codecForName("Windows-1251");
QSqlQuery sql = QSqlQuery();
sql.exec("SELECT id, descr, ismark FROM sc27156 WHERE ismark IS NULL ORDER BY descr");
QSqlRecord rec = sql.record();
QString fields;
for(int j=0; j<rec.count(); j++)
fields += rec.fieldName(j) + "; ";
qDebug() << "В таблице столбцов: " << rec.count() << " с именами: " << fields;
qDebug() << "В таблице записей: " << sql.size();
// **** Первый вариант http://habrahabr.ru/post/234089/ ****
while(sql.next())
{ QString sss = sql.value(1).toString(); //без кодека
qDebug() << rec.fieldName(1) << " : " << codecWin->toUnicode(sql.value(1).toByteArray());
}
}
Признак кодовой страницы в заголовке DBF устанавливал - не помогшает.
Заранее признателен.
Ефремов.