5

QSqlQuery の行数を取得しようとしています。データベース ドライバーは qsqlite です。

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

2 に答える 2

7

この行カウント コードの抽出は、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;
}
于 2015-11-24T20:33:50.253 に答える