【问题标题】:QVariant returns invalid meanwhile the value is validQVariant 返回无效,同时值有效
【发布时间】:2016-08-03 19:28:20
【问题描述】:

我有一个这样的小功能

bool QcgDatabase::onceindb(const QString& userId)
{
    mDb->prepareSqlQuery("SELECT count(*) FROM mytable WHERE userid=:userId;", "database");
    mDb->prepareBindValue(":userId", userId);
    mDb->sqlExec();

    bool d = mDb->sqlQuery().isActive();
    QVariant c = mDb->sqlQuery().value(QString("count(*)"));
    int e = c.toInt();

    if (e == 1) {
        return true;
    }
    else {
        return false;
    }
}

当我在 SQL 中执行此命令时,结果如下所示

我只是想在下面取值2进行比较,但是在我调试的代码中,QVariant c总是返回无效,因此e is always = 0。我以为我的 SQL 命令没有激活,但是当我调试时,bool dalways 返回 true。你们知道为什么吗?我怎样才能按预期收到2

【问题讨论】:

  • if (c == 1) 这应该是if (e == 1)吗?
  • 你应该检查错误...
  • @HonestAbe:是的,对不起,应该是e==1。我已经更正了,你能帮我指出问题吗?
  • @hyde:我再次检查了bool valid = mDb->sqlQuery().isValid();,结果是false。但我仍然不知道为什么它无效。 :(
  • 你可能应该阅读mDb的文档...你想要doc.qt.io/qt-5/qsqldatabase.html#lastError这样的东西

标签: c++ qt qsqlquery qvariant


【解决方案1】:

您的问题是您试图从具有特殊(在某些地方无效)名称count(*) 的列中获取结果。您可以为列设置别名并使用该列别名获取值:

...
mDb->prepareSqlQuery("SELECT count(*) as count FROM mytable WHERE userid=:userId;", "database");
...
QVariant c = mDb->sqlQuery().value("count");
...

检查返回值的错误状态也是一种很好的做法...

【讨论】:

    猜你喜欢
    • 2020-02-12
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    相关资源
    最近更新 更多