Foxtable(狐表)用户栏目专家坐堂 → 求助,如何解决 编号的启用与停用这个问题


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

主题:求助,如何解决 编号的启用与停用这个问题

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


加好友 发短信
等级:婴狐 帖子:24 积分:320 威望:0 精华:0 注册:2015/7/25 22:31:00
求助,如何解决 编号的启用与停用这个问题  发帖心情 Post By:2015/11/20 14:28:00 [只看该作者]

原范例是论坛上找的,实际应用中发现有些不大方便的地方,如下图


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

图1

图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看

图2

 

1、如图1,我设了四个编号段,其中红色、黄色框内的号码段是正常情况下的(从小到大,号码段>=2),图2中也可以看出自动排出来的号码属于正常范围(灰色框)

2、但,图1中,绿色框内的号码段,开始号码比红色、黄色的还要小,在图2中就出现BUG了,只提取出1个号,其后的号码就不对了。

3、图1中,蓝色框的号码段只有1,图2也出现BUG。。

 

请教一下,如何解决2、3 这两个问题? 谢谢!

 

实例如下

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:启用和停止编号.table


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/20 15:21:00 [只看该作者]

DataRowAdded事件

 

Dim dr As DataRow = e.DataRow
Dim bh As String = e.DataTable.Compute("Max(编号)") + 1
Dim fdr As DataRow
fdr = DataTables("号段管理").Find("开始号段 <= '" & bh & "' And 结束号段 >= '" & bh & "' And [启用] = True And ([停止] = False Or [停止] Is null)")

If fdr Is Nothing Then
    fdr = DataTables("号段管理").Find("开始号段 >= '" & bh & "' And [启用] = True And ([停止] = False Or [停止] Is null)", "开始号段")
    If fdr Is Nothing Then
        msgbox("没有号段了")
        e.DataRow.Delete
        Return
    Else
        dr("编号") = fdr("开始号段")
    End If
Else
    dr("编号") = bh
End If

DataTables("号段管理").ReplaceFor("停止", True, "结束号段 <= '" & dr("编号") & "'")

 


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


加好友 发短信
等级:婴狐 帖子:24 积分:320 威望:0 精华:0 注册:2015/7/25 22:31:00
  发帖心情 Post By:2015/11/20 15:58:00 [只看该作者]

麻烦版主再帮我改下。
我刚刚用你的代码试了一下, 第3个问题解决了,但第2个问题还是不行,
你的代码直接跳过2,就是说,比最后一个号码还小的号码段,直接跳过

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


加好友 发短信
等级:幼狐 帖子:194 积分:1168 威望:0 精华:0 注册:2015/6/8 21:38:00
  发帖心情 Post By:2015/11/20 16:30:00 [只看该作者]

Dim dr As DataRow = e.DataRow
Dim dt As DataTable = DataTables("号段管理")
Dim dr1 As DataRow = dt.Find("[启用] = True And [停止] = False")
If dr1 IsNot Nothing Then
    Dim bh As String = dr1("开始号段")
    bh = Format(e.DataTable.Compute("Max(编号)","编号 >= " & dr1("开始号段") & " and 编号 <= " & dr1("结束号段")) + 1,"0000000")
    Do While bh > dr1("结束号段")
        dr1("启用") = False
        dr1("停止") = True
        dr1 = dt.Find("[启用] = False And [停止] = False")
        If dr1 IsNot Nothing Then
            dr1("启用") = True
            bh = dr1("开始号段")
            bh = Format(e.DataTable.Compute("Max(编号)","编号 >= " & dr1("开始号段") & " and 编号 <= " & dr1("结束号段")) + 1,"0000000")
            If bh <= dr1("结束号段") Then
                Exit Do
            End If
        Else
            MessageBox.Show("没有号段了")
            Return
        End If
    Loop
    dr("编号") = bh
End If

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/20 16:50:00 [只看该作者]

逻辑有问题,编号只能递增,不能回头。

 


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/11/20 17:02:00 [只看该作者]

如果要根据号段管理,取完所有编号,就这样写

 

Dim dr As DataRow = e.DataRow
Dim found As Boolean = False
For Each pdr As DataRow In DataTables("号段管理").Select("[启用] = True And ([停止] = False Or [停止] Is null)", "领用日期")
    For i As Double = pdr("开始号段") To pdr("结束号段")
        If e.DataTable.Find("编号 = '" & i & "'") Is Nothing Then
            dr("编号") = i
            found = True
            Exit For
        End If
    Next
    If found Then
        Exit For
    Else
        pdr("停止") = True
    End If
Next
If found = False Then
    e.DataRow.Delete
    msgbox("没有编号了")
End If


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


加好友 发短信
等级:婴狐 帖子:24 积分:320 威望:0 精华:0 注册:2015/7/25 22:31:00
  发帖心情 Post By:2015/11/20 18:21:00 [只看该作者]

谢谢,很完美地解决所有问题 图片点击可在新窗口打开查看

 回到顶部