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很难说,如果不知道数据库结构和其他方面,会出现什么问题您的代码。然而,这个问题与您的问题没有直接关系,可能应该放在新问题中,以避免使这个问题过于宽泛。