Russian Qt Forum

Qt => Базы данных => Тема начата: niklep от Апрель 05, 2012, 15:24



Название: Распространение приложения, использующего QDB2
Отправлено: niklep от Апрель 05, 2012, 15:24
Доброго времени суток. Прошу помощи.
Имеется написанное на 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
нет


Название: Re: Распространение приложения, использующего QDB2
Отправлено: Bepec от Апрель 05, 2012, 15:29
Я б посоветовал сделать проще - вывести лог в файл, записываемый до и после каждой критически важной секции.

PS код не смотрел. Маловато помоему.


Название: Re: Распространение приложения, использующего QDB2
Отправлено: Figaro от Апрель 08, 2012, 13:50
Надо проверить все зависимости в qsqldb24.dll... И уж совсем грубо, но эффективно - написать qt.conf


Название: Re: Распространение приложения, использующего QDB2
Отправлено: niklep от Апрель 10, 2012, 14:06
Хорошо, попробую разобраться. Времени на эту задачу совсем мало есть. Как что решу отпишусь


Название: Re: Распространение приложения, использующего QDB2
Отправлено: niklep от Май 10, 2012, 12:27
Вернулся к проблеме. Игрался с переменными окружения, все без толку. В итоге решил, что буду ставить на машину DB2. Так все прекрасно работает.