Foxtable(狐表)用户栏目专家坐堂 → 序号自动增加问题


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

主题:序号自动增加问题

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


加好友 发短信
等级:二尾狐 帖子:527 积分:4148 威望:0 精华:0 注册:2019/1/13 10:12:00
序号自动增加问题  发帖心情 Post By: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按刚才的思路排序。请您指导。

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


加好友 发短信
等级:二尾狐 帖子:527 积分:4148 威望:0 精华:0 注册:2019/1/13 10:12:00
  发帖心情 Post By:2021/11/16 9:55:00 [显示全部帖子]

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


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


加好友 发短信
等级:二尾狐 帖子:527 积分:4148 威望:0 精华:0 注册:2019/1/13 10:12:00
  发帖心情 Post By:2021/11/16 10:10:00 [显示全部帖子]

好了,老师,编号位数设置不对


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


加好友 发短信
等级:二尾狐 帖子:527 积分:4148 威望:0 精华:0 注册:2019/1/13 10:12:00
  发帖心情 Post By: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

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


加好友 发短信
等级:二尾狐 帖子:527 积分:4148 威望:0 精华:0 注册:2019/1/13 10:12:00
  发帖心情 Post By:2022/4/6 13:20:00 [显示全部帖子]

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

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


加好友 发短信
等级:二尾狐 帖子:527 积分:4148 威望:0 精华:0 注册:2019/1/13 10:12:00
  发帖心情 Post By:2022/4/6 13:42:00 [显示全部帖子]

谢谢老师!

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


加好友 发短信
等级:二尾狐 帖子:527 积分:4148 威望:0 精华:0 注册:2019/1/13 10:12:00
  发帖心情 Post By:2022/10/26 9:27:00 [显示全部帖子]

三、按类别编号

假定有下图所示的一个表,编号根据类别生成,前两位为类别,后三位为顺序号:

图片点击可在新窗口打开查看

要自动生成上面的编号,可以将DataColChanged事件代码设置为:

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(
2,3)) + 1 '获得最大编号的后三位顺序号,并加1
               
Else
                    idx =
1 '否则顺序号等于1
               
End If
                e.
DataRow("编号") = lb & Format(idx,"000")
            End
If
        End
If
End
Select

               

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


加好友 发短信
等级:二尾狐 帖子:527 积分:4148 威望:0 精华:0 注册:2019/1/13 10:12:00
  发帖心情 Post By:2022/10/26 9:32:00 [显示全部帖子]

老师,上面的代码实现了这样的功能:表有两列,一列是类别,另一列是根据类别编号。我想实现的功能是,表只有一列,首先录入A001,设计一个复制新增按钮,点击按钮则增加一列并自动编号为A002.依次类推。如果录入的是B001,则选中后复制新增为B002.如何实现呢?请您指导

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


加好友 发短信
等级:二尾狐 帖子:527 积分:4148 威望:0 精华:0 注册:2019/1/13 10:12:00
  发帖心情 Post By:2022/10/26 9:58:00 [显示全部帖子]

老师,规律符合您说的。第一行是手工录入的,比如录入AAA001,BBB001,CCC001,如果当前行选择的是AAA001,则复制新增时自动编号为AAA002;如果当前行选择的是BBB001,则新增为BBB002,依次类推,序号的起始点是由选择的当前行决定的。下面是项目中增加行的代码。编号增加的代码在表的datacolchangend事件中,参考11楼的代码。那个是两列数据,需要修改成一列数据。您受累看看好吗?
'------------------------自动复制选中行------------------------------
Dim r As Row = Tables("原材料进货记录").current
Dim Cols1() As String = {"经办人","类别","账务","客户名称","摘要"}
Dim dr2 As Row = Tables("原材料进货记录").AddNew()
For i As Integer = 0 To Cols1.Length -1
    dr2(Cols1(i)) = r(Cols1(i))
Next
[此贴子已经被作者于2022/10/26 10:03:45编辑过]

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


加好友 发短信
等级:二尾狐 帖子:527 积分:4148 威望:0 精华:0 注册:2019/1/13 10:12:00
  发帖心情 Post By:2022/10/26 10:57:00 [显示全部帖子]

老师,提示如下错误,我没找到原因
.NET Framework 版本:4.0.30319.18408
Foxtable 版本:2020.5.29.8
错误所在事件:窗口,生产管理,Button32,Click
详细错误信息:
重载决策失败,因为没有可访问的“Substring”接受此数目的参数。


 回到顶部
总数 12 1 2 下一页