注册 登录
编程论坛 VFP论坛

关于提前获得ID的方法

fanjinyu9108 发布于 昨天 08:59, 140 次点击
我使用的vfP自身的DBF格式数据库表,因为软件功能的需求,我需要在添加记录前,获知表在添加记录后的ID值,ID字段的类型是自动增量的,请问怎么实现?
9 回复
#2
nbwww昨天 09:04
不是加1?
#3
fanjinyu9108昨天 09:13
这个不对,如果加入记录前有删除的记录呢?
#4
wengjl昨天 09:34
加入前对忆有的号取最大值,然后 +1

#5
nbwww昨天 09:40
以下是引用fanjinyu9108在2025-4-13 09:13:10的发言:

这个不对,如果加入记录前有删除的记录呢?
那要一直记录最后一个ID号了
#6
fanjinyu9108昨天 10:45
比如查询最大ID是25,现在删除最后一笔记录,最大ID变成了24了,但是生成一条新记录后,ID值变成了26了,所以用最大ID值加1的做法是不可靠的

#7
nbwww昨天 11:32
以下是引用fanjinyu9108在2025-4-13 10:45:15的发言:

比如查询最大ID是25,现在删除最后一笔记录,最大ID变成了24了,但是生成一条新记录后,ID值变成了26了,所以用最大ID值加1的做法是不可靠的
所以你要增加一条记录就要登记一下新增的ID号,从这个登记的ID号加上1才是你想要的
#8
sam_jiang昨天 18:16
回复 6楼 fanjinyu9108
那就在删除记录后,pack清理掉删除的记录,再添加记录。
尽量不要用自增量,这是很令人讨厌的一个功能。自己写个方法autoid,添加记录前用recno()获取记录数,加上1就是你的新id号。。。
#9
my2318昨晚 19:07
我的思路:增加一个唯一字段,新id号设置为自动加一,写入后查询唯一字段就可得到新id号,这样新id号就与记录数无关了,即使并发操作也不会产生重复的新id号

[此贴子已经被作者于2025-4-13 19:08编辑过]

#10
csyx昨晚 20:37
自增量字段确实不是什么好东西,一般设计表结构时,父表的主键和子表的外键尽量用较明确的唯一值为佳,sql server 有 newid(),my sql 有 uuid(),vfp 可用瓜哥的 getguid()。
若并发量不是特别大,实在想用也未尝不可,也并非像楼上各位所说的要自己去维护,vfp 把这个值保存在表头中,完全可以自己写个函数把它读出来,只是 cursor 就没法读表头了,只能用 GetAutoincValue() 来凑合。
1