C++ QSqlDatabasePrivate::removeDatabase:connection';myConnectionName';仍在使用中,所有查询将停止工作
我有一个文件夹,其中有许多数据库。有时可能会将数据库删除或添加到文件夹中。 所以我使用QTimer读取所有数据库 这是我的代码:C++ QSqlDatabasePrivate::removeDatabase:connection';myConnectionName';仍在使用中,所有查询将停止工作,c++,sql,database,qt,C++,Sql,Database,Qt,我有一个文件夹,其中有许多数据库。有时可能会将数据库删除或添加到文件夹中。 所以我使用QTimer读取所有数据库 这是我的代码: this->timer = new QTimer(this); this->timer->setInterval(15000); connect(this->timer, &QTimer::timeout, this, [=]() { QString path = "C:\\Users\\User\\Desktop\\DAXI
this->timer = new QTimer(this);
this->timer->setInterval(15000);
connect(this->timer, &QTimer::timeout, this, [=]() {
QString path = "C:\\Users\\User\\Desktop\\DAXI SMS SENDER\\SMSSenderAllBASE";
//QString path = qApp->applicationDirPath() + "\\SMSSenderAllBASE";
QDir recoredDir(path);
QStringList allFiles = recoredDir.entryList(QDir::NoDotAndDotDot | QDir::System | QDir::Hidden | QDir::AllDirs | QDir::Files, QDir::DirsFirst);
for (int i = 0; i < allFiles.size(); i++) {
QString fullPath = path + "\\" + allFiles[i];
QString connectionName = allFiles[i];
connectionName = connectionName.remove(connectionName.size() - 4, 4);
QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE", connectionName);
db.setDatabaseName(fullPath);
db.setHostName("localhost");
db.setPort(3050);
db.setUserName("SYSDBA");
db.setPassword("masterkey");
thrdHelperSendSMS *help = new thrdHelperSendSMS(db, this);
connect(help, &thrdHelperSendSMS::helperFinished, this, [=](QString connectionName){
QSqlDatabase t_db = QSqlDatabase::database(connectionName);
t_db.close();
QSqlDatabase::removeDatabase(connectionName);
delete help;
});
help->run();
}
});
this->timer->start();
例如:
for (int i = 0; i < allFiles.size(); i++) {
QString fullPath = path + "\\" + allFiles[i];
QString connectionName = allFiles[i];
connectionName = connectionName.remove(connectionName.size() - 4, 4);
QSqlDatabase db = QSqlDatabase::addDatabase("QIBASE", connectionName);
db.setDatabaseName(fullPath);
db.setHostName("localhost");
db.setPort(3050);
db.setUserName("SYSDBA");
db.setPassword("masterkey");
QSqlDatabase::removeDatabase(connectionName);
}
for(int i=0;i
我也有同样的错误。您没有正确使用
removeDatabase()。SqlDatabase的对象需要首先超出范围。看
错误使用
QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
QSqlDatabase::removeDatabase("sales"); // will output a warning
{
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
正确使用
QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
QSqlDatabase::removeDatabase("sales"); // will output a warning
{
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
在第二个示例中,db
将超出范围after}
并且您将不再看到错误消息QSqlDatabasePrivate::removeDatabase:connection'myConnectionName'仍在使用中,所有查询将停止工作
请仔细阅读文档。数据库的内容是合理的,每一行都需要仔细检查
您还缺少db.close()
;-在删除数据库之前关闭它是有意义的。QSqlDatabase db=QSqlDatabase::addDatabase(“qslite”,“conn_name”);
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "conn_name");
db.open();
if (db.open())
{
qDebug()<<"DataBase is Open";
}
else
{
qDebug()<<"DataBase is Not Open";
}
QSqlQueryModel * model = new QSqlQueryModel();
QSqlQuery query(QSqlDatabase::database("conn_name"));
query.exec("SMTHING")
if (query.exec())
{
while (query.next())
{
ui->QTableView->setModel(model);
model->setHeaderData(2, Qt::Horizontal, QObject::tr("????"));
}
}
db.close();
QSqlDatabase::removeDatabase("conn_name");
Here is my code
db.open();
if(db.open())
{
qDebug()@user3606329的答案是正确的,但我添加了这种可能性:
QSqlDatabase db = QSqlDatabase::database("sales");
{
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
//use query
}
db = QSqlDatabase();
QSqlDatabase::removeDatabase("sales");
这不是真正的错误。非常感谢,它可以工作:)如果我留下这个错误,会发生什么问题?数据库不会被删除。也就是说,当你再次添加它时,它会抛出一个已经存在的错误。关闭数据库应该够了,但似乎不够。我认为这是一个Qt问题。@Jolly Roger这还不够。我还想知道为什么u评论一篇超过一年的帖子?db
现在是一个悬空的无效数据库连接,仍然有一个引用QSqlDatabase db