【发布时间】:2017-05-05 02:07:07
【问题描述】:
我遇到了一个非常烦人的问题,对我来说这是什么问题没有意义。我正在创建一个多表单 ATM 应用程序,但由于某种原因,我的数据库说它在应用程序中打开,但在输出中它抛出错误:QSqlQuery::exec: database not open
这是我创建数据库的第一个实例的 mainmenu.cpp 文件
mainMenu::mainMenu(QWidget *parent) :QMainWindow(parent),ui(newUi::mainMenu)
{
ui->setupUi(this);
atmDB = QSqlDatabase::addDatabase("QSQLITE","myConnection");
atmDB.setDatabaseName(Path_to_DB);
QFileInfo checkFile(Path_to_DB);
}
在 login.cpp 文件中,它显示在“已连接数据库”屏幕上
login::login(QWidget *parent) :QDialog(parent),ui(new Ui::login)
{
ui->setupUi(this);
QSqlDatabase logindb;
logindb = QSqlDatabase::database("myConnection",true);
bool x = logindb.open();
if(!x){
ui->loginStatusL->setText("No connection to log-in database!");
}
else
ui->loginStatusL->setText("Database connected!");
}
但是当用户按下按钮登录时,它会抛出 SqlQuery 错误,
void login::on_loginLoginB_clicked()
{
QSqlDatabase loginB;
loginB = QSqlDatabase::database("myConnection",true); //open database
QString email, password;
email = ui->loginEmailbox->text();
password = ui->loginPassbox->text();
pubEmail = email;
if(!loginB.isOpen()){
ui->loginStatusL->setText("Connection to database lost");
return;
}
QSqlQuery qry;
if(qry.exec("SELECT * FROM userRecords WHERE email = '"+email+"' and password='"+password+"'")){
int count = 0;
while(qry.next()){
count++;
}
if(count==1){
userMenu usermenu;
atmDB.close();
usermenu.setModal(true);
usermenu.exec();
}
else
ui->loginStatusL->setText("Login failed. Email or password incorrect.");
}
}
我的 register.cpp 文件中也有同样的问题,它遵循相同的逻辑。
【问题讨论】:
-
这段代码大部分是不相关的;将其缩小到MCVE。