>我正在从 2 个 lineedit 小部件中读取文本值,并使用其中的数据充当登录系统,但我无法,因为该程序目前只检查用户名是否在 SQLITE 数据库中,我不确定为什么。
我的连接是从
QSqlDatabase login = QSqlDatabase::addDatabase("QSQLITE");
login.setDatabaseName("/Users/Daniel/Dropbox/Stock_Control.sqlite");
if(!login.open())
ui->label->setText("Unable To Connect To Database");
我的登录代码如下
static Home *home = new Home;
QSqlQuery query;
QString Username = ui->Username_lineEdit->text();
QString Password = ui->Password_lineEdit->text();
query.prepare("SELECT Login, Password FROM Program_account WHERE Login = '"+ Username +"' AND Password = '"+ Password +"'");
if(!query.exec())
{
qDebug() << "SQL QUERY Login:" << query.executedQuery();
qDebug() << "SQL ERROR Login:" << query.lastError();
}
else if(!query.first())
{
qDebug() << "SQL QUERY Login:" << query.executedQuery();
qDebug() << query.value(1);
qDebug() << "SQL ERROR Login:" << query.lastError();
tries++;
int x = 10 - tries;
ui->label->setText("Incorrect Username or Password " + QString::number(x) + " tries until timeout");
}
else
{
qDebug() << "SQL QUERY Login:" << query.executedQuery();
qDebug() << query.value(1);
qDebug() << query.last();
qDebug() << "SQL ERROR Login:" << query.lastError();
tries = 0;
home->show();
close();
}
当 query.value(1) 运行时,输出是 QVariant(无效),我猜这是我问题的根源,但我不知道为什么不如何解决它。
谢谢
通过查看上面的代码,我敢打赌 QSqlQuery 对象没有正确初始化,因此没有成功执行语句。
您必须在创建连接时将连接传递给 QSQlQuery,或者手动设置它,如下所示:
QSqlQuery query(login);
由于这永远不会被设置,因此您不针对任何内容执行查询,并且它失败。 在这种情况下,QSQlQuery 对象上的错误消息不太理想。