在对数据库进行操作时,经常会用到增删改查操作,在删除某条数据时,会出现主键编号不连续问题,所以我用了一个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(); //主键重新排序后提交
}