| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 166 人关注过本帖
标题:关于提前获得ID的方法
只看楼主 加入收藏
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:712
专家分:20
注 册:2014-1-16
结帖率:88.8%
收藏
 问题点数:20 回复次数:10 
关于提前获得ID的方法
我使用的vfP自身的DBF格式数据库表,因为软件功能的需求,我需要在添加记录前,获知表在添加记录后的ID值,ID字段的类型是自动增量的,请问怎么实现?
前天 08:59
nbwww
Rank: 8Rank: 8
等 级:贵宾
威 望:11
帖 子:348
专家分:835
注 册:2021-1-9
收藏
得分:0 
不是加1?
前天 09:04
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:712
专家分:20
注 册:2014-1-16
收藏
得分:0 
这个不对,如果加入记录前有删除的记录呢?
前天 09:13
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2272
专家分:4089
注 册:2007-4-27
收藏
得分:0 
加入前对忆有的号取最大值,然后 +1


只求每天有一丁点儿的进步就可以了
前天 09:34
nbwww
Rank: 8Rank: 8
等 级:贵宾
威 望:11
帖 子:348
专家分:835
注 册:2021-1-9
收藏
得分:0 
以下是引用fanjinyu9108在2025-4-13 09:13:10的发言:

这个不对,如果加入记录前有删除的记录呢?
那要一直记录最后一个ID号了
前天 09:40
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:712
专家分:20
注 册:2014-1-16
收藏
得分:0 
比如查询最大ID是25,现在删除最后一笔记录,最大ID变成了24了,但是生成一条新记录后,ID值变成了26了,所以用最大ID值加1的做法是不可靠的

前天 10:45
nbwww
Rank: 8Rank: 8
等 级:贵宾
威 望:11
帖 子:348
专家分:835
注 册:2021-1-9
收藏
得分:0 
以下是引用fanjinyu9108在2025-4-13 10:45:15的发言:

比如查询最大ID是25,现在删除最后一笔记录,最大ID变成了24了,但是生成一条新记录后,ID值变成了26了,所以用最大ID值加1的做法是不可靠的
所以你要增加一条记录就要登记一下新增的ID号,从这个登记的ID号加上1才是你想要的
前天 11:32
sam_jiang
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:881
专家分:1364
注 册:2021-10-13
收藏
得分:0 
回复 6楼 fanjinyu9108
那就在删除记录后,pack清理掉删除的记录,再添加记录。
尽量不要用自增量,这是很令人讨厌的一个功能。自己写个方法autoid,添加记录前用recno()获取记录数,加上1就是你的新id号。。。
前天 18:16
my2318
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:14
帖 子:304
专家分:658
注 册:2014-3-18
收藏
得分:0 
我的思路:增加一个唯一字段,新id号设置为自动加一,写入后查询唯一字段就可得到新id号,这样新id号就与记录数无关了,即使并发操作也不会产生重复的新id号

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

前天 19:07
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:火星
等 级:版主
威 望:37
帖 子:774
专家分:3010
注 册:2018-3-13
收藏
得分:0 
自增量字段确实不是什么好东西,一般设计表结构时,父表的主键和子表的外键尽量用较明确的唯一值为佳,sql server 有 newid(),my sql 有 uuid(),vfp 可用瓜哥的 getguid()。
若并发量不是特别大,实在想用也未尝不可,也并非像楼上各位所说的要自己去维护,vfp 把这个值保存在表头中,完全可以自己写个函数把它读出来,只是 cursor 就没法读表头了,只能用 GetAutoincValue() 来凑合。

这家伙很懒,啥也没留下
前天 20:37
快速回复:关于提前获得ID的方法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018088 second(s), 10 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved