Поиск:

Ответ в темуСоздание новой темы Создание опроса
> кодовая страница в базе данных FireBird, кодовая страница в базе данных FireBird 
:(
    Опции темы
olegkuzn
Дата 2.4.2015, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 1.10.2007

Репутация: нет
Всего: нет




База данных - FireBird 2.0 обращаюсь к которой через ODBC - драйвер. 
В настройках ODBC - драйвера указано CharacterSet - Win1251.


В объекте класса QTableView вместо русских символов появляется грязь, 
хотя установлена кодовая страница : "QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP1251"));"
 Подскажите в чем проблема. Программа запускается в Windows 7 Professional.

Заранее спасибо.
Вот код :
Код

#include "mainwindow.h"
#include <QApplication>
#include <QMessageBox>
#include <QTextCodec>
#include <QTableView>
#include <QSqlQueryModel>
#include <QSqlDatabase>

int main(int argc, char *argv[])
{
    // установка кодовой страницы
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("Windows-1251"));

    QApplication a(argc, argv);

    // открытие базы данных
    QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QODBC");
    db.setDatabaseName("FeedOptimum");

    if(!db.open())
    {
        QMessageBox::critical(0,
                              qApp->tr("Cannot open database"),
                              qApp->tr("Unable to eastablish database connection.\n"),
                              QMessageBox::Cancel);

        return 1;
    }

    // создание модели базы банных
    QTableView*     pTableView;
    QSqlQueryModel* pQueryModel;

    pTableView  = new QTableView;
    pQueryModel = new QSqlQueryModel;

    // создание вида базы данных и привязка его к модели
    pTableView->setModel(pQueryModel);
    pTableView->setGeometry(100,100,800,500);

    // создание и выполнение запроса к базе
    QString strQuery = "Select Raw_ID, Raw_Short_Name, Raw_Name Kprod, Gost from Raw_Dict";
    pQueryModel->setQuery(strQuery , db);

    pTableView->show();

    return a.exec();
}



P.S.
Давным-давно сталкивался с такой же проблемой. Тогда поменял кодовую страницу в базе.
Сейчас этого сделать нельзя. Тогда база была DBASE IV (.dbf) сейчас FireBird и тогда Qt4.7 - сейчас Qt5.2.


PM MAIL   Вверх
borisbn
Дата 2.4.2015, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Я через ODBC не работал, но когда работал напрямую через Qt-шный драйвер QIBASE, то перед открытием базы делал так:
Код
db.setConnectOptions( "LC_CTYPE=WIN1251" );



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
tzirechnoy
Дата 2.4.2015, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 1
Всего: 16



Цитата
В настройках ODBC - драйвера указано CharacterSet - Win1251.


А реально в базе какой?
PM MAIL   Вверх
olegkuzn
Дата 2.4.2015, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 1.10.2007

Репутация: нет
Всего: нет



Реально какой в базе ответить не могу.
На компе только есть только служба fbserver.exe.
Я выгружал в Excel2010 через ODBC.
Все выгрузилось читабельно.

Добавлено через 6 минут
Реально какой в базе ответить не могу.
На компе только есть только служба fbserver.exe.
Я выгружал в Excel2010 через ODBC.
Все выгрузилось читабельно.
PM MAIL   Вверх
olegkuzn
Дата 16.3.2016, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 1.10.2007

Репутация: нет
Всего: нет



Решил поднять годовалую тему.
Вопрос с кодовой страницей в QODBC-соединении так и не решился. Задача была "отложена".

Решил сейчас попробовать работать через QIBASE. 
Но получил ошибку: "SqlDatabase: QIBASE driver not loaded"
Несколько рецептов из интернета не помогли.(не смог получить необходимые dll-файлы)

Если кто работал с QIBASE драйвером
подскажите где можно взять библиотеки и include-файлы файлы для работы с FireBird.
И как правильно скомпилировать библиотеки в dll-файлы.

P.S.  Программа с QIBASE должна работать на машине на которой не установлен FireBird.

Добавлено через 58 секунд
Решил поднять годовалую тему.
Вопрос с кодовой страницей в QODBC-соединении так и не решился. Задача была "отложена".

Решил сейчас попробовать работать через QIBASE. 
Но получил ошибку: "SqlDatabase: QIBASE driver not loaded"
Несколько рецептов из интернета не помогли.(не смог получить необходимые dll-файлы)

Если кто работал с QIBASE драйвером
подскажите где можно взять библиотеки и include-файлы файлы для работы с FireBird.
И как правильно скомпилировать библиотеки в dll-файлы.

P.S.  Программа с QIBASE должна работать на машине на которой не установлен FireBird.




 

PM MAIL   Вверх
borisbn
Дата 16.3.2016, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(olegkuzn @  16.3.2016,  11:25 Найти цитируемый пост)
подскажите где можно взять библиотеки и include-файлы файлы для работы с FireBird

их нужно скомпилировать. Вот cmd-шник для компиляции студией

Код
set INCLUDE=%INCLUDE%;<Путь к FireBird>\SDK\include
set LIB=%LIB%;<Путь к FireBird>\SDK\lib_ms
cd %QTDIR%\src\plugins\sqldrivers\ibase
qmake -o Makefile ibase.pro
nmake


После этого в %QTDIR%\plugins\sqldrivers\ появится файл qsqlibase4.dll. Его нужно будет подкидывать в каталог sqldrivers рядом с приложением


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
olegkuzn
Дата 18.3.2016, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 1.10.2007

Репутация: нет
Всего: нет



Пытался сделать для QtCreator так как описано в справке в разделе 
QSqlDatabase Drivers - How to Build the QIBASE Plugin on Windows :

Код

If you are using Firebird, the Firebird library has to be set explicitly:

cd %QTDIR%\src\plugins\sqldrivers\ibase
qmake "INCLUDEPATH+=C:/Firebird25/include" "LIBS+=-lfbclient" ibase.pro
nmake
If you are not using a Microsoft compiler, replace nmake with make in the line above.

Note that C:\Firebird25\bin must be in the PATH.


Команду nmake не нашел. В интернете нашел вариант с командой "mingw32-make all".
Команда выдает ошибку :
Код

C:/Qt5/5.2.1/Src/qtbase/src/plugins/sqldrivers/ibase/mingw32-make -f Makefile.Release all
mingw32-make[1]: Entering directory 'C:/Qt5/5.2.1/Src/qtbase/src/plugins/sqldrivers/ibase'
g++ -c -pipe -fno-keep-inline-dllexport -O2 -std=c++0x -fno-exceptions -frtti -Wall -Wextra -DUNICODE -DQT_NO_CAST_TO_ASCII -DQT_NO_CAST_FROM_ASCII -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_PLUGIN -DQT_SQL_LIB -DQT_CORE_LIB -I. -I"D:\Firebird25\include" -I"C:\Qt5\5.2.1\mingw48_32\include\QtSql\5.2.1" -I"C:\Qt5\5.2.1\mingw48_32\include\QtSql\5.2.1\QtSql" -I"C:\Qt5\5.2.1\mingw48_32\include" -I"C:\Qt5\5.2.1\mingw48_32\include\QtSql" -I"C:\Qt5\5.2.1\mingw48_32\include\QtCore\5.2.1" -I"C:\Qt5\5.2.1\mingw48_32\include\QtCore\5.2.1\QtCore" -I"C:\Qt5\5.2.1\mingw48_32\include\QtCore" -I".moc\release" -I"..\..\..\..\mkspecs\win32-g++" -o .obj\release\main.o main.cpp
Makefile.Release:407: recipe for target '.obj/release/main.o' failed
mingw32-make[1]: Leaving directory 'C:/Qt5/5.2.1/Src/qtbase/src/plugins/sqldrivers/ibase'
makefile:38: recipe for target 'release-all' failed


Пытался напрямую указать библиотеки в команде qmake - "LIBS+=D:/Firebird25/lib/fbclient_ms.lib".
Не помогло.

Что дальше делать ума не приложу.


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0763 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.