2014-02-28 1286 views
0

爲什麼query.next()返回false,query.isSelected()query.isActive()返回true。列號和索引EventNote的數據是正確的。爲什麼QSqlQuery query.next()返回false

下面是代碼:

QVector<QString> DataBase::GetEventNote(int eventId) 
{ 

     QSqlQuery query; 
     query.prepare("SELECT * FROM Events WHERE idEvent=(?)"); 
     query.addBindValue("eventId"); 

    if(!query.exec())  // -> returns true 
    { 
     QMessageBox mb; 
     mb.setText(query.lastError().text()); 
     mb.setWindowIcon(QIcon("icon.png")); 
     mb.exec(); 
    } 
    QVector<QString> debug1; 
    bool v = query.isValid(); // -> returns false 
    bool s = query.isSelect(); // -> returns true 
    bool a = query.isActive(); // -> returns true 
    bool b = query.first(); // -> returns false 
    bool l = query.last(); // -> returns false 
    bool p = query.previous(); // -> returns false 
    QSqlRecord sr = query.record(); 
    int brsr = sr.count(); // -> returns correct number of columns 
    QString str = query.lastQuery(); 

    const QSqlResult *r =query.result(); 

    int nameCol = sr.indexOf("EventNote"); // index of the field "EventNote" is correct (index 5) 

    while (query.next()) // -> returns false 
    { 
     QString debug2 = query.value(nameCol).toString(); // output all EventNote 
     debug1.push_back(debug2); 
    } 


    return debug1; 
} 

回答

0

似乎有一個與你的數據庫有問題。

bool QSqlQuery::isValid() const 

如果查詢當前位於有效記錄上,則返回true;否則返回false。

query.first() 
query.last() 

在檢索結果中的最後一條記錄,如果有的話,並定位在檢索記錄查詢:

這由事實執行。 {...]如果成功,則返回true。 如果不成功,則查詢位置設置爲無效位置並返回false。

所以通過調用這些方法,您實際上是在結果中移動迭代器(反正它不是有效的記錄),與query.previous()一樣。

+0

但爲什麼然後: 'QSqlRecord sr = query.record(); int brsr = sr.count(); // - >返回正確的列數' 返回正確的列數? – user2944505

+0

這很奇怪,你是否嘗試刪除查詢,第一次(),最後等,並做一個簡單的查詢,沒有綁定值? – Kikohs

+0

如果我刪除query.first(),last()...我是一樣的,query.next()返回false,如果我不綁定值quary.exec()然後返回false。這真的很奇怪,因爲我使用了這麼多次,並且沒有任何問題 – user2944505