以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  序号自动增加问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=173120)

--  作者:15666282205
--  发布时间:2021/11/16 9:04:00
--  序号自动增加问题
老师,我在表的datarowadded事件中写了以下代码,实现了序号自动增加。还想优化实现如下功能:表是由多人录入的,如果是A录入,则序号为A001、A002...如果是B录入的,序号为B001、B002...等,以此类推。如何实现?
\'------------------------------自动增加序号---------------------
e.DataRow("序号") = e.DataTable.sqlCompute("Max(序号)") + 1
e.DataRow.save
我的思路是:保留序号列,另加一列“序号2”,序号2按刚才的思路排序。请您指导。

--  作者:有点蓝
--  发布时间:2021/11/16 9:07:00
--  
参考:http://www.foxtable.com/webhelp/topics/2403.htm
--  作者:15666282205
--  发布时间:2021/11/16 9:55:00
--  
老师,我看了帮助,相当于按类别编号。实际情况是这样:表设置为启动不加载,打开窗口时没有内容,点击“新增”则增加一行,其中登录人自动填入作为类别;如果是王某人登录,则类别是王某人,编号是“王某人001”;我用开发者登录,实现了第一个编号“开发者001”;再点新增的时候提示以下错误。提示中的“者00”实际是“开发者001”中的字,不知道为什么只显示一部分。我把编号这一列已设置成字符,没法设置成整数。请您指导。
.NET Framework 版本:4.0.30319.18408
Foxtable 版本:2020.5.29.8
错误所在事件:表,决算登记表,DataColChanged
详细错误信息:
调用的目标发生了异常。
从字符串“者00”到类型“Integer”的转换无效。
输入字符串的格式不正确。


--  作者:有点蓝
--  发布时间:2021/11/16 10:07:00
--  
贴出代码啊
--  作者:15666282205
--  发布时间:2021/11/16 10:10:00
--  
好了,老师,编号位数设置不对


--  作者:15666282205
--  发布时间:2022/4/6 11:38:00
--  
老师,在表的DataColChanged事件中以下代码实现了自动编号,但是只是在已显示的表的基础上增加序号,不能取后台的数据。我用的SQL阿里云数据库,请您指导。
\'------------------------------------自动编号----------------------------
Select e.DataCol.Name
    Case "录单"
        If e.DataRow.IsNull("录单") Then
            e.DataRow("编号") = Nothing
        Else
            Dim lb As String = e.DataRow("录单")
            If e.DataRow("编号").StartsWith(lb) = False \'如果单据编号前缀不符
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.Compute("Max(编号)","录单 = \'" & lb & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别的最大编号
                If max > "" Then \'如果存在最大编号
                    idx = CInt(max.Substring(3,4)) + 1 \'获得最大编号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("编号") = lb & Format(idx,"0000")
            End If
        End If
End Select

--  作者:有点蓝
--  发布时间:2022/4/6 11:40:00
--  
                Dim idx As Integer
                max = e.DataTable.sqlCompute("Max(编号)","录单 = \'" & lb & "\' And [_Identify] <> " & e.DataRow("_Identify")) \'取得该类别的最大编号
                If max > "" Then \'如果存在最大编号
                    idx = CInt(max.Substring(3,4)) + 1 \'获得最大编号的后三位顺序号,并加1
                Else
                    idx = 1 \'否则顺序号等于1
                End If
                e.DataRow("编号") = lb & Format(idx,"0000")
e.DataRow.save
            End If
        End If

--  作者:15666282205
--  发布时间:2022/4/6 13:20:00
--  
老师,下面代码里的取数范围(3,4)有可能存在不确定性,因为我用的是姓名+编码的方式,如果姓名是两个字话会出现什么情况?
idx = CInt(max.Substring(3,4)) + 1 \'获得最大编号的后三位顺序号,并加1

--  作者:有点蓝
--  发布时间:2022/4/6 13:36:00
--  
idx = CInt(max.Substring(max.length - 4)) + 1 
--  作者:15666282205
--  发布时间:2022/4/6 13:42:00
--  
谢谢老师!