Foxtable(狐表)用户栏目专家坐堂 → [求助]不重复编码问题


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

主题:[求助]不重复编码问题

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


加好友 发短信
等级:一尾狐 帖子:463 积分:4163 威望:0 精华:0 注册:2011/4/5 16:54:00
[求助]不重复编码问题  发帖心情 Post By:2021/9/28 16:16:00 [只看该作者]

在生成不重复编码是时,使用SQLCompute,有增加多行出现编码重复的问题;使用Compute,如后台数据没有被加载,出现新增编码与后台数据重复的问题。因项目有批量打印条码的需求。
求老师指点,能否先判断当前表(条码表)是否存在 “组别”=_UserAdmin and "组编码"=_UserPlace 的行,如果不存在,则执行

Select e.DataCol.Name
    Case "组别","组编码"
        If e.DataRow.IsNull("组别") OrElse e.DataRow.IsNull("组编码") Then
            e.DataRow("条码") = Nothing
        Else
            Dim bh As String = e.DataRow("组别") & e.DataRow("组编码")  '生成编号的前缀
            If e.DataRow("条码").StartsWith(bh) = False '如果单据编号前缀不符
                Dim max As String
                Dim idx As Integer
                Dim flt As String
                flt = "组别 = '"& e.DataRow("组别") & "' And 组编码 = '"& e.DataRow("组编码") & "' And [_Identify] <> " & e.DataRow("_Identify")
                max = e.DataTable.SQLCompute("Max(条码)",flt) '取得该月的相同工程代码的最大单据编号
                If max > "" Then '如果存在最大单据编号
                    idx = CInt(max.Substring(11,4)) + 1 '获得最大单据编号的后四位顺序号,并加1
                Else
                    idx = 1 '否则顺序号等于1
                End If
                e.DataRow("条码") = bh & Format(idx,"0000")
            End If
        End If
End Select

否则,执行
Select e.DataCol.Name
    Case "组别","组编码"
        If e.DataRow.IsNull("组别") OrElse e.DataRow.IsNull("组编码") Then
            e.DataRow("条码") = Nothing
        Else
            Dim bh As String = e.DataRow("组别") & e.DataRow("组编码")  '生成编号的前缀
            If e.DataRow("条码").StartsWith(bh) = False '如果单据编号前缀不符
                Dim max As String
                Dim idx As Integer
                Dim flt As String
                flt = "组别 = '"& e.DataRow("组别") & "' And 组编码 = '"& e.DataRow("组编码") & "' And [_Identify] <> " & e.DataRow("_Identify")
                max = e.DataTable.Compute("Max(条码)",flt) '取得该月的相同工程代码的最大单据编号
                If max > "" Then '如果存在最大单据编号
                    idx = CInt(max.Substring(11,4)) + 1 '获得最大单据编号的后四位顺序号,并加1
                Else
                    idx = 1 '否则顺序号等于1
                End If
                e.DataRow("条码") = bh & Format(idx,"0000")
            End If
        End If
End Select


[此贴子已经被作者于2021/9/28 16:36:04编辑过]

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


加好友 发短信
等级:超级版主 帖子:107861 积分:548662 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/28 16:19:00 [只看该作者]

生成条码后马上保存

                max = e.DataTable.SQLCompute("Max(条码)",flt) '取得该月的相同工程代码的最大单据编号
                If max > "" Then '如果存在最大单据编号
                    idx = CInt(max.Substring(11,4)) + 1 '获得最大单据编号的后四位顺序号,并加1
                Else
                    idx = 1 '否则顺序号等于1
                End If
                e.DataRow("条码") = bh & Format(idx,"0000")
e.DataRow.save
            End If

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


加好友 发短信
等级:一尾狐 帖子:463 积分:4163 威望:0 精华:0 注册:2011/4/5 16:54:00
回复:(有点蓝)生成条码后马上保存    &n...  发帖心情 Post By:2021/9/28 16:34:00 [只看该作者]

不成功啊!新增行没有保存,且增加多行编码依然重复。

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


加好友 发短信
等级:一尾狐 帖子:463 积分:4163 威望:0 精华:0 注册:2011/4/5 16:54:00
回复:(有点蓝)生成条码后马上保存    &n...  发帖心情 Post By:2021/9/28 16:41:00 [只看该作者]

成功了!

在DataRowAdded中写入e.DataTable.Save()


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


加好友 发短信
等级:一尾狐 帖子:463 积分:4163 威望:0 精华:0 注册:2011/4/5 16:54:00
解决方法  发帖心情 Post By:2021/10/5 9:45:00 [只看该作者]

在DataRowAdded中写入e.DataTable.Save()或 e.DataRow.save 都可以。用 e.DataRow.save 比较好。

 回到顶部