3

なんらかの (まあ、パフォーマンス上の) 理由で、Qt の「モデル」クラスはデータベースから 256 行しかフェッチしないため、行をレコードセットの最後に追加したい場合は、どうやら、次の行に沿って何かを行う必要があります。

while (model->canFetchMore()) {
  model->fetchMore();
}

これは機能し、後で行うmodel->insertRow(model->rowCount())と、実際には、レコードセットの最後の行の後に行が追加されます。

この動作に関連する他のさまざまな問題があります。たとえば、モデルに行を挿入または削除すると、それをレンダリングするビューが再描画されて 256 行しか表示されず、欠落している行が再度フェッチされることを手動で確認する必要があります。

この動作を完全にバイパスする方法はありますか? 私のモデルは、たとえば 1000 行以上を表示する可能性はほとんどありませんが、それらの 1000 行を取得するのは王様の苦痛のようです。大規模なレコードセットを処理する必要がある場合、これは優れたパフォーマンスの最適化であることは理解していますが、私にとってはメリットではなく負担です。

モデルは書き込み可能である必要があるため、QSqlRelationalTableModel の代わりに QSqlQueryModel を単純に使用することはできません。

4

1 に答える 1

4

QSqlTableModelドキュメントから:

bool QSqlTableModel::insertRecord (int 行、const QSqlRecord & レコード)

行の後にレコードを挿入します。行が負の場合、レコードは末尾に追加されます。 内部で insertRows() および setRecord() を呼び出します。

行を挿入できた場合は true、そうでない場合は false を返します。

insertRows() および removeRows() も参照してください。

まだ試していませんが、最後にレコードを挿入するために完全なデータセットを取得する必要はないと思います。

于 2012-05-26T01:46:24.843 に答える