crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

haiflive
  опции профиля:
сообщение 9.6.2011, 16:01
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 37
Регистрация: 8.7.2010
Пользователь №: 1868

Спасибо сказали: 1 раз(а)




Репутация:   0  


Здравствуйте. у меня возникла проблема с кодировками..
Подключился к базе MS Access, через ODBC драйвер, делаю запрос QSqlDatabase::tables(), и вывожу результат в QTextEdit и получаю кучу вопросиков в чёрных ромбиках..
Латиница отабражается нормально, а вот русские буквы(русские буквы в названиях таблиц и их полей не я накуралесил) отображаются тёмными ромбиками внутри которых вопросики, обычно это происходит когда cp-1251 отображают как utf-8, странно токуда вылезло cp-1251?. ODBC кажется кодирует в ASCII кодировке..

Вобщем, варианты типа этих не работаю
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));//UTF-8//ASCII, ANSI// CP-1251
FromUTF8 , toLocal8bit не помогают, уже весь иннет перерыл..

заставить базу в mySQL как бы просто, один sql SET NAMES cp1251, ну или посмотреть кодировки SHOW GLOBAL VARIABLES LIKE 'char%';
а в odbc почему-то выполнение этих запросов query.exec(); возвращает false;

Как можно в приложении изменить кодировку, изменить кодировку соединения с базой?. ну или на крайняк изменить кодировку DSN драйвера?.

OC windows 7, Qt SDK_1_1_1, QT4.7.3, mingw.

ммм.. где здесь правка собственных постов?. извеняюсь за ошибки.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
haiflive
  опции профиля:
сообщение 9.6.2011, 17:48
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 37
Регистрация: 8.7.2010
Пользователь №: 1868

Спасибо сказали: 1 раз(а)




Репутация:   0  


так чтоли..
db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DSN='';CharSet=UTF8;DBQ=C:/Qt/projects/connetDatabase/Workflow/Base/workbase.accdb");

не работает, вот код ещё, коменты не стал удалять:

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DSN='';CharSet='UTF-8';DBQ=C:/Qt/projects/connetDatabase/Workflow/Base/workbase.accdb");
//        db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=C:/Qt/projects/connetDatabase/Workflow/Base/workbase.accdb");

//    QSqlDatabase db = QSqlDatabase::addDatabase("DRIVER={Microsoft Access Driver (*.mdb)};FIL={Access};DBQ=C:/Qt/projects/connetDatabase/Workflow/Base/workbase.accdb");
         bool ok = db.open();
         qDebug() << "result is" << db.lastError().text() << ok;

//         qDebug() << "lis tables" <<  db.tables();

//         QSqlQuery query("SELECT QUOTENAME(TABLE_SCHEMA)+N'.'+QUOTENAME(TABLE_NAME)"
//                         "FROM INFORMATION_SCHEMA.TABLES"
//                         "WHERE TABLE_TYPE=N'BASE TABLE';");
//             while (query.next()) {
//                 QString country = query.value(0).toString();
//                 qDebug() << country <<";";
//             }

         QTextEdit *te = new QTextEdit;
         for(int i = 1; i < db.tables().size(); i++){
//             QByteArray buf_in;
//             QString str;
//             buf_in = db.tables().at(i).toAscii();
//             for(int i =1; i<buf_in.size(); i++)
//             {
//                 QChar chr;
//                 chr = buf_in.at(i);
//                 str.append(chr);
//             }
             te->insertPlainText( db.tables().at(i) + "Текст," );
         }
//         qDebug() << db.tables();
         QVBoxLayout *lay = new QVBoxLayout;
         ui->centralWidget->setLayout(lay);
         lay->addWidget(te);
         QSqlQuery query;
         qDebug() << query.exec("SELECT TABLE FROM AttachableObjects");
         qDebug() << query.next();

         qDebug() << query.value(0);


как мне кажется правда кроется в этих сточка из документации, но о чём там говрится понять не могу
Цитата
ODBC Unicode Support

The QODBC Plugin will use the Unicode API if UNICODE is defined. On Windows NT based systems, this is the default. Note that the ODBC driver and the DBMS must also support Unicode.

Some driver managers and drivers don't support UNICODE. To use the QODBC plugin with such drivers it has to be compiled with the Q_ODBC_VERSION_2 defined.

For the Oracle 9 ODBC driver (Windows), it is neccessary to check "SQL_WCHAR support" in the ODBC driver manager otherwise Oracle will convert all Unicode strings to local 8-bit.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- haiflive   QODBC MS Access(*.accdb) кодировка   9.6.2011, 16:01
- - PAFOS   Поиграйся с параметром строки подключения CharSet....   9.6.2011, 16:41
- - haiflive   так чтоли.. db.setDatabaseName("DRIVER={Micro...   9.6.2011, 17:48
- - Litkevich Yuriy   Цитата(haiflive @ 9.6.2011, 19:01) странн...   9.6.2011, 17:52
- - haiflive   может я не правильно делаю, но такой вариант выдаё...   10.6.2011, 2:54
- - Litkevich Yuriy   Цитата(haiflive @ 10.6.2011, 5:54) может ...   10.6.2011, 6:44
- - PAFOS   Если ты в строке подключения указал UTF-8 то будь ...   10.6.2011, 7:54
- - haiflive   вот собственно переписал прогармму #include ...   10.6.2011, 9:25
- - haiflive   Ппц, весь гугл облазил.. теперь когда ищу постонно...   11.6.2011, 10:56
- - DenisKh001   К *.accdb не подключался, но подключался к *.mdb. ...   16.6.2011, 20:05
- - haiflive   Угу, уже подумывал конвертировать базу в mdb, и по...   17.6.2011, 15:46
- - DenisKh001   У меня лежит вот здесь: C:\Windows\SysWO...   17.6.2011, 17:05
- - haiflive   У меня ОС х32 забыл сказать.. Открыл одну таблицу...   18.6.2011, 11:22
- - PAFOS   Под дампом QString я имел ввиду содержание ее, т.е...   24.6.2011, 8:01
- - Max Payne   У меня такая же проблема , только список таблиц во...   16.2.2012, 16:00


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 9.6.2025, 7:50