crossplatform.ru

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


  Ответ в QODBC MS Access(*.accdb) кодировка
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Max Payne Дата 16.2.2012, 16:00
  У меня такая же проблема , только список таблиц возвращается знаками вопросов, помогите кто решил проблему. Я подключаюсь к *.mdb созданой в Aссess 2003.
PAFOS Дата 24.6.2011, 8:01
  Под дампом QString я имел ввиду содержание ее, т.е. массив unsigned char*. По этому массиву возможно понять какая кодировка.
Еще момент, хотя, я думаю, он не особо тут уместен - может быть несовместимый порядок байтов. Например у тебя прога работает с Big Endian, а драйвер возвращает тебе Little Endian. Такой подводный камень типичный для сетевых приложений, но чем мелкософт не шутит?)
haiflive Дата 18.6.2011, 11:22
  У меня ОС х32 забыл сказать..

Открыл одну таблицу, у которой название на латинице.. и там всё нормально 0о все русские буквы в полном порядке..
Подправил кодек для строк
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());

и нормально подключился к таблице с русским названием..

и полный код:
#include <QtGui/QApplication>
#include <QTableView>
#include <QSqlTableModel>
#include <QTextCodec>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());

    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
     db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=D:/Workflow/Base/workbase.accdb");
     db.open();

     QSqlTableModel model;
     model.setTable("Товары");
     model.select();
     QTableView *view1 = new QTableView;
     view1->setModel(&model);
     view1->show();

    return a.exec();
}


Почему-то db.tables() возвращает битые названия таблиц.. что же воспримем это как баг..

Чудеса.. Это именно тот случай, кода думаешь во вред себе..
Всем спасибо за ответы.
DenisKh001 Дата 17.6.2011, 17:05
  У меня лежит вот здесь: C:\Windows\SysWOW64\odbcad32.exe. Проверил, подключился к *.accdb и все работает.

#include <QApplication>
#include <QTableView>
#include <QSqlTableModel>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("TestMDB");
db.open();
QSqlTableModel model;
model.setTable("town");
model.select();
QTableView *view1 = new QTableView;
view1->setModel(&model);
view1->show();
return a.exec();
}
haiflive Дата 17.6.2011, 15:46
  Угу, уже подумывал конвертировать базу в mdb, и подключиться через другую строку коннекта..
Меня больше интересует вопрос, не будет ли проблем с кодировкой, когда я подключусь в *.xsl (MS Excel), драйвер-то тот же..

Очень признателен за ответ.. жду пояснения.
DenisKh001 Дата 16.6.2011, 20:05
  К *.accdb не подключался, но подключался к *.mdb. И особенность в том, что в win7 подключался не через 64х ODBC (а именно он в включается в администрировании), а через 32х ODBC который запрятан в папках windows. Завтра напишу точный путь где лежит. Может поможет.
haiflive Дата 11.6.2011, 10:56
  Ппц, весь гугл облазил.. теперь когда ищу постонно вылазиет эта тема, помогите пож.. будь он не ладен это мелкософт..

Странно, но ошибки ODBC, например ошибка коннекта, возвращает нормальным текстом, а вот данные нет..( может там можно как-то изменить кодировку файла?.

Я бы с удовольствием конвертировал базу в другой формат, но в будующем нужно будет работать с xsl(Excel) файлами, драйвер тот же..

Может есть какие-то альтернативные драйверы?. Open office как-то открывает же эти файлы.. или это промо программа от мелкософта?.
haiflive Дата 10.6.2011, 9:25
  вот собственно переписал прогармму
#include <QtGui/QApplication>

#include <QtSql>
#include <QDebug>
#include <QLabel>
#include <QTextEdit>
#include <QVBoxLayout>
#include <QSqlQuery>
#include <QTextCodec>

//#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF8"));

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

    bool ok = db.open();
    qDebug() << "is open" << db.lastError().text() << ok;

    QTextEdit *te = new QTextEdit;
    if(!ok)
        te->insertPlainText(db.lastError().text());

    for(int i = 0; i < db.tables().size(); i++)
        te->insertPlainText( db.tables().at(i) + "Текст," );

    te->show();
//    MainWindow w;
//    w.show();

    return a.exec();
}


вывод, хотя думаю он испортится:
����������


когда сменил кодировку приложения с UTF8 на cp1251
с помошью строки
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF8"));
то получил что "Текст," превратился в похожий набор символов, если указать cp1251 то солов "Текст," отображатеся нормально.

Дамп QString это как?.

В приложении кусок базы
PAFOS Дата 10.6.2011, 7:54
  Если ты в строке подключения указал UTF-8 то будь добр установи кодек в своей проге тоже на UTF-8
codecForCStrings.

Если не поможет - покажи дамп QString, который возвращается, чтобы определись UTF16 это или UTF-8 или cp1251)
Так же может быть момент, что порядок байтов не совпадает (но это уже последний случай)
Litkevich Yuriy Дата 10.6.2011, 6:44
 
Цитата(haiflive @ 10.6.2011, 5:54) *
может я не правильно делаю, но такой вариант выдаёт ошибку, как безопасно преобразовать в тип char*
QString::fromLocal8Bit( db.tables().at(i) )
Я не понял, что ты хотел сделать.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 18.5.2024, 8:17