在一些场合需要显示出这个自增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即可