gpt4 book ai didi

c++ - QSqlquery prepare() 和 bindvalue() 不工作?

转载 作者:行者123 更新时间:2023-11-30 03:20:02 25 4
gpt4 key购买 nike

我有这段用于管理登录的代码,这里是其中的一小部分:

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

关于c++ - QSqlquery prepare() 和 bindvalue() 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53172385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com