以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]关于联网多人增加行自动编号的代码的优化请教 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=109519) |
-- 作者:jwt -- 发布时间:2017/11/14 8:55:00 -- [求助]关于联网多人增加行自动编号的代码的优化请教 我设置了个程序,增加行时,编号列自动赋值(在最大号码上+1),保证编号唯一。程序是联网的,可多人同时操作。但是,当多人同时增加行时,因为网络延迟吧,编号列的值会重复,比如,有两个0002的编号,相关代码贴出如下,麻烦大神们予以建议或优化,幼狐感激不尽!
一、增加行按钮代码: If CurrentTable.name = "单位设置" Or CurrentTable.name = "历史库" Then
二、表内 DataRowAdding 的代码 Dim max As String |
-- 作者:有点甜 -- 发布时间:2017/11/14 9:05:00 -- 1、代码要写到dataRowAdded事件,不是ing事件。
2、看看 http://www.foxtable.com/webhelp/scr/1994.htm
http://www.foxtable.com/webhelp/scr/3008.htm
3、你的编号,不一定要连续,你可以把_Identify作为编号的一部分,这样能区别唯一。
|
-- 作者:jwt -- 发布时间:2017/11/14 9:27:00 -- 这是个档案系统,档案编号就是简单的从00001一直增加到99999这种,我把代码写到ed也不行,网络延迟是硬伤。 |
-- 作者:有点蓝 -- 发布时间:2017/11/14 9:59:00 -- 要先保存,把e.DataRow.Save放到dataRowAdded事件代码第一行 保存后直接取当前行的_Identify就可以了,没有必要再使用compute计算
[此贴子已经被作者于2017/11/14 10:00:07编辑过]
|
-- 作者:有点甜 -- 发布时间:2017/11/14 10:40:00 -- 以下是引用jwt在2017/11/14 9:27:00的发言:
这是个档案系统,档案编号就是简单的从00001一直增加到99999这种,我把代码写到ed也不行,网络延迟是硬伤。
那就加入_Identify处理,如生产 00001-001、00002-002、00002-002 这样的编号,即便前面相同,后面都不同。
目前这个问题,除非你用openQQ,否则延时、并发的问题都不能解决。 |
-- 作者:qwz405 -- 发布时间:2018/1/11 14:49:00 -- 老师,我在DataColChanged输入以下代码,在网络上使用还是会出现重复编号,要如何处理? Select Case e.DataCol.name Case "创建日期" \'由创建日期自动生成计划明细编码 If e.DataRow.IsNull("创建日期") Then e.DataRow("编码") = Nothing Else If e.DataRow.IsNull("编码") Then Dim d As Date = e.DataRow("创建日期") Dim bh As String = Format(d,"yyMM") Dim str As String = Format(e.DataRow("_Identify"),"00000") e.DataRow("计划明细编码") = "JH" & bh & "-" & str End If End If End Select |
-- 作者:有点甜 -- 发布时间:2018/1/11 14:53:00 -- Select Case e.DataCol.name e.DataRow.Save \'保存之后,才会获取_Identify值
|
-- 作者:qwz405 -- 发布时间:2018/1/11 14:54:00 -- 谢谢老师~ [此贴子已经被作者于2018/1/11 15:01:34编辑过]
|