2016-08-03 39 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"); 
... 

而且檢查返回值錯誤狀態也是很好的做法...