【问题标题】:connection 'qt_sql_default_connection' is still in use, all queries will cease to work连接“qt_sql_default_connection”仍在使用中,所有查询将停止工作
【发布时间】:2018-07-25 17:44:09
【问题描述】:

我已经为打开和关闭连接创建了单独的函数。但它不会让我在新表单上添加新记录。 这是登录头文件。

public:
QSqlDatabase mydb;
void connClose()
{

    //QString connection;
    //connection = mydb.connectionName();
    mydb.close();
    //mydb.removeDatabase(connection);
    mydb.removeDatabase(mydb.connectionName());
}
bool connOpen()
{
    mydb=QSqlDatabase::addDatabase("QSQLITE");
    mydb.setDatabaseName("./Poem.db");
    if(mydb.open())
    {
        return true;
    }
    else if(!mydb.open())
    {
        return false;
    }

}

这是另一个表单添加按钮:

QString Title,Group,Poem;

Title = ui->lineEdit->text();
Group = ui->label_2->text();
Poem = ui->textEdit->toPlainText();



MainWindow mainwindow;
mainwindow.connOpen();



 QSqlQuery * qry1 = new QSqlQuery(mainwindow.mydb);

 qry1->prepare("insert into Poems(Title,Poem,Group) values ('"+Title+"','"+Poem+"','"+Group+"')");

 if(qry1->exec())
 {
     QMessageBox::critical(this,tr("درج شعر جدید"),tr("شعر اضافه شد"));
     mainwindow.connClose();
 }

我收到此错误:

重复的连接名称“qt_sql_default_connection”,旧连接已删除。 连接 'qt_sql_default_connection' 仍在使用中,所有查询都将停止工作。

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    你正在犯正是Qt QSqlDatabase Documentation警告的内容:

    警告:数据库连接上不应有打开的查询 当这个函数被调用时

    ...

    // 错误

    QSqlDatabase db = QSqlDatabase::database("sales");
    QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
    QSqlDatabase::removeDatabase("sales"); // will output a warning
    

    // "db" 现在是一个悬空的无效数据库连接,// "query" 包含无效的结果集

    正确的是:

    {
        QSqlDatabase db = QSqlDatabase::database("sales");
        QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
    }
    

    // "db" 和 "query" 都因为超出范围而被销毁

      QSqlDatabase::removeDatabase("sales"); // correct
    

    因此,在您的情况下,您执行查询 qry1 并删除同一范围内的数据库(即在 qry1 超出范围之前),您应该修改代码以确保 qry1 被执行并被销毁/消失超出范围/删除数据库之前。试试这个:

    {
     QSqlQuery * qry1 = new QSqlQuery(mainwindow.mydb);
     qry1->prepare("insert into Poems(Title,Poem,Group) values ('"+Title+"','"+Poem+"','"+Group+"')");
     if(qry1->exec())
     {
         QMessageBox::critical(this,tr("درج شعر جدید"),tr("شعر اضافه شد"));
     }
    }
         mainwindow.connClose();
    

    【讨论】:

    • 我已经按照你的建议做了。但它不起作用。当我单击登录窗口上的按钮以另一种形式添加记录时,会弹出错误。
    • 这是我按下添加按钮时登录窗口中的代码:void MainWindow::on_pushButton_2_clicked() { connClose(); FrmNew frmnew; frmnew.setModal(true); frmnew.exec(); }
    • @BehruzMontazeri,这样很难理解,把你的真实代码放在问题中,你还在做同样的问题
    • 我还是有打开和关闭数据库的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 2012-10-23
    • 1970-01-01
    • 2011-06-17
    • 2015-10-27
    相关资源
    最近更新 更多