以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于网络中应用的自动编号  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=2043)

--  作者:woodiy
--  发布时间:2009/3/6 20:40:00
--  关于网络中应用的自动编号
在网络中应用的系统,我原先设置的自动编号如下:

DataRowAdding

\'\'\'
Dim T1,T2 As String
T1 = "CK" & Format(Date.today,"yyyyMM")
T2 = "[出库单号] like \'" & T1 & "*\'and "
T2 = T2 & "[ID] < " & e.DataRow("ID")
Dim dr As DataRow = e.DataTable.Find(T2,"ID DESC")

e.DataRow("日期") = Date.today
If dr is Nothing then
   e.DataRow("出库单号") = T1 & "001"
Else
   Dim n As Integer = Cint(Right(dr("出库单号"),3))+1
   e.DataRow("出库单号") = T1 & Format(n,"000")
End If



我发现有些问题,就是当一个用户打开表格,并在增加记录且没有保存时, 另外一个用户也增加记录, 这样会出现编号相同的现象, 如果有关联表的话,就会现多个父亲的严重问题, 大家帮忙一下,看看有没有更好的办法.
--  作者:狐狸爸爸
--  发布时间:2009/3/6 21:09:00
--  
参考:

http://www.foxtable.com/dispbbs.asp?boardid=2&Id=1727
--  作者:zhanglaoer
--  发布时间:2009/3/7 0:57:00
--  

好东西,收藏


--  作者:woodiy
--  发布时间:2009/3/7 14:12:00
--  
以下是引用狐狸爸爸在2009-3-6 21:09:00的发言:
参考:

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

If e.DataRow.IsNull("产品") Then
   Return
ElseIf e.DataRow.IsNull("编号") = False AndAlso e.DataRow("编号").StartsWith(e.DataRow("产品")) Then
   Return
End If
Dim cmd1 As New SQLCommand
Dim cmd2 As New SQLCommand
Dim cmd3 As New SQLCommand
Dim Key As Integer
cmd1.C
cmd2.C
cmd3.C
cmd1.commandText = "Select [编号] From [编号] Where [产品] = \'"  & e.DataRow("产品")  & "\'"
Key = cmd1.ExecuteScalar()
cmd2.commandText = "Update [编号] Set [编号] = " & (Key + 1)  & " Where [编号] = " & Key & " And [产品] = \'" &e.DataRow("产品") & "\'"
cmd3.commandText = "Select Count(*) From [编号] Where [产品] = \'"  & e.DataRow("产品")  & "\'"
If cmd3.ExecuteScalar = 0 Then
    cmd3.commandtext = "Insert Into 编号 (产品, 编号) Values(\'" & e.DataRow("产品") & "\',1)"
    cmd3.ExecuteNonQuery
End If
Do
    If cmd2.ExecuteNonQuery() > 0 Then
        Exit Do
    Else
        Key = cmd1.ExecuteScalar()
        cmd2.commandText = "Update [编号] Set [编号] = " & (Key + 1)  & " Where [编号] = " & Key & " And [产品] = \'" &e.DataRow("产品") & "\'"
    End If
Loop
e.DataRow("编号") = e.DataRow("产品") & "-" & Format(Key,"0000")

这个代码能否使用简单一点啊,如
KP0903001
KP0903002
....


--  作者:kylin
--  发布时间:2009/3/7 17:39:00
--  
有时候,简单并不可以严密,这已经是严密之后的简单了
--  作者:woodiy
--  发布时间:2009/3/8 15:39:00
--  
我的自动编号列为父表关联表,你的这个方法好像行不通