QSqlquery prepare()和bindvalue()不起作用?

时间:2018-11-06 12:58:11

标签: c++ sql qsqlquery qsqldatabase

我有用于管理登录名的代码,以下是其中的一小部分:

void Login::on_pushButton_clicked(){
    QString user, password;
    user = ui->username->text();
    password = ui->pass->text();

    QSqlQuery qry;
    qry.prepare("SELECT id, name from users WHERE username = :username AND password = :password");
    qry.bindValue(":username", user);
    qry.bindValue(":password", password);{
    int counter = 0;
    while (qry.next()){
        counter++;
    }
    if(counter==1)
        ui -> statuslabel -> setText("Sign in successful");
    if(counter<1)
        ui -> statuslabel -> setText("Sign in unsuccessful");
    }
}

在提供正确的输入(即正确的密码和用户名)后,它不起作用,如果出现条件说登录失败,则继续进行第二步。我有一个计数器int类型,用于计算有多少用户输入实例与数据库表匹配。它被初始化为零,这意味着不是问题。有什么想法可能在这里吗?

1 个答案:

答案 0 :(得分:2)

在使用const colours: Colour[] = ['black', 'grey', 'dark grey'].map(colour => { return { name: colour, description: `colour is ${colour}` }; }); 访问第一个元素之前,您忘记了调用qry.exec()。应该在最后一个qry.next()之后调用。

下面是如何在您的代码中完成此操作的示例:

qry.bindValue()

注意:您不必使用QSqlQuery qry; qry.prepare("SELECT id, name from users WHERE username = :username AND password = :password"); qry.bindValue(":username", user); qry.bindValue(":password", password); qry.exec() if(!qry.isActive()) { ui -> statuslabel -> setText("SQL Statement execution failed"); return; } if(qry.size() > 0) ui -> statuslabel -> setText("Sign in successful"); else ui -> statuslabel -> setText("Sign in unsuccessful"); 来检查您的QSqlQuery::next语句是否返回任何结果。 SELECT方法将返回选定的行数。