Как получить количество строк

Я хочу получить количество строк из последнего запроса.
я использовал size() а также numRowsAffected() функции, но ни одна из них не работает.

Я написал следующий код:

int counter = 0;
QStringList TableHeader;
QSqlQuery qry;
qry.prepare("SELECT *, (SELECT COUNT(*) FROM users) AS count FROM users");
qry.exec();

qDebug() << qry.value("count").toString(); // <<-- print the count of rows

ui->tableWidget->setRowCount(10);
ui->tableWidget->setColumnCount(3);
TableHeader << "Username" << "Password" << "Age";
ui->tableWidget->setHorizontalHeaderLabels(TableHeader);
while (qry.next()) {
ui->tableWidget->setItem(counter, 0, new QTableWidgetItem(qry.value("username").toString()));
ui->tableWidget->setItem(counter, 1, new QTableWidgetItem(qry.value("password").toString()));
ui->tableWidget->setItem(counter, 2, new QTableWidgetItem(qry.value("age").toString()));
ui->tableWidget->item(counter, 0)->setData(Qt::UserRole, qry.value("id").toString());
counter++;
}

Но, к сожалению, это не работает нормально и выдает ошибку QSqlQuery::value: not positioned on a valid record,

Я хочу получить количество строк, используя запрос или функцию.

3

Решение

qry.size() не поддерживается с SQLite. QSqlQuery::last () извлекает последнюю запись в результате, если она доступна, и помещает запрос в извлеченную запись. После звонка last() Вы можете получить индекс последней записи и расположить запрос перед первой записью, используя first() а также previous() :

int numberOfRows = 0;
if(qry.last())
{
numberOfRows =  qry.at() + 1;
qry.first();
qry.previous();
}
2

Другие решения


По вопросам рекламы [email protected]