以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 老师,请教关于自动编号的重复问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=161018) |
-- 作者:18504175995 -- 发布时间:2021/3/2 17:39:00 -- 老师,请教关于自动编号的重复问题 某表设置了新建行时自动生成一列序列号,要求序列号唯一,不能重复 但是当同时多个终端新增时,自动生成的编号由于不能保证建行后马上保存入库,所以无论是按照日期加序号,还是按照identify序号生成, 保存后总会出现序号重复情况,请问老师,代码要怎么写或者通过什么设置才能从根本上解决这个问题? 下图是我按照主键生成的,代码如下
|
-- 作者:有点蓝 -- 发布时间:2021/3/2 20:45:00 -- 参考:http://www.foxtable.com/webhelp/topics/3008.htm |
-- 作者:18504175995 -- 发布时间:2021/3/3 15:10:00 -- 老师,OpenQQ那个代买有点复杂,我的表里还有很多类似的编号要自动出, 我有个想法不知道可行不可行,就是既然通过主键设置的编号是因为新建后没有保存所以才重复,那我可以把上面的代码加个新建后立刻保存的功能么? 也就是如下 Dim max As String max = e.DataRow("_identify") e.DataRow("派车序号") = "P" & max Tables("运输业务汇总表").Current.Save() 这样每次新建行生成新编号的同时就会自动保存,其他客户端再建就可以往下排了 我在自己机器上同时开俩表试验是没问题,不知道在不同的终端试会不会还有重复,或者这么设计会不会有什么弊端影响运行效率什么的。 |
-- 作者:有点蓝 -- 发布时间:2021/3/3 15:11:00 -- e.datarow.save Dim max As String max = e.DataRow("_identify") e.DataRow("派车序号") = "P" & max |
-- 作者:18504175995 -- 发布时间:2021/3/3 15:50:00 -- 好的,老师,谢谢 |
-- 作者:18504175995 -- 发布时间:2021/3/3 15:53:00 -- 不过我有一点没明白,先保存后生成编号的话,那这个新编号不是就没保存上么?那这样另一端再生成是不是还会重复? |
-- 作者:有点蓝 -- 发布时间:2021/3/3 15:57:00 -- 保存后e.DataRow("_identify") 才会生成正确的值,这值是不会重复的,所以编号也不会重复 |
-- 作者:18504175995 -- 发布时间:2021/3/3 16:07:00 -- 我刚才试了下,的确不会生成重复的值了, 不过此时如果一个终端新建了一些行还没有进行手动保存,另一个终端再打开会显示多了几行空白行,编号也是空的 如果把 e.DataRow.save 这行放在代码的最后就不会 而且两个终端也不重复 |
-- 作者:有点蓝 -- 发布时间:2021/3/3 16:12:00 -- 那就同时加上吧 e.datarow.save
Dim max As String max = e.DataRow("_identify") e.DataRow("派车序号") = "P" & max e.datarow.save |
-- 作者:18504175995 -- 发布时间:2021/3/3 16:22:00 -- 好,我正好也同时想到了,然后我就把上下都加了保存的代码 然后测了又出现个问题,
假设A、B两个终端同时打开时序号都到100号,那么此时A先增加到了105号, 按道理来说,B这时再增加应该是从106号开始,可是我测了一下,B却先是从101号开始,然后101之后才是106,这是什么原因?
|