因此,即时消息有关于qt和sql命令的一个问题,我已经坐了几个小时,但更容易发生,而不是简单。Qt在不在主类中的函数中执行SQL命令
我试图有多种形式,在每一个我连接数据库,并执行一些操作。这工作正常,但是 - 只要我将所述操作移动到说按钮按下功能,我收到数据库未打开错误。我不关闭这个类中的任何地方的数据库,但错误仍然存在。
我已经看到了问题的一部分是以下错误:
QSqlDatabasePrivate :: removeDatabase:连接“qt_sql_default_connection”仍然在使用,所有的查询将停止工作。
QSqlDatabasePrivate :: addDatabase:重复的连接名称'qt_sql_default_connection',旧的连接被删除。
当我重新构造代码(用于调试)并删除第一种形式的连接时,错误消失,并且数据库在第二类函数中保持打开状态。 下面,次级类
HomeScreen::HomeScreen(QWidget *parent):QWidget(parent),ui(newUi::HomeScreen){
ui->setupUi(this);
connect(ui->btnInclogShow,SIGNAL(pressed()),this,SLOT(ShowLogs()));
dbe = QSqlDatabase::addDatabase("QMYSQL");
dbe.setDatabaseName("securitydb");
dbe.setUserName("root");
dbe.setPassword("");
dbe.open();
if(dbe.open()){
qDebug() << "Database is open in main part";
}
else{qDebug() << "Database is closed";}
}
HomeScreen::~HomeScreen()
{
delete ui;
}
void HomeScreen::ShowLogs()
{
qDebug() << "Showlogs pressed";
if(dbe.open()){
qDebug() << "Database is open";
}
else{qDebug() << "Database is closed";}
}
下面初级班
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("securitydb");
db.setUserName("root");
db.setPassword("");
db.open();
connect(ui->btnLogin,SIGNAL(pressed()),this,SLOT(LoginClicked()));
if(db.open()){
qDebug() << "Database is open";
}
else{qDebug() << "Database is closed";}
}
MainWindow::~MainWindow()
{
delete ui;
db.close();
db.removeDatabase("securitydb");
}
void MainWindow::LoginClicked()
{
qDebug() << "pressed";
this->destroy();
HomeScreengui->show();
}
作为一种尝试,以减轻这个问题,我宣布在第二类的新数据库变量,这没有奏效。 任何帮助,将不胜感激!
你说你不关闭数据库,但你在析构函数中做这件事。没有必要在代码的每个部分打开数据库,只需在main.cpp中执行它,QSqlDatabase有一个全局实例。你叫什么摧毁? – eyllanesc
尽管析构函数,我仍然收到错误,谢谢你的评论,但我会尝试在主要开放! – Renierler