QSqlQuery query;
QString queryText("SELECT * FROM section");
query.exec(queryText);
qDebug() << query.size(); //always -1
while (query.next()) qDebug() << query.value(0).toString(); //got 16 records
メソッドsize()
は常に -1 を返します。助けてください。ありがとう。
query.size()
SQLite ではサポートされていません。ただし、回避策を使用して行数を取得できます。QSqlQuery::last ()
可能な場合、結果の最後のレコードを取得し、取得したレコードにクエリを配置します。呼び出した後、最後のレコードのインデックスを取得し、 andlast()
を使用して最初のレコードの前にクエリを配置できます。first()
previous()
int numberOfRows = 0;
if(qry.last())
{
numberOfRows = qry.at() + 1;
qry.first();
qry.previous();
}
ドキュメントから:
結果のサイズ (返される行数) を返します。サイズを特定できない場合、またはデータベースがクエリ サイズに関する情報のレポートをサポートしていない場合は -1 を返します。非 SELECT ステートメント (isSelect() が false を返す) の場合、size() は -1 を返すことに注意してください。クエリがアクティブでない場合 (isActive() が false を返す)、-1 が返されます。
非 SELECT ステートメントによって影響を受ける行数を確認するには、numRowsAffected() を使用します。
http://qt-project.org/doc/qt-4.8/qsqlquery.html#size
クエリisSelect
はアクティブですが、SQLite は、クエリのサイズが直接利用できないデータベースの 1 つです。
これを証明するには、たとえば次のように呼び出します。
qDebug() <<db.driver()->hasFeature(QSqlDriver::QuerySize);
戻るfalse
私自身のために、私はこの機能を使用します
int sqlSize(QSqlQuery query)
{
int initialPos = query.at();
// Very strange but for no records .at() returns -2
int pos = 0;
if (query.last())
pos = query.at() + 1;
else
pos = 0;
// Important to restore initial pos
query.seek(initialPos);
return pos;
}