C++ QSqlquery prepare()和bindvalue()不工作?

C++ QSqlquery prepare()和bindvalue()不工作?,c++,sql,qsqlquery,qsqldatabase,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 = :u

我有一段管理登录的代码,下面是其中的一小部分:

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");
    }
}
void Login::在按钮上点击(){
QString用户、密码;
user=ui->username->text();
密码=ui->pass->text();
qsqlqry;
qry.prepare(“从用户名=:用户名和密码=:密码的用户中选择id、名称”);
qry.bindValue(“:用户名”,用户);
qry.bindValue(“:password”,password){
int计数器=0;
while(qry.next()){
计数器++;
}
如果(计数器==1)
ui->statuslabel->setText(“登录成功”);
if(计数器状态标签->设置文本(“登录失败”);
}
}

给它正确的输入(即正确的密码和用户名)如果条件是登录不成功,它将不起作用,并继续执行第二个条件。我有一个计数器int类型,用于计算有多少用户输入实例与数据库表匹配。它被初始化为零,这意味着这不是问题。您对这里可能出现的情况有什么想法吗?

您忘记调用
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
语句是否返回任何结果。
QSqlQuery::size
方法将返回所选行数。

很抱歉再次询问,但您能否在查询之前解释如何执行qry.exec()。还有,为什么会是这种情况,它们都返回bool值,对吗?如果不调用
qry.exec()
查询将永远不会执行。可以将
qry.exec()放入;
int counter=0之后;
@drescherjm感谢您的建议,但是这不起作用。它仍然返回不成功的登录。非常感谢!但现在它产生了相反的效果?它说所有登录都是正确的?qry.size返回-1@Niko很难说,如果不知道数据库结构和其他方面,会出现什么问题您的代码。然而,这个问题与您的问题没有直接关系,可能应该放在新问题中,以避免使这个问题过于宽泛。