我有用于管理登录名的代码,以下是其中的一小部分:
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类型,用于计算有多少用户输入实例与数据库表匹配。它被初始化为零,这意味着不是问题。有什么想法可能在这里吗?
答案 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
方法将返回选定的行数。