Foxtable(狐表)用户栏目专家坐堂 → [求助]如何实现一个表里两列同时进行自动编号?


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

主题:[求助]如何实现一个表里两列同时进行自动编号?

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


加好友 发短信
等级:婴狐 帖子:36 积分:342 威望:0 精华:0 注册:2012/2/20 19:46:00
[求助]如何实现一个表里两列同时进行自动编号?  发帖心情 Post By:2015/2/1 12:22:00 [只看该作者]

如题:

已实现一个表里的一行自动编号,如何根据相同的名字进行筛选后自动生成次级编号?

代码如下:

Select e.DataCol.Name

    Case "入住时间","租赁性质","承租人"

        If e.DataRow.isnull("合同编号")  Then 


            If e.DataRow.IsNull("入住时间") OrElse e.DataRow.IsNull("租赁性质") Then

                e.DataRow("合同编号") = Nothing

            Else

                Dim d As Date = e.DataRow("入住时间")

                Dim lb As String = e.DataRow("承租人")

                Dim bh As String = "" & e.DataRow("项目") & "-" & e.DataRow("租赁性质") & "-" & Format(d,"yyyy") & "-" 

                Dim max As String

                Dim idx As Integer

                Dim flt As String

                Dim fltx As String

                Dim maxx As String

                Dim idxx As Integer

                flt = "合同编号 like '" & bh & "%' And [_Identify] <> " & e.DataRow("_Identify")

                fltx = "承租人 = '" & lb & "' And [_Identify] <> " & e.DataRow("_Identify")

                max = e.DataTable.Compute("Max(合同编号)",flt) 


                maxx = e.DataTable.Compute("Max(批次)",fltx)

                If max > ""  Then 

                    idx = CInt(max.Substring(bh.Length,4)) + 1 

                Else

                    idx = 1 


                End If

                If maxx > "" Then

                    idxx = CInt(maxx.Substring(2,2)) + 1 

                Else

                    idxx = 1 

                End If

                e.DataRow("合同编号") = bh & Format(idx,"0000")

                e.DataRow("批次") = "第" & Format(idxx,"00") & "批"

            End If

        End If

End Select

<!--EndFragment-->(以前发的代码错了一点,已经修正) 

(已实现次级编号的自动递增,代码在6楼,不过只能是数字,无法在前后加字符)

如上代码已实现合同编号的自动生成,可是批次这个次级编号一直都是01,无法递增。感觉是调用字符串的问题,能解决吗?

[此贴子已经被作者于2015-2-2 13:23:27编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1100 积分:8985 威望:0 精华:0 注册:2014/3/15 14:36:00
  发帖心情 Post By:2015/2/1 13:48:00 [只看该作者]

同一表中同一个记录 的编号本来就是唯一一个编号,一个房间同时出租给两个人,也应是两份合同,如果是同一房间出租给同一人,要记录出租次数,那最好建一个关联表。

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


加好友 发短信
等级:婴狐 帖子:36 积分:342 威望:0 精华:0 注册:2012/2/20 19:46:00
  发帖心情 Post By:2015/2/1 14:33:00 [只看该作者]

我的意思是,合同编号是唯一的,逐一递增(现在已经实现),然后不同企业对应的批次最好也能自动递增,这样批次列对应的企业名称然后递增批次号,在一个表格是不能实现的?


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


加好友 发短信
等级:五尾狐 帖子:1100 积分:8985 威望:0 精华:0 注册:2014/3/15 14:36:00
  发帖心情 Post By:2015/2/1 19:22:00 [只看该作者]

参考:

http://www.foxtable.com/help/topics/2191.htm

[此贴子已经被作者于2015-2-1 19:22:36编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/2/2 9:45:00 [只看该作者]

idxx = CInt(maxx.Substring(2,2)) + 1 

改成

 

idxx = CInt(maxx.Substring(1,2)) + 1 


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


加好友 发短信
等级:婴狐 帖子:36 积分:342 威望:0 精华:0 注册:2012/2/20 19:46:00
  发帖心情 Post By:2015/2/2 13:22:00 [只看该作者]

换了一个代码写法,已经实现次级编号的自动递增

 

代码如下:

 

Select e.DataCol.Name

    Case "入住时间","租赁性质","承租人"

        If e.DataRow.isnull("合同编号")  Then 

            If e.DataRow.IsNull("入住时间") OrElse e.DataRow.IsNull("租赁性质") Then

                e.DataRow("合同编号") = Nothing

            Else

                Dim d As Date = e.DataRow("入住时间")

                Dim bh As String = "" & e.DataRow("项目") & "-" & e.DataRow("租赁性质") & "-" & Format(d,"yyyy") & "-" 

                Dim max As String

                Dim idx As Integer

                Dim flt As String

                flt = "合同编号 like '" & bh & "%' And [_Identify] <> " & e.DataRow("_Identify")

                 max = e.DataTable.Compute("Max(合同编号)",flt) 

                   If max > ""  Then 

                    idx = CInt(max.Substring(bh.Length,4)) + 1 

                   Else

                    idx = 1 

                   End If

                e.DataRow("合同编号") = bh & Format(idx,"0000")

            End If

        End If

       If e.DataRow.IsNull("承租人") Then '次级编号的判断语句,加入了这一句才实现次级编号

        e.DataRow("批次") = Nothing

       Else

         Dim lb As String = e.DataRow("承租人")

         If e.DataRow("批次").StartsWith(lb) = False

         Dim maxx As String

         Dim idxx As Integer

         maxx = e.DataTable.Compute("Max(批次)","承租人 = '" & lb & "' And [_Identify] <> " & e.DataRow("_Identify")) 

            If maxx > "" Then

            idxx = CInt(maxx.Substring(1,2)) + 1 

            Else

            idxx = 1 

            End If

         e.DataRow("批次") = "第" & Format(idxx,"00") & "批"    

          End If

       End If

End Select

 

(已实现全部功能,代码也更新了,希望这个例子对大家有帮助)

[此贴子已经被作者于2015-2-2 14:34:39编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/2/2 14:17:00 [只看该作者]

 一样可以啊。看5楼。

 

 如果还不会,就请上传例子。


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


加好友 发短信
等级:婴狐 帖子:36 积分:342 威望:0 精华:0 注册:2012/2/20 19:46:00
  发帖心情 Post By:2015/2/2 14:31:00 [只看该作者]

已经解决,当时想错了,其实只要避开第一个汉字字符就可以。学习了!


 回到顶部