gpt4 book ai didi

c++ - QSqlQuery 中的 next() 返回表中的最后一条记录

转载 作者:行者123 更新时间:2023-11-28 06:17:30 30 4
gpt4 key购买 nike

当点击搜索按钮时,它会显示表格中的第一条记录;

void EditEntry::on_search_button_clicked() {
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("database.db");
bool ok = db.open();
if (ok) {

QSqlQuery query1("SELECT * FROM table_name WHERE last_name LIKE '%Nana%'");
if (query1.first()) {
//show first record in the table where last name like Nana
}
}

我试图通过单击这样的按钮使查询移动到表中的下一条记录;

void EditEntry::on_next_button_clicked() {
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("database.db");
bool ok = db.open();
if (ok) {
QSqlQuery query1("SELECT * FROM table_name WHERE last_name LIKE '%Nana%'");
if (query1.isActive()) {
while (query1.next()) {
//show the next record in the table with last name like Nana
}
}

并且像这样显示之前名字为'Nana'的记录;

void EditEntry::on_previous_button_clicked() {
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("database.db");
bool ok = db.open();
if (ok) {
QSqlQuery query1("SELECT * FROM table_name WHERE last_name LIKE '%Nana%'");
if (query1.isActive()) {
while (query1.previous()) {
//show previous record in the table where last name like Nana
}
}

on_search_button_clicked() 可以很好地显示姓氏为“Nana”的第一条记录。 on_next_button_clicked() 显示表中名称为“Nana”的最后一条记录,而不是第一条之后的下一条记录(该表有 3 条姓氏为“Nana”的记录)。 on_previous_button_clicked() 按钮根本不起作用,即使我希望它显示姓氏如“Nana”的上一条记录,它也不会显示任何内容。如何让这些按钮按预期工作?

附言;我想要的是,每当单击 on_next_button_clicked() 时,它应该继续显示下一条记录,直到到达表中的最后一条记录。

最佳答案

next() 只能在 QSqlQuery 的一个实例上工作,但在 on_search_button_clicked() 结束时,on_next_button_clicked() on_previous_button_clicked() 您丢弃了 QSqlQuery 的实例(以及 QSqlDatabase)。

我想你可以在 EditEntry 类中存储一个偏移变量 int offset_ = 0 然后做类似的事情

void EditEntry::on_next_button_clicked() {
offset_ += 1;

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("database.db");
bool ok = db.open();
if (ok) {
QString sql = QString("SELECT * FROM table_name WHERE last_name LIKE '%Nana%' LIMIT ") + QString::number(offset_) + QString(", 1");
QSqlQuery query1(sql);
if (query1.isActive()) {
while (query1.first()) {
//show the next record in the table with last name like Nana
}
}
}
}

还有一个:

void EditEntry::on_previous_button_clicked() {
offset_ -= 1;

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("database.db");
bool ok = db.open();
if (ok) {
QString sql = QString("SELECT * FROM table_name WHERE last_name LIKE '%Nana%' LIMIT ") + QString::number(offset_) + QString(", 1");
QSqlQuery query1(sql);
if (query1.isActive()) {
while (query1.first()) {
//show the next record in the table with last name like Nana
}
}
}
}

关于c++ - QSqlQuery 中的 next() 返回表中的最后一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29972913/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com