Foxtable(狐表)用户栏目专家坐堂 → 求高手给看下有什么问题?


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

主题:求高手给看下有什么问题?

帅哥哟,离线,有人找我吗?
jnletao
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:936 积分:7719 威望:0 精华:0 注册:2013/7/7 13:37:00
求高手给看下有什么问题?  发帖心情 Post By:2013/12/4 8:56:00 [只看该作者]

以下代码用于网络多用户下的唯一编号,不要求可以连续或补号,但一定要保证唯一不重复。但实际应用中还是发现有多次重复。找不出原因!
请高手指正到底哪里出了错?

CutRecord_BeforeAddDataRow

 

For Each dr As DataRow In e.DataTable.DataRows

    If dr.RowState = DataRowState.Added Then

        MessageBox.Show("请先保存或撤销当前行,才能新增!","【裁剪记录单】提示", MessageBoxButtons.OK ,MessageBoxIcon.Information)

        e.Cancel = True

    End If

Next



CutRecord_DataRowAdded

 

Dim d As Date = Date.Today

Dim y As Integer = d.Year

Dim m As Integer = d.Month

Dim Days As Integer = Date.DaysInMonth(y,m)

Dim fd As Date = New Date(y,m,1) '获得该月的第一天

Dim ld As Date = New Date(y,m,Days) '获得该月的最后一天

Dim bh As String ="CUT" & Format(d,"yyMM") '生成编号的前6位,4位年,2位月.

If e.DataRow("CutRecordID").StartsWith(bh) = False '如果编号的前6位不符

    Dim max As String

    Dim idx As Integer

    max = e.DataTable.Compute("Max(CutRecordID)","CutDate >= #" & fd & "# And CutDate <= #" & ld & "#") '取得该月的最大编号

    If max > "" Then '如果存在最大编号

        idx = CInt(max.Substring(8,3)) + 1 '获得最大编号的后三位顺序号,并加1

    Else

        idx = 1 '否则顺序号等于1

    End If

    e.DataRow("CutRecordID") = bh & "-" & Format(idx,"000")

End If




CutRecord_BeforeSaveDataRow

 

Dim dr As DataRow = e.DataRow

If dr.RowState <> DataRowState.Added Then '如果不是新增行

    Return '那么返回

Else

    '==========

    Dim CCutRecordID As String

    Dim cmd As New SQLCommand

    cmd.C

    cmd.CommandText = "Select [CutRecordID] From {CutRecord} Where [CutRecordID] = '" & e.DataRow("CutRecordID") & "'"

    CCutRecordID = cmd.ExecuteScalar()

    '==========

    If CCutRecordID IsNot Nothing Then

        Dim d As Date = Date.Today

        Dim y As Integer = d.Year

        Dim m As Integer = d.Month

        Dim Days As Integer = Date.DaysInMonth(y,m)

        Dim fd As Date = New Date(y,m,1) '获得该月的第一天

        Dim ld As Date = New Date(y,m,Days) '获得该月的最后一天

        Dim bh As String ="CUT" & Format(d,"yyMM") '生成编号的前6位,4位年,2位月.

       

        Dim max As String

        Dim idx As Integer

        cmd.CommandText = "Select Max([CutRecordID]) From {CutRecord} Where CutDate >= '" & fd & "' And CutDate <= '" & ld & "'"

        max = cmd.ExecuteScalar() '取得该月的最大编号

        ' MessageBox.Show("max" & max)

        If max > "" Then '如果存在最大编号

            idx = CInt(max.Substring(8,3)) + 1 '获得最大编号的后三位顺序号,并加1

        Else

            idx = 1 '否则顺序号等于1

        End If

        e.DataRow("CutRecordID") = bh & "-" & Format(idx,"000")

    End If

    '==========

End If


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/12/4 9:04:00 [只看该作者]


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


加好友 发短信
等级:四尾狐 帖子:936 积分:7719 威望:0 精华:0 注册:2013/7/7 13:37:00
  发帖心情 Post By:2013/12/4 9:36:00 [只看该作者]

帮助上看了,只是想请看下我这段代码有什么问题?

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/12/4 9:38:00 [只看该作者]

单纯看代码,没看出问题,没有例子测试分析不好说.

你直接按照帮助的做肯定不会出问题.

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/12/4 20:38:00 [只看该作者]

 用max重复的可能性虽小,但肯定会有重复的。

 你试试用_Identify + 前缀来做编号吧。肯定是唯一的。

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251048 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/12/5 8:37:00 [只看该作者]

多用户不能这样编码的,应该:

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

 


 回到顶部