Время от времени обсуждалась следующая проблема. Однако никогда не было решения проблемы. Как я узнал, есть разница в повторении строк вперед и назад. Итерация вперед с QSqlQuery::next()
может привести только к одной строке, однако обратная итерация с QSqlQuery::previous()
будет всегда найти все строки. Является ли прямая итерация заданной явно или нет, не имеет никакого эффекта.QSqlQuery для SQLite в передовой итерации со следующей() найдет только одну строку
Edit:Ссылки удалены
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.
Как я уже сказал, итерация назад находит все строки, только вперед итерация (см. Мои фрагменты кода) только находят одну строку. '// Делаем что-то с строкой ...' просто читаем его значения с помощью 'q.value()', не более того. Также, если в этом разделе будет ошибка (это не так), почему это должно работать в обратной итерации в этом случае? – bkausbk
Если вы нашли решение, вам следует отправить ответ. Ссылка на номер ошибки Qt была бы полезна. –