Russian Qt Forum
Сентябрь 30, 2024, 10:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: ODBC Qt статическая сборка Driver Not Loaded  (Прочитано 6838 раз)
interv
Гость
« : Декабрь 28, 2011, 08:02 »

Всем трям... Собственно проблемма с драйверами ODBC такая:
скомпилил Qt со статической линковкой
configure -debug-and-release -opensource -static -qt-libpng -qt-libtiff -qt-libjpeg -qt-sql-odbc -plugin-sql-odbc -platform win32-g++
в папке %QTDIR%\plugins\sqldrivers\ появились файлики libqsqlodbc.a, libqsqlodbcd.a, qsqlodbc.prl, qsqlodbcd.prl

в проекте
QT += sql
CONFIG += static
Код:
m_Connect = QSqlDatabase::addDatabase("ODBC3");
m_Connect.setDatabaseName("DRIVER={SQL Server Native Client 10.0};SERVER=xxx;DATABASE=xxx;");
m_Connect.setUserName("xxx");
m_Connect.setPassword("xxx");
if (!m_Connect.open())
    {
        QMessageBox msgBox;
        msgBox.setText(tr("Ошибка подключения к базе данных."));
        msgBox.setInformativeText(tr(m_Connect.lastError().databaseText().toUtf8().data()));
        msgBox.setStandardButtons(QMessageBox::Ok);
        msgBox.exec();
        qDebug()<<tr(m_Connect.lastError().databaseText().toUtf8().data());
        qDebug()<<QSqlDatabase::drivers();
    }
в дебаг пишет
Код:
QSqlDatabase: ODBC3 driver not loaded
QSqlDatabase: available drivers: QSQLITE
"Driver not loaded"
("QSQLITE")

В чем может быть проблемма?


ЗЫ: Компилю из QtCreator, обнаружил что у него еесть своя папка QtCreator\bin\sqldrivers\ в которой лежит dll qsqlite4.dll, но т.к. у меня статическая линковка то dll драйверов соответственно нет ) непойму чего делать...
« Последнее редактирование: Декабрь 28, 2011, 12:21 от interv » Записан
KrupaKarlo
Гость
« Ответ #1 : Декабрь 28, 2011, 11:16 »

код .pro покажи скорее всего подключены криво драйвера

когда статик плагины подключаешь надо добавлять секцию QTPLUGIN += плагин
а в коде делать
Код:
#include <QtPlugin>

Q_IMPORT_PLUGIN(плагин)

« Последнее редактирование: Декабрь 28, 2011, 11:21 от KrupaKarlo » Записан
interv
Гость
« Ответ #2 : Декабрь 28, 2011, 12:06 »

не плагин не подключен, когда собираеш Qt статичиски он так и пишет что плагины статически могут быть не скомпилены, т.е.
configure -debug-and-release -opensource -static -qt-libpng -qt-libtiff -qt-libjpeg -qt-sql-odbc -platform win32-g++
было бы правельнее сказать
кстати с таким подключением плагинов касяк выходит на этапе сборки... щас не скажу, но ошибок немерено вылетает, вроде не находит там чегото
« Последнее редактирование: Декабрь 28, 2011, 12:08 от interv » Записан
KrupaKarlo
Гость
« Ответ #3 : Декабрь 28, 2011, 12:09 »

У тебя драйвер это статик плагин. Вот что справка QT говорит:

Цитировать
To link statically against those plugins, you need to use the Q_IMPORT_PLUGIN() macro in your application and you need to add the required plugins to your build using QTPLUGIN. For example, in your main.cpp:

#include <QApplication>
 #include <QtPlugin>

 Q_IMPORT_PLUGIN(qjpeg)
 Q_IMPORT_PLUGIN(qgif)
 Q_IMPORT_PLUGIN(qkrcodecs)

 int main(int argc, char *argv[])
 {
     QApplication app(argc, argv);
     ...
     return app.exec();
 }

 QTPLUGIN     += qjpeg \
                 qgif \
                 qkrcodecs

« Последнее редактирование: Декабрь 28, 2011, 12:13 от KrupaKarlo » Записан
interv
Гость
« Ответ #4 : Декабрь 28, 2011, 12:18 »

так перекомпилил Qt
configure -debug-and-release -opensource -static -qt-libpng -qt-libtiff -qt-libjpeg -qt-sql-odbc -platform win32-g++
т.е. без плагина
и в строчке была ошибка
Цитировать
m_Connect = QSqlDatabase::addDatabase("QODBC3");
все заработало

Кароче по шагам:
1. Качаем
MinGW-gcc440_1.zip
qt-everywhere-opensource-src-4.7.4.zip
qt-creator-win-opensource-2.3.1.exe
2.Создать переменные среды
   MINGW = D:\Qt\4.7.4\mingw
   QTDIR = D:\Qt\4.7.4
   Добавить в Path = %QTDIR%\bin;%MINGW%\bin
3.Создать папку %QTDIR%; Скопировать туда исходники
4.Скопировать MINGW в %QTDIR%
5.Скопировать JOM в X:\Qt
6. Запустить уонфигурацию с папки %QTDIR% (Конфигурация может отличаться)
   configure -debug-and-release -opensource -static -qt-libpng -qt-libtiff -qt-libjpeg -qt-sql-odbc -platform win32-g++
курим минуть 10-20
7. Запустить jom
   ..\jom\jom.exe -j 4
курим часика 3
8.Ставим qt-creator
9.В профилях размещения qmake указываем путь (у меня было d:\qt\4.7.4\qmake\qmake.exe)

наслаждаемся...

ДА! кстати как я и сказал плагины указывать при статической линковке не надо...
Код:
QT       += core gui sql
TARGET = ******
TEMPLATE = app
SOURCES += *****
HEADERS  += ******
FORMS += ******
« Последнее редактирование: Декабрь 28, 2011, 12:24 от interv » Записан
KrupaKarlo
Гость
« Ответ #5 : Декабрь 28, 2011, 12:37 »

я писал из опыта работы с обычным Qt, так что сори  Улыбающийся
Записан
interv
Гость
« Ответ #6 : Декабрь 28, 2011, 12:40 »

Новичкам свойственно ошибаться  Строит глазки
Записан
KrupaKarlo
Гость
« Ответ #7 : Декабрь 28, 2011, 12:56 »

 Веселый  Не ошибается тока тот - кто ничего не делает.
Записан
interv
Гость
« Ответ #8 : Декабрь 29, 2011, 07:50 »

Кстати кому интересно - вывод доступлных драйверов odbc для windows:
Код:
#include <QLibrary>
#include <QDebug>

/****************************************************************/


    QLibrary ODBC32("odbccp32");
    if (ODBC32.load())
    {
        typedef void ( *_SQLGetInstalledDrivers)(char*, quint16, quint16*);
        _SQLGetInstalledDrivers SQLGetInstalledDrivers = (_SQLGetInstalledDrivers) ODBC32.resolve("SQLGetInstalledDrivers");
        char *buf = new char[2048];
        quint16 size;
        if (SQLGetInstalledDrivers)
        {
            SQLGetInstalledDrivers(buf, 2048, &size);
            do
                {
                   QString sDriver = QString(buf);             // Получаем имя каждого драйвера
                   buf = strchr( buf, '\0' ) + 1;    // Проверяем на NULL
                   qDebug()<<sDriver;            // Заполняем массив
                }
                while( buf[1] != '\0' );
        }
        delete buf;
    }
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.091 секунд. Запросов: 21.