我有一个非常烦人的问题,对我来说没有任何意义。我正在创建一个多表格ATM应用程序但由于某种原因我的数据库在应用程序中说它打开但在输出中它抛出错误: QSqlQuery :: exec:数据库未打开
这是mainmenu.cpp文件,我在其中创建了DB的第一个实例
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文件中也有同样的问题,它遵循相同的逻辑。
答案 0 :(得分:0)
如果您只是想知道为什么QSqlQuery::exec()
无法正常工作,那是因为您还没有告诉它应该运行数据库的任何内容查询。
初始化看起来应该更像:
QSqlDatabase loginB;
//code omitted...
QSqlQuery qry(loginDB); //Tell QSqlQuery which database to work with
//call qry.exe() here
我敢打赌你的register.cpp中存在同样的问题。