qsqlite 删除行后 id不连续 自增数字怎么保持连续

在一些场合需要显示出这个自增id,并且把它作为一个普通的id给用户看。如果中间删除一行,那么id就不连续了,那么cut the crap,代码如下:


// pb删除此行
void PutChipCalibrate::on_pbDelRow_clicked()
{
    const auto &ci = ui->tableView->currentIndex();
    const int id = m_model->record(ci.row()).value(0).toInt();

    if(!ci.isValid() || ci.row()<0 || ci.row()>=m_model->rowCount()){
        
        return;
    }


    QSqlQuery sq(m_db);

    if(!sq.exec(QString("delete from %1 where id=%2").arg(tableName()).arg(id))){
        TERR <<"执行sql错误:"<<sq.lastError();
    }

    // 重新排序,seq是从0开始的
    if(!sq.exec(QString("UPDATE %1 SET id=(id-1) WHERE id>%2").arg(tableName()).arg(id)) ){
        TERR <<"执行sql错误:"<<sq.lastError();
    }
    m_model->select();
    if(!sq.exec(QString("UPDATE SQLITE_SEQUENCE SET seq=(%1-1) WHERE name = '%2'").arg(m_model->rowCount()).arg(TABLE_NAME)) ){
        TERR <<"执行sql错误:"<<sq.lastError();
    }
}


全部删除后,把seq=0即可

本文为3YL原创,转载无需联系,但请注明来自labisart.com。

原创文章不易,如果觉得有帮助,可打赏或点击右侧广告支持:

查看打赏记录

发表评论请遵守党国法律!后台审核后方可显示!
  • 最新评论
  • 总共0条评论
  • Blog v1.1© 2024 labisart.com 版权所有 | 联系:labartwork@163.com