crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 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 Рейтинг@Mail.ru Текстовая версия Сейчас: 7.8.2025, 16:52