以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于自动编号的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=79605)

--  作者:shilhoue
--  发布时间:2016/1/5 21:35:00
--  关于自动编号的问题

我想通过选择监测类别,自动完成项目编号,项目编号的规则是类别代码+年份+顺序号,以下代码自动生成的代码不会自动加1,请老师看看是哪里有错误?

 

 

Select e.DataCol.Name
    Case "监测类别"
        If e.DataRow.IsNull("监测类别") Then
            e.DataRow("项目编号") = Nothing
        Else
            Dim lb As String
        Select e.DataRow("监测类别")
            Case "环境现状"
                lb="H"
            Case "竣工验收"
                lb="Y"
            Case "排污许可"
                lb="P"
            Case "其他委托"
                lb="W"
            Case "来样送检"
                lb="S"
            Case "验证比对"
                lb="B"
        End Select
            If e.DataRow("项目编号").StartsWith(lb) = False \'如果单据编号前缀不符
                Dim max As String
                Dim idx As Integer
                Dim y As Date= Date.Today()
                Dim bh As String = lb & y.year
                max = e.DataTable.Compute("Max(项目编号)","监测类别 = \'" & bh & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别的最大编号
                If max > "" Then \'如果存在最大编号
                    idx = CInt(max.Substring(5,3)) + 1 \'获得最大编号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("项目编号") = bh & Format(idx,"000")
            End If
        End If
End Select


--  作者:大红袍
--  发布时间:2016/1/5 21:39:00
--  

改一下

 

                max = e.DataTable.Compute("Max(项目编号)","监测类别 = \'" & lb & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别的最大编号
                If max > "" Then \'如果存在最大编号
                    idx = CInt(max.Substring(bh.Length,3)) + 1 \'获得最大编号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("项目编号") = bh & Format(idx,"000")


--  作者:shilhoue
--  发布时间:2016/1/5 21:43:00
--  

老师,还是不会自动增加序号啊


--  作者:大红袍
--  发布时间:2016/1/5 21:47:00
--  
max = e.DataTable.Compute("Max(项目编号)","监测类别 = \'" & e.DataRow("监测类别") & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别的最大编号
If max > "" Then \'如果存在最大编号
    idx = CInt(max.Substring(bh.Length,3)) + 1 \'获得最大编号的后三位顺序号,并加1
Else
    idx = 1 \'否则顺序号等于1
End If
e.DataRow("项目编号") = bh & Format(idx,"000")

--  作者:shilhoue
--  发布时间:2016/1/5 21:53:00
--  

谢谢老师,现在已经可以自动增加了。

不过有个新的问题,增加的是在以前的年份基础上增加的,就说说以前最大编号是H2015078,新增行后新增的项目编号是2016079,而我这个应该是2016001才对啊,因为到了新的年份了


--  作者:shilhoue
--  发布时间:2016/1/5 21:56:00
--  

Dim bh As String = lb & y.year
max = e.DataTable.Compute("Max(项目编号)","监测类别 = \'" & bh & "\' And [_Identify] <> " & e.DataRow("_Identify"))

 

为什么这样写不会增加呢,是类别的条件不符合么


--  作者:大红袍
--  发布时间:2016/1/5 22:35:00
--  

你的 监测类别 列的值,是 环境现状、竣工验收 这样的东西,跟bh的值没有一点关系。

 

当然你也可以这样写

 

max = e.DataTable.Compute("Max(项目编号)","项目编号 like \'" & bh & "%\' And [_Identify] <> " & e.DataRow("_Identify"))