2016-08-03 302 views
0

我有这样的QVariant返回无效同时该数值是有效

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这样做的命令,结果看起来像这样

sql

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

+0

'如果(C == 1 )'这应该是'if(e == 1)'? –

+0

你应该检查错误... – hyde

+0

@HonestAbe:是的,对不起,它应该是'电子== 1'。我已经改正了,你能帮我指出问题吗? – htmlamateur

回答

0

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

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

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