Foxtable(狐表)用户栏目专家坐堂 → [求助]求老师帮忙,自动编号的问题!


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

主题:[求助]求老师帮忙,自动编号的问题!

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


加好友 发短信
等级:童狐 帖子:292 积分:1864 威望:0 精华:0 注册:2013/3/16 21:31:00
[求助]求老师帮忙,自动编号的问题!  发帖心情 Post By:2013/4/10 11:54:00 [只看该作者]

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 '如果单据编号前缀不符
                e.DataRow("编号") = Nothing
                Dim max As String
                Dim idx As Integer
                max = e.DataTable.Compute("Max(编号)","类别 = '" & lb & "'") '取得该类别的最大编号
                If max > "" Then '如果存在最大编号
                    idx = CInt(max.Substring(2,2)) + 1 '获得最大编号的后三位顺序号,并加1
                Else
                    idx = 1 '否则顺序号等于1
                End If
                e.DataRow("编号") = lb & Format(idx,"00")
            End If
        End If
End Select

我想让自动编号都是从XX01到XX31,就是当XX01-XX31满了后,再次输入XX,则又从XX01开始到XX31结束,一直接这样循环编号,请问大神代码该怎么样改?

 


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/4/10 11:57:00 [只看该作者]

前面XX不变? XX01-XX31 无限循环?  这个有难度. 得好好想想..

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


加好友 发短信
等级:童狐 帖子:292 积分:1864 威望:0 精华:0 注册:2013/3/16 21:31:00
  发帖心情 Post By:2013/4/10 12:02:00 [只看该作者]

以下是引用Bin在2013-4-10 11:57:00的发言:
前面XX不变? XX01-XX31 无限循环?  这个有难度. 得好好想想..

对,就是这样,在类别列输入XX,当编号XX01-XX31满了后,继续输入XX,编号又从XX01开始编到XX31结束,就这样循环!


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


加好友 发短信
等级:一尾狐 帖子:476 积分:3523 威望:0 精华:0 注册:2012/12/13 14:23:00
  发帖心情 Post By:2013/4/10 12:05:00 [只看该作者]

建议使用SaveConfigValue函数和GetConfigValue函数

记忆主键列的值,每到达一个循环后将最大的XX31的主键值写入,然后进行重新编排。

或者在函数中保存一个周期变量。

或者直接在调用函数中的编号范围,如果达到最大,就重置,编号代码根据GetConfigValue来定义。

以上只是思路提醒,高手勿喷啊。


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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57640 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/4/10 12:11:00 [只看该作者]

试试这边
idx = CInt(max.Substring(2,2)) + 1 

 if idx = 31 Then
       idx = 1 '否则顺序号等于1
End if
         Else
       idx = 1 '否则顺序号等于1
End If

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/4/10 12:12:00 [只看该作者]

为什么有这种需求 换个方案会不会好点?
非要这样的话.可以试试这个非常没效率的办法
声明2个变量,分别为:  上一编号数量, 下一编号数量
上1编号数量为 编号为01的行数
循环所有查找编号从02开始到31.
 查找编号为02的行数如果比01少 那么IDX就等于这个行数+1
 否则 上一编号数量赋值为 编号为02的行数 继续循环

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/4/10 12:13:00 [只看该作者]

以下是引用blackzhu在2013-4-10 12:11:00的发言:
试试这边
idx = CInt(max.Substring(2,2)) + 1 

 if idx = 31 Then
       idx = 1 '否则顺序号等于1
End if
         Else
       idx = 1 '否则顺序号等于1
End If

你这个只要有了一次31 永远都是1了.

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/4/10 12:14:00 [只看该作者]

以下是引用不倒的翁在2013-4-10 12:05:00的发言:

建议使用SaveConfigValue函数和GetConfigValue函数

记忆主键列的值,每到达一个循环后将最大的XX31的主键值写入,然后进行重新编排。

或者在函数中保存一个周期变量。

或者直接在调用函数中的编号范围,如果达到最大,就重置,编号代码根据GetConfigValue来定义。

以上只是思路提醒,高手勿喷啊。

这个思路可行.如果多用户就完蛋了.

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


加好友 发短信
等级:一尾狐 帖子:476 积分:3523 威望:0 精华:0 注册:2012/12/13 14:23:00
  发帖心情 Post By:2013/4/10 12:16:00 [只看该作者]

以下是引用Bin在2013-4-10 12:14:00的发言:

这个思路可行.如果多用户就完蛋了.

多用户独占编辑。


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


加好友 发短信
等级:童狐 帖子:292 积分:1864 威望:0 精华:0 注册:2013/3/16 21:31:00
  发帖心情 Post By:2013/4/10 12:16:00 [只看该作者]

以下是引用Bin在2013-4-10 12:12:00的发言:
为什么有这种需求 换个方案会不会好点?
非要这样的话.可以试试这个非常没效率的办法
声明2个变量,分别为:  上一编号数量, 下一编号数量
上1编号数量为 编号为01的行数
循环所有查找编号从02开始到31.
 查找编号为02的行数如果比01少 那么IDX就等于这个行数+1
 否则 上一编号数量赋值为 编号为02的行数 继续循环

老白啊,不懂,除了编号,那么有什么其他方法可以实现?


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