以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  多人同时操作,编码唯一的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=86699)

--  作者:jwt
--  发布时间:2016/6/23 14:42:00
--  多人同时操作,编码唯一的问题
拟设置一个档案管理系统,管理公司档案。设计功能:在增加 行的时候,自动编号且唯一,在现有的最大编号上自动+1。为了增加录入数据时工作效率,设定多人多台电脑多个程序同时录入。我用datarow,即员工A在A电脑上的系统增加行编号是00005,这时,员工B在B电脑上再点击增加行的编号就应该是00006了。  各项代码如下,但并未实现我想要的多人多系统同时录入编码唯一这个功能。顶多是自己的系统上每增加一行编号就+1。求教
增加行按钮代码:

If CurrentTable.name = "单位设置" Then
    messagebox.show("此数据库禁止授权 , 操作取消 !")
Else
    If _usergroup = "编辑" Then
        CurrentTable.AddNew()
        CurrentTable.save
    Else
        messagebox.show("未经授权 , 操作取消 !")
    End If
End If

表datarowadding代码:

Dim max As String
Dim idx As Integer
max = e.DataTable.Compute("Max(编号)","[_Identify] <> " & e.DataRow("_Identify")) \'取得该类别的最大编号
If max > "" Then \'如果存在最大编号
    idx = CInt(max.Substring(0,5)) + 1
Else
    idx = 00001 \'否则顺序号等于1
End If
e.DataRow("编号") = Format(idx,"00000")


--  作者:jwt
--  发布时间:2016/6/23 15:43:00
--  
别沉啊..................................
--  作者:大红袍
--  发布时间:2016/6/23 15:47:00
--  

最简单的方法,这样做

 

Dim max As String
Dim idx As Integer
max = e.DataTable.SqlCompute("Max(编号)","[_Identify] <> " & e.DataRow("_Identify")) \'取得该类别的最大编号
If max > "" Then \'如果存在最大编号
    idx = CInt(max.Substring(0,5)) + 1
Else
    idx = 00001 \'否则顺序号等于1
End If
e.DataRow("编号") = Format(idx,"00000")
e.DataRow.Save

--  作者:大红袍
--  发布时间:2016/6/23 15:48:00
--  

复杂一点,这样做

 

http://www.foxtable.com/help/topics/1994.htm

 

http://www.foxtable.com/help/topics/3008.htm

 

 


--  作者:jwt
--  发布时间:2016/6/23 16:00:00
--  
谢袍哥!坚决采用简单的方式!