以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  帮我看看这样的自动编号有问题吗?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=169401)

--  作者:304376480
--  发布时间:2021/6/15 12:20:00
--  帮我看看这样的自动编号有问题吗?
老师您好!
在 DataRowAdding 事件里调用函数,
e.DataRow("客户ID") = Functions.Execute("No123456","客户","客户ID","","000000")

(为什么别人在使用时会出现相同的 ID 号,我自己反复测试都没有出现过相同的号码,是不是不能写在这个事件中?)
可以帮我优化一下代码吗?谢谢

\'单据自动编号函数代码
Dim tab As String = Args(0) \'表名
Dim dc As String = Args(1) \'列名
Dim pre As String = Args(2) \'编号的前缀代码
Dim mat As String = Args(3) \'格式
Dim idx As Integer
Dim max As String = DataTables(Tab).Compute("max(" & dc & ")", dc & " Like \'" & pre & "%\'")

If max > "" Then \'如果存在最大单据编号
    idx = CInt(max.Substring(pre.Length)) + 1 \'获得最大单据编号的后四位顺序号,并加1
Else
    idx = 1 \'否则顺序号等于1
End If
Return pre & Format(idx,mat)

--  作者:有点蓝
--  发布时间:2021/6/15 13:37:00
--  
试试放到DataRowAdded事件。如果是多用户联机使用的,这种用法是会有重复的。可以参考:http://www.foxtable.com/webhelp/topics/3008.htm
--  作者:304376480
--  发布时间:2021/6/15 17:42:00
--  
是单机软件,仔细想了想,上面的代码如果没有问题的话,唯一的可能就是,客户在一台电脑上启动了两个程序,做了相同的新增行操作!谢谢老师指导!

如何禁止客户在一台电脑上打开两个相同的程序呢?

--  作者:有点蓝
--  发布时间:2021/6/15 20:18:00
--  
参考:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=122824&replyID=826534&skin=1

http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=21111