如何获取表中最后一条记录的主键并生成新主键
Access表单添加记录时自动生成递增WONumber主键的解决方案
原代码的问题在于直接编辑了查询到的最后一条记录,导致旧记录被修改,而非生成新记录。正确的逻辑应该是先获取最后一条记录的编号,计算出新编号后,新增一条记录并将新编号赋值给它。
修正后的代码如下:
Dim rs As Recordset Dim lastWO As String Dim newWO As String Dim numPart As Integer ' 获取最后一条记录的WONumber Set rs = CurrentDb.OpenRecordset("SELECT TOP 1 WONumber FROM tblWorkOrders ORDER BY WONumber DESC") If Not rs.EOF Then lastWO = rs.Fields("WONumber").Value ' 提取数值部分并加1 numPart = CInt(Mid(lastWO, 3)) + 1 ' 拼接新的WONumber,确保数值部分补零(比如WO1003→WO1004) newWO = Left(lastWO, 2) & Format(numPart, "0000") ' 这里的0000可以根据实际位数调整 Else ' 如果表为空,生成初始编号,比如WO1001 newWO = "WO1001" End If rs.Close ' 打开表的记录集准备新增记录 Set rs = CurrentDb.OpenRecordset("tblWorkOrders", dbOpenDynaset) rs.AddNew rs.Fields("WONumber").Value = newWO ' 这里可以添加其他字段的赋值,比如rs.Fields("其他字段").Value = 对应值 rs.Update rs.Close Set rs = Nothing
关键说明:
- 先单独查询获取最后一条记录的编号,不直接编辑这条记录
- 处理表为空的边界情况,避免报错
- 使用
Format函数确保数值部分的位数一致(比如保持4位数字) - 调用
rs.AddNew创建新记录,赋值后执行rs.Update保存
内容的提问来源于stack exchange,提问作者Rich G
相关产品推荐
相关产品推荐

