无法从SQLite数据库检索数据并无法在QT GUI上显示

时间:2020-07-18 11:18:05

标签: c++ visual-studio qt

我正在尝试创建一个登录系统,如果一个人登录,它应该在登录GUI后面的Qt GUI上显示其姓名。

我尝试使用下面的代码,但是标签只是空白,所以我假设问题出在数据库上。所有帮助将不胜感激,谢谢。

#include "TaxiCoZa.h"

TaxiCoZa::TaxiCoZa(QWidget *parent):QWidget(parent) {   
    ui.setupUi(this);
    Connection x;
    isConnected(x)
};

void TaxiCoZa::on_loginButton_clicked() {
    emailInput = ui.emailEdit1->text();
    passwordInput = ui.passwordEdit1->text();
    Connection y;
    QSqlQuery query;
    
    query.prepare("SELECT * FROM riders WHERE email='" + emailInput + "' and password='" + passwordInput + "'");
    
    if (query.exec()) {
        int count = 0;
        
        while (query.next()) {
            count++;
        }
        // scenario for the correct password
        if (count == 1) {
            QString name;
            
            QSqlQuery query2;
            
            query2.prepare("SELECT (name) FROM riders WHERE email='" + emailInput + "' and password='" + passwordInput + "'");
            query2.exec();
            
            while (query.next())
            {
                name = query2.value(0).toString();
                break;
            }
            
            y.connClose();
            this->hide();
            Book b;
            b.setGreetingLabel("Hello, " + name);
            b.exec();   
        }
    }
}

3 个答案:

答案 0 :(得分:1)

您的query.prepare("Select ...")似乎写得不正确。 试试这个;

query.prepare("SELECT * FROM riders WHERE email= 'emailInput' and password='passwordInput'");

此外,对第二个查询进行相同的更改。遵循该格式。

答案 1 :(得分:0)

您不能以彼此相同的方式在彼此之间运行两个查询。在第一个查询中,直接SELECT (name),不要运行另一个查询。并确保您的SQLite数据库中存在name

如果必须运行两个查询,请尝试; mysql_query()mysql_real_query() 但是仍然不能同时运行两个(或多个)语句 连接。不可能。您可能可以发送多个语句 立刻,但强烈不鼓励。但是即使在那种情况下 语句将一个接一个地执行。

您最好的选择,尝试在您的第一个查询中获得name

答案 2 :(得分:0)

我通过使用QSqlQuery类中的first()函数设法解决了该问题

请参见下面的代码进行更改

void TaxiCoZa::on_loginButton_clicked() {
QString emailInput = ui.emailEdit1->text();
QString passwordInput = ui.passwordEdit1->text();

QSqlQuery query;

query.prepare("SELECT * FROM riders WHERE email='" + emailInput + "' and password='" + passwordInput + "'");

if (query.exec()) {
    int count = 0;

    while (query.next()) {
        count++;
    }

    if (count == 1) {
        query.first(); // change made here
        QString name = query.value(1).toString();
        y.connClose();
        this->hide();
        
        Book b;
        b.setGreetingLabel("Hello, " + name);
        b.exec();
    }
    else if (count > 1) {
        QMessageBox::critical(this, "Error", "DUPLICATE");
    }
    else{
        QMessageBox::critical(this, "Error", "INCORRECT EMAIL OR PASSWORD ENTERED!!!");
    }
}

}