2013-06-08 8 views
2

Я пытаюсь получить количество строк в виде QSqlQuery, драйвер базы данных QSQLITEПолучение строки из QSqlQuery, но получил -1

bool Database::runSQL(QSqlQueryModel *model, const QString & q) 
{ 
    Q_ASSERT (model); 

    model->setQuery(QSqlQuery(q, my_db)); 
    rowCount = model->query().size(); 
    return my_db.lastError().isValid(); 
} 

Запрос здесь является запрос на выборку, но я все еще получаю -1;

Если я использую model->rowCount(), я получаю только те, которые были отображены, например 256, но выберите count (*), возвращает 120k результатов.

Что в этом плохого?

ответ

4

documentation говорит:

Возвращает ... -1, если размер не может быть определено, или если база данных не поддерживает отчетности информации о размерах запроса.

SQLite действительно не поддерживает это.

Обратите внимание: кэширование записей 120k не очень эффективно (никто не будет смотреть на все эти); вы должны каким-то образом отфильтровать их, чтобы получить результат до управляемого размера.

2

Этот фрагмент кода счетчика строк работает для таблиц на основе SQLite3, а также обрабатывает проблему «fetchMore», связанную с определенными версиями SQLite.

QSqlQuery query(m_database); 

query.prepare(QString("SELECT * FROM MyDatabaseTable WHERE SampleNumber = ?;")); 
query.addBindValue(_sample_number); 

bool table_ok = query.exec(); 
if (!table_ok) 
{ 
    DATABASETHREAD_REPORT_ERROR("Error from MyDataBaseTable", query.lastError()); 
} 
else 
{ 
    // only way to get a row count, size function does not work for SQLite3 
    query.last(); 
    int row_count = query.at() + 1; 
    qDebug() << "getNoteCounts = " << row_count; 
} 

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

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