Qt SQLITE查询QVariant无效

时间:2014-12-30 19:42:45

标签: database qt sqlite qt5 qvariant

我正在读取来自2个lineedit小部件的文本值并使用其中的数据充当系统中的日志,但我无法,因为该程序当前只检查用户名是否在SQLITE数据库中,i'我不确定为什么。

我的连接是从

完成的
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(无效),我猜这是我的问题的根源,但我不知道为什么不解决它。

谢谢

1 个答案:

答案 0 :(得分:0)

通过查看上面的代码,我认为QSqlQuery对象没有正确初始化,因此没有成功执行语句。

您必须在创建时将连接传递给QSQlQuery,或者像下面那样手动设置它:

QSqlQuery query(login);

由于这永远不会被设置,因此您可以对任何内容执行查询,但它会失败。在这种情况下,QSQlQuery对象上的错误消息传递不太理想。