因此,即時消息有關於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