QSqlquery prepare() 和 bindvalue() 不工作?
QSqlquery prepare() and bindvalue() not working?
我有这个管理登录的代码,下面是其中的一小部分:
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 类型,用于计算与数据库表匹配的用户输入实例的数量。它被初始化为零,这意味着这不是问题所在。关于这里的情况有什么想法吗?
您忘记在使用 qry.next()
访问第一个元素之前调用 qry.exec()
。它应该在最后 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
语句是否 return 任何结果。 QSqlQuery::size
方法将选择 return 行数。
我有这个管理登录的代码,下面是其中的一小部分:
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 类型,用于计算与数据库表匹配的用户输入实例的数量。它被初始化为零,这意味着这不是问题所在。关于这里的情况有什么想法吗?
您忘记在使用 qry.next()
访问第一个元素之前调用 qry.exec()
。它应该在最后 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
语句是否 return 任何结果。 QSqlQuery::size
方法将选择 return 行数。