不时讨论以下问题。然而,它本身的问题从来没有解决方案。正如我发现的那样,向前和向后迭代行是有区别的。前向迭代QSqlQuery::next()
可能只产生一行,但后向迭代总是QSqlQuery::previous()
会找到所有行。无论是否明确设置前向迭代,都没有影响。
编辑: 删除参考
关于 Qt 文档,正确的方法如下:
QSqlQuery q = db.exec("SELECT * FROM Table");
while (q.next()) {
// Do something with row...
}
但是,这将导致只有一行。向后迭代将找到所有行。
QSqlQuery q = db.exec("SELECT * FROM Table");
if (q.last()) {
do {
// Do something with row...
} while (q.previous());
}
向后迭代可能非常慢,应该避免。有谁知道为什么这在前向迭代中不起作用?
编辑:这种行为对我来说并不总是可重现的,有时会发生,有时不会。在这种情况下,数据库包含不止一行。该问题恰好发生在此代码片段中。有没有人有同样的问题?
编辑 2:似乎该错误已在 Qt 4.8.5 中修复。
我当前的环境:Windows 7 (SP1),Qt 4.8.5。