QT 解决QSQLITE数据库删除数据后,主键出现不连续或冲突

在对数据库进行操作时,经常会用到增删改查操作,在删除某条数据时,会出现主键编号不连续问题,所以我用了一个for循环来重新设置剩余数据的主键编号,防止对数据库操作时的主键不连续和主键冲突问题。

                                           

对于上图的数据库,删除第4行,会出现如下图所示的主键编号不连续,如果此时新建一条数据,编号会自动编为4,如右图所示,就会出现主键冲突。

解决办法:

    void shujuzhongxin::sjdelete()
    {

        int curRow = tableView->currentIndex().row();//tableView为上图中的表格

        int ok = QMessageBox::warning(this,tr("删除当前行!"),
                                          tr("确定删除当前行吗?"),
                                          QMessageBox::Yes,QMessageBox::No);
            if(ok == QMessageBox::Yes)
                hzinfoModel->removeRow(curRow);//hzinfoModel为自己创建的患者信息数据库
                hzinfoModel->submitAll(); //提交,在数据库中删除该行

                for (int i=0;i<hzinfoModel->rowCount();i++)
                {
                    QSqlRecord record = hzinfoModel->record(i);
                    record.setValue(0,i);//设置第0列,即编号列数值为i
                    hzinfoModel->setRecord(i, record);
                }
                hzinfoModel->submitAll(); //主键重新排序后提交
    }

猜你喜欢

转载自blog.csdn.net/L1114187703/article/details/105973161