2013-06-08 1 views
2

를, 데이터베이스 드라이버는가져 오는 행 QSqlQuery에서 계산하지만, 가지고 -1 나는 QSqlQuery의 행 수를 얻으려고

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(); 
} 

여기에 쿼리 선택 쿼리입니다 qsqlite,하지만 난 아직 도착 -1;

model->rowCount()을 사용하는 경우 표시되는 값 (예 : 256) 만 선택 카운트 (*)는 120k 결과를 반환합니다.

무엇이 잘못 되었나요?

답변

4

documentation는 말한다 :

반환 ... -1 크기를 결정할 수없는 경우 또는 데이터베이스가 쿼리 크기에 대한보고 정보를 지원하지 않는 경우.

SQLite는 실제로이 기능을 지원하지 않습니다.

120k 레코드를 캐싱하는 것은 그리 효율적이지 않습니다 (아무도 모든 것을 보지 않을 것입니다). 당신은 어떻게 든 그들을 관리 가능한 크기로 결과를 얻기 위해 필터링해야합니다.

2

이 행 카운트 코드 추출은 SQLite3 기반 테이블에서 작동하며 특정 SQLite 버전과 관련된 "fetchMore"문제도 처리합니다.

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; 
} 
관련 문제