以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  老师,请教关于自动编号的重复问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=161018)

--  作者:18504175995
--  发布时间:2021/3/2 17:39:00
--  老师,请教关于自动编号的重复问题
某表设置了新建行时自动生成一列序列号,要求序列号唯一,不能重复
但是当同时多个终端新增时,自动生成的编号由于不能保证建行后马上保存入库,所以无论是按照日期加序号,还是按照identify序号生成,
保存后总会出现序号重复情况,请问老师,代码要怎么写或者通过什么设置才能从根本上解决这个问题?
下图是我按照主键生成的,代码如下

图片点击可在新窗口打开查看此主题相关图片如下:1cd3b3b490b62cd350385d85b1e2591.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:10b1edf61e25526a53ce8e24530a122.png
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间: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,这是什么原因?