В моем конструкторе (Qt 5.4.1 - Windows 7):Почему функция isOpen() всегда возвращает true?
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
db.open();
QSqlQuery q;
q.exec("create table authors(num integer, birthdate date)");
q.exec("insert into authors values('123', '2015-01-01')");
qDebug()<<"your info saved in db.";
Каждые вещи не в порядке до сих пор, но, позже, мне нужно изменить свою БД и сохранить некоторые данные на постоянной основе, так:
int Dialog::SaveInfosPermanent()
{
QSqlDatabase::database().close();
if (QSqlDatabase::database().isOpen()) {
qDebug()<<"DB is open.";
return 1;
}
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("newDB.db");
db.open();
QSqlQuery q;
q.exec("create table authors(num integer, birthdate date)");
q.exec("insert into authors values('123', '2015-01-01')");
qDebug()<<"your info saved in db.";
return 0;
}
и выход:
your info saved in db.
QSqlError("", "", "")
DB is open.
Так что я делаю неправильно? или есть другие идеи для изменения db из памяти на жесткий диск, если пользователь выбирает определенный флажок?
Знаете ли вы, что QSqlDatabase :: database() 'по умолчанию будет также открывать соединение с БД? Если это не то, что вам нужно, вам нужно указать параметр 'open':' QSqlDatabase :: database («QSQLITE», false) .isOpen() ' –