Моя программа работает с одной БД 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;
}
Спасибо