Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как правильно заканчивать работу с БД?
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
Steklova Olga
Привет:)
Моя программа работает с одной БД Firebird, использую default connection.
В конструкторе главного окна вызываю метод db_init, в котором делаю addDatabase и db.open().
В других методах класса главного окна и в методах классов, подключенных к нему, работаю с БД, создавая модели, к которым подключаю таблицы БД, и выполняя запросы.
У меня нет в программе removeDatabase. Как-то и так все изменения, которые я вношу в таблицы БД сохраняются в ней.
Обязательно делать removeDatabase в конце программы? Что будет, если не сделать?


В мануале написано, что делают так:
{
    QSqlDatabase db = QSqlDatabase::database("sales");
    QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
}
// Both "db" and "query" are destroyed because they are out of scope
QSqlDatabase::removeDatabase("sales"); // correct

А в моем случае где и как надо вызывать removeDatabase?

Мой код:
MainWindow_db::MainWindow_db(QWidget *parent) :
    QMainWindow(parent)
{
    if (!this->db_init())
        exit(1);
    this->db_work();
}

MainWindow_db::~MainWindow_db()
{

}

bool MainWindow_db::db_init()
{
    QString err_db = "";

    QString applicationDirPath = QApplication::applicationDirPath();
    applicationDirPath.replace("/debug", "");

    QString fileName_DB = "DB1.FDB";
    QString filePath_DB = applicationDirPath + "/" + fileName_DB;

    if (!QFile::exists(filePath_DB)) {
        err_db = "Не удается найти БД " + fileName_DB;
        QMessageBox::critical(NULL, "Ошибка", err_db);
        return false;
    }

    QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE");
    db.setDatabaseName(filePath_DB);
    db.setUserName("XXX");
    db.setPassword("123");
    if (!db.open()) {
        err_db = "Не удается открыть БД";
        QMessageBox::critical(NULL, "Ошибка", err_db);
        return false;
    }

    QSqlDriver *driver = QSqlDatabase::database().driver();
    if (!driver->hasFeature(QSqlDriver::Transactions)) {
        err_db = "Драйвер БД не поддерживает транзакции";
        QMessageBox::critical(NULL, "Ошибка", err_db);
        return false;
    }
    if (!driver->hasFeature(QSqlDriver::PreparedQueries)) {
        err_db = "Драйвер БД не поддерживает подготовленные запросы";
        QMessageBox::critical(NULL, "Ошибка", err_db);
        return false;
    }
    if (!driver->hasFeature(QSqlDriver::BLOB)) {
        err_db = "Драйвер БД не поддерживает BLOB";
        QMessageBox::critical(NULL, "Ошибка", err_db);
        return false;
    }

    return true;
}

Спасибо
Litkevich Yuriy
Цитата(Steklova Olga @ 5.7.2013, 15:29) *
Обязательно делать removeDatabase в конце программы? Что будет, если не сделать?
нет, не обязательно
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.