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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Распространение приложения, использующего QDB2  (Прочитано 3742 раз)
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
нет
Записан
Bepec
Гость
« Ответ #1 : Апрель 05, 2012, 15:29 »

Я б посоветовал сделать проще - вывести лог в файл, записываемый до и после каждой критически важной секции.

PS код не смотрел. Маловато помоему.
Записан
Figaro
Гость
« Ответ #2 : Апрель 08, 2012, 13:50 »

Надо проверить все зависимости в qsqldb24.dll... И уж совсем грубо, но эффективно - написать qt.conf
Записан
niklep
Гость
« Ответ #3 : Апрель 10, 2012, 14:06 »

Хорошо, попробую разобраться. Времени на эту задачу совсем мало есть. Как что решу отпишусь
Записан
niklep
Гость
« Ответ #4 : Май 10, 2012, 12:27 »

Вернулся к проблеме. Игрался с переменными окружения, все без толку. В итоге решил, что буду ставить на машину DB2. Так все прекрасно работает.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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