【问题标题】:QT SQLITE Database wont openQT SQLITE 数据库无法打开
【发布时间】: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。

标签: c++ qt sqlite


【解决方案1】:

如果您只是想知道为什么QSqlQuery::exec() 不起作用,那是因为您没有告诉它任何关于它应该运行查询的数据库的信息。 初始化应该更像:

QSqlDatabase loginB;
//code omitted...
QSqlQuery qry(loginDB); //Tell QSqlQuery which database to work with
//call qry.exe() here

我敢打赌,这与您的 register.cpp 中的问题相同。

【讨论】:

  • SQLite 不使用密码(也不使用任何其他形式的身份验证)
  • @el.pescado 你是绝对正确的,谢谢。这是我监督的事情。我已经编辑了答案以反映这一点。
猜你喜欢
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 2011-05-01
  • 2014-11-11
  • 2014-08-30
  • 2015-06-22
  • 2019-12-03
相关资源
最近更新 更多