qsqlQuery 中的 next() 返回表中的最后一条记录

next() in QSqlQuery returns the last record in the table

本文关键字:最后 一条 记录 返回 中的 next qsqlQuery      更新时间:2023-10-16

单击搜索按钮时,它会像这样显示表中的第一条记录;

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
            }
} 

并像这样显示名称为"娜娜"的上一张记录;

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()通过显示姓氏(如"娜娜")的第一条记录来很好地工作。on_next_button_clicked()显示表中名称为"Nana"的最后一条记录,而不是第 1 条之后的下一条记录(表中有 3 条姓氏为"Nana"的记录)。on_previous_button_clicked()按钮根本不起作用,即使我希望它显示姓氏(如"娜娜")的上一条记录,它也不会显示任何内容。如何让这些按钮按预期工作?

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

next()只能处理QSqlQuery的一个实例,但在on_search_button_clicked()结束时,on_next_button_clicked()on_previous_button_clicked()丢弃QSqlQuery的实例(以及QSqlDatabase)。

我认为您可以将偏移变量int offset_ = 0存储在EditEntry类中,然后执行类似操作

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
            }
        }
    }
}