2014-02-28 1278 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