2016-08-03 7 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

'если (с == 1) 'это должно быть' if (e == 1) '? –

+0

Вероятно, вы должны проверить наличие ошибок ... – hyde

+0

@HonestAbe: да, извините, это должно быть 'e == 1'. Я уже исправляю это. Не могли бы вы помочь мне указать на проблему? – htmlamateur

ответ

0

Ваша проблема заключается в том, что вы пытаетесь получить результат из столбца со специальным (и в некоторых местах недопустимым) именем count(*). Вы можете задать псевдоним для столбца и получить значение с помощью этого столбца псевдоним:

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

И проверки Возвращаемые значения для ошибочных состояний также хорошая практика ...

 Смежные вопросы

  • Нет связанных вопросов^_^