Foxtable(狐表)用户栏目专家坐堂 → 还是自动编号的问题


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

主题:还是自动编号的问题

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


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
还是自动编号的问题  发帖心情 Post By:2014/3/5 20:17:00 [只看该作者]

我在BeforesaveDatarow事件中全部代码如下,我想让所有行在保存前都自动给它一个编号,但是用以下代码会出现重复编号,为什么?怎么改呢?

具体情况是这样的:在打开项目的时候,根据不同用户组加载不同的数据,这些数据都在同一个表里;现在问题是同一个用户组生产的编号是不重复的,而不同用户组之前的编号则是会重复的,假如我有5个用户组,数据的初始编号是001,那么就有5个001的编号,请问这样的问题该怎么办呢?



Dim yh As DataRow = DataTables("User_info").Find("User_Name = '" & _username & "'" ) '获取当前用户信息
'If yh IsNot Nothing Then
    '退出前删除空办单;
    e.DataTable.DeleteFor("[Customer] Is Null and [Style_No] is null and [size] is null and [color] is null and [Follow_QA] = '" & yh("FullName") & "'") '删除空行
    Dim dr1 As DataRow = DataTables("scheduling").Find("([排单顺序] Is Null or [Sewing_Team] Is Null or [sample_state] Is Null ) And [Follow_QA] = '" & yh("FullName") & "'") ' 找出当前用户出办日期为空,车缝组别,样办状态的办单;
    Dim i As Integer = Tables("scheduling").Findrow("([排单顺序] Is Null or [Sewing_Team] Is Null or [sample_state] Is Null ) and [Follow_QA] = '" & yh("FullName") & "'")  '找出当前用户出办日期为空的办单行的位置;
    If e.DataRow.RowState <> DataRowState.Added And e.DataRow.RowState <> DataRowState.Modified  Then
        Return
    End If
    If dr1 Is Nothing Then    '如果没有找到当前用户出办日期为空的办单,则保存当前排期,并给出新的内部办单号
        '**************************设定办单号为自动编号*******************************
        If e.DataRow.IsNull("Inside_SRS") Then
            Dim d As Date = e.DataRow("input_date")
            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 = Format(d,"yyMM") '生成编号的前6位,4位年,2位月.
            If e.DataRow("Inside_SRS").StartsWith(bh) = False '如果编号的前6位不符
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.Compute("Max(Inside_SRS)","Input_date >= #" & fd & "# And Input_date <= #" & ld & "# And [_Identify] <> " & e.DataRow("_Identify")) '取得该月的最大编号
                If max > "" Then '如果存在最大编号
                    idx = CInt(max.Substring(7,4)) + 1 '获得最大编号的后四位顺序号,并加1
                Else
                    idx = 1 '否则顺序号等于1
                End If
                e.DataRow("Inside_SRS") ="BR" & bh & "-" & Format(idx,"0000")
            End If
        End If
    Else  '否则需要补充【出办日期】与【车缝组别】才能保存,如果【样办状态】为空将会出现无法加载的情况
        msgbox("办单号:" & dr1("SRS_No") & ",款号: " & dr1("Style_No") & "的【出办日期】,【样办状态】及【车缝组别】不能为空,请补充完毕后重新保存;")
        e.Cancel = True
        Tables("scheduling").Position = i
    End If
    '
'End If

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


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

 如果你是用2014版的话,保存之前,先去获取后台数据库里最大的编号

 

 max = e.DataTable.Compute("Max(Inside_SRS)","Input_date >= #" & fd & "# And Input_date <= #" & ld & "# And [_Identify] <> " & e.DataRow("_Identify")) '取得该月的最大编号

 

 改成

 

 max = e.DataTable.SqlCompute("Max(Inside_SRS)","Input_date >= #" & fd & "# And Input_date <= #" & ld & "# And [_Identify] <> " & e.DataRow("_Identify")) '取得该月的最大编号

 

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


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


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2014/3/5 21:22:00 [只看该作者]

丰常感谢,明天再去测试一下;但是我担心会不会随着数据量的增加,导致保存的速度越来越慢?

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


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

以下是引用xvkewen在2014-3-5 21:22:00的发言:
丰常感谢,明天再去测试一下;但是我担心会不会随着数据量的增加,导致保存的速度越来越慢?

 

但是没有办法的,因为你的情况是多用户使用,必须这样才能获取到最新的编号的。


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


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

 或者你用列 前缀 + _Identify 列做编号,这样就不需要获取最大值了。

 

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


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


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2014/3/5 22:24:00 [只看该作者]

我们用的版本是2013的,还没有SQLcommad属性,除了这个和 _Identify列,还没有没有别办法?

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


加好友 发短信
等级:二尾狐 帖子:593 积分:5562 威望:0 精华:0 注册:2012/6/29 19:11:00
  发帖心情 Post By:2014/3/7 20:35:00 [只看该作者]

还有别的什么办法吗?

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


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

以下是引用xvkewen在2014-3-7 20:35:00的发言:
还有别的什么办法吗?

 

有办法,你用sql语句代替sqlcompute的功能就行了 http://www.foxtable.com/help/topics/0696.htm

 

参考例子 http://www.foxtable.com/help/topics/1994.htm

 


 回到顶部