Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Распространение приложения, использующего QDB2


Автор: niklep 6.4.2012, 06:06
Доброго времени суток. Прошу помощи.
Имеется написанное на Qt приложение, использующее драйвер QDB2. Приложение корректно функционирует на компьютере, на котором я ее разрабатывал. При переносе на другой компьютер возникли проблемы.
Для начала опишу структуру каталога с программой:
-TelephoneAuto.exe
-QtXml4.dll
-QtSql4.dll
-QtGui4.dll
-QtCore4.dll
-mingwm10.dll
-libgcc_s_dw2-1.dll
-sqldrivers\qsqldb24.dll

При такой структуре каталога при соединении с БД программа выдает ошибку: "Driver not loaded Driver not loaded". Для этой проблемы я нашел временное тупое решение, но все же... Я скопировал все dll'ки из каталога с установленной СУБД IBM DB2 в каталог моего приложения.
Но теперь при соединении с СУБД программа выдает ошибку с пустым содержанием. Т.е. в исходнике срабатывает ветка
Код
if (!db.open())...

но метод db.lastError().text() выдает пустую строку.
При этом также обратил внимание, что завершение приложения вешает программу (опять же, на машине разработчика все работало).
Привожу участки важного кода.
Соединение с БД:
Код

QSqlDatabase db = QSqlDatabase::addDatabase("QDB2");
db.setHostName(connDia.getHost());
db.setDatabaseName(connDia.getNameDb());
db.setUserName(connDia.getLogin());
db.setPassword(connDia.getPasswd());
if (!db.open())
    this->insertMess(QObject::tr("Ошибка соединения с БД: ") + db.lastError().text());
else {
    this->insertMess(QObject::tr("Соединение с БД установлено"));
    ...
}

Завершение приложения:
Код

void MainWindow::slotTerminateApp()
{
    QSqlDatabase db = QSqlDatabase::database();
    QMessageBox confirm;
    confirm.setText(QObject::tr("Подтверждение"));
    confirm.setInformativeText(QObject::tr("Завершить работу приложения?"));
    confirm.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
    confirm.setDefaultButton(QMessageBox::Ok);
    if (confirm.exec() == QMessageBox::Ok) {
        if (db.isOpen())
            db.close();
        app->exit();
    }
}

Прошу найти ошибку и добавить тем самым мне в башку знаний=)
P.S. в заголовочном файле этого класса переменной
Код

QSqlDatabase *db

нет

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)