我为open和close connection.But做了单独的函数--它不允许我在新表单上添加新记录。这是登录头文件。
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;
}
}
这是另一个表单add按钮:
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_”,删除旧连接。连接“qt_sql_default_connection”仍在使用中,所有查询都将停止工作。
发布于 2018-07-25 11:55:57
您正在提交Qt QSqlDatabase文档警告的内容:
警告:当调用此函数时,数据库连接上不应该有打开的查询。
..。
//错
QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);
QSqlDatabase::removeDatabase("sales"); // will output a warning
// "db“现在是一个悬空的无效数据库连接,//”查询“包含无效的结果集
和正确的是
{
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();
https://stackoverflow.com/questions/51524866
复制相似问题