Foxtable(狐表)用户栏目专家坐堂 → 老师,请教关于自动编号的重复问题


  共有2651人关注过本帖树形打印复制链接

主题:老师,请教关于自动编号的重复问题

美女呀,离线,留言给我吧!
18504175995
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:144 积分:1324 威望:0 精华:0 注册:2018/5/10 10:29:00
老师,请教关于自动编号的重复问题  发帖心情 Post By:2021/3/2 17:39:00 [只看该作者]

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

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

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


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105495 积分:536466 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/2 20:45:00 [只看该作者]


 回到顶部
美女呀,离线,留言给我吧!
18504175995
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:144 积分:1324 威望:0 精华:0 注册:2018/5/10 10:29:00
  发帖心情 Post By:2021/3/3 15:10:00 [只看该作者]

老师,OpenQQ那个代买有点复杂,我的表里还有很多类似的编号要自动出,
我有个想法不知道可行不可行,就是既然通过主键设置的编号是因为新建后没有保存所以才重复,那我可以把上面的代码加个新建后立刻保存的功能么?
也就是如下
Dim max As String
max = e.DataRow("_identify") 
e.DataRow("派车序号") = "P" & max
Tables("运输业务汇总表").Current.Save()
这样每次新建行生成新编号的同时就会自动保存,其他客户端再建就可以往下排了
我在自己机器上同时开俩表试验是没问题,不知道在不同的终端试会不会还有重复,或者这么设计会不会有什么弊端影响运行效率什么的。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105495 积分:536466 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/3 15:11:00 [只看该作者]

e.datarow.save
Dim max As String
max = e.DataRow("_identify") 
e.DataRow("派车序号") = "P" & max

 回到顶部
美女呀,离线,留言给我吧!
18504175995
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:144 积分:1324 威望:0 精华:0 注册:2018/5/10 10:29:00
  发帖心情 Post By:2021/3/3 15:50:00 [只看该作者]

好的,老师,谢谢

 回到顶部
美女呀,离线,留言给我吧!
18504175995
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:144 积分:1324 威望:0 精华:0 注册:2018/5/10 10:29:00
  发帖心情 Post By:2021/3/3 15:53:00 [只看该作者]

不过我有一点没明白,先保存后生成编号的话,那这个新编号不是就没保存上么?那这样另一端再生成是不是还会重复?

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105495 积分:536466 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/3/3 15:57:00 [只看该作者]

保存后e.DataRow("_identify") 才会生成正确的值,这值是不会重复的,所以编号也不会重复

 回到顶部
美女呀,离线,留言给我吧!
18504175995
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:144 积分:1324 威望:0 精华:0 注册:2018/5/10 10:29:00
  发帖心情 Post By:2021/3/3 16:07:00 [只看该作者]

我刚才试了下,的确不会生成重复的值了,
不过此时如果一个终端新建了一些行还没有进行手动保存,另一个终端再打开会显示多了几行空白行,编号也是空的
如果把
e.DataRow.save
这行放在代码的最后就不会
而且两个终端也不重复


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105495 积分:536466 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:144 积分:1324 威望:0 精华:0 注册:2018/5/10 10:29:00
  发帖心情 Post By:2021/3/3 16:22:00 [只看该作者]

好,我正好也同时想到了,然后我就把上下都加了保存的代码
然后测了又出现个问题, 假设A、B两个终端同时打开时序号都到100号,那么此时A先增加到了105号,
按道理来说,B这时再增加应该是从106号开始,可是我测了一下,B却先是从101号开始,然后101之后才是106,这是什么原因?

 回到顶部
总数 14 1 2 下一页