Foxtable(狐表)用户栏目专家坐堂 → 根据值所在的区间判断等级


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

主题:根据值所在的区间判断等级

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


加好友 发短信
等级:小狐 帖子:364 积分:3491 威望:0 精华:0 注册:2012/7/24 7:15:00
根据值所在的区间判断等级  发帖心情 Post By:2019/9/1 11:02:00 [只看该作者]

表A设定了值的区间R1-R2,表B的风险值列在表A中找到值所在区间的行,填入风险等级、风险级别和管控层级,表A要使用与表B企业名称列相同的行,如果表A中没有与表B企业名称相同的行,表A列使用企业名称为“通用”的行。
如何写代码?谢谢!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目3-根据区间值定级别.foxdb



 回到顶部
帅哥,在线噢!
y2287958
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:4761 积分:34613 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2019/9/1 11:59:00 [只看该作者]

For Each dr As DataRow In DataTables("表B").Select("企业名称>''")
    Dim drs As List(of DataRow) = DataTables("表A").Select("企业名称='" & dr("企业名称") & "'")
    If drs.Count = 0
        drs = DataTables("表A").Select("企业名称='通用'")
    End If
    If drs.Count > 0
        For Each fdr As DataRow In drs
            If dr("风险值") >= fdr("R1") AndAlso dr("风险值") <=  fdr("R2")
                dr("风险等级") = fdr("风险等级")
                dr("风险级别") = fdr("风险级别")
                dr("管控层级") = fdr("管控层级")
                Exit For
            End If
        Next
    End If
Next

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


加好友 发短信
等级:小狐 帖子:364 积分:3491 威望:0 精华:0 注册:2012/7/24 7:15:00
  发帖心情 Post By:2019/9/1 16:06:00 [只看该作者]

出现了以下错误:

图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20190901154903.jpg
图片点击可在新窗口打开查看
怎么回事?

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110808 积分:563978 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/1 20:58:00 [只看该作者]

表B,datacolchanged事件

Select Case e.DataCol.Name
    Case "企业名称","风险值"
        If e.DataRow.IsNull("企业名称") OrElse e.DataRow.IsNull("风险值")
            e.DataRow("风险等级") = Nothing
        Else
            Dim dr As DataRow = DataTables("表A").Find("企业名称='" & e.DataRow("企业名称")  & "' and 风险等级 <= " & e.DataRow("风险值") & " and 风险等级 >=" & e.DataRow("风险值"))
            If dr Is Nothing Then
                dr = DataTables("表A").Find("企业名称='通用' And R1 <= " & e.DataRow("风险值") & " and R2 >=" & e.DataRow("风险值"))
            End If
            If dr Is Nothing Then
                e.DataRow("风险等级") = Nothing
            Else
                e.DataRow("风险等级") = dr("风险等级")
            End If
        End If
End Select

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


加好友 发短信
等级:小狐 帖子:364 积分:3491 威望:0 精华:0 注册:2012/7/24 7:15:00
  发帖心情 Post By:2019/9/2 21:03:00 [只看该作者]

没实现!
表A设定了列:企业名称、值的区间R1、R2、风险等级、风险级别、管控层级等列。表B设置了列:企业名称、mes_风险值、风险等级、风险级别、管控层级等。
表B的MES_风险值列在表A中找到值所在区间的正确行,在表B中填入找到的风险等级、风险级别和管控层级,表A要使用与表B企业名称列相同的行,如果表A中没有与表B企业名称相同的行,表A使用企业名称为“通用”的行。不管使用企业名称相同的还是使用企业名称为通用的,风险等级、风险级别和管控层级都要填入找到的内容。
Select Case e.DataCol.Name
    Case "MES_风险值"
        If e.DataRow.IsNull("企业名称") OrElse e.DataRow.IsNull("MES_风险值")
            e.DataRow("MES_评价级别") = Nothing
            e.DataRow("风险分级") = Nothing
            e.DataRow("管控层级") = Nothing
        Else
            Dim dr As DataRow = DataTables("MES法").Find("企业名称 = '" & e.DataRow("企业名称")  & "' and R1 <= " & e.DataRow("MES_风险值") & " and R2 >=" & e.DataRow("MES_风险值"))
            If dr IsNot Nothing Then
                e.DataRow("MES_评价级别") = dr("风险等级")
                e.DataRow("风险分级") = dr("风险级别")
                e.DataRow("管控层级") = dr("管控层级")
            Else
            dim dt as datarow = DataTables("MES法").Find("企业名称 = '通用' And R1 <= " & e.DataRow("MES_风险值") & " and R2 >=" & e.DataRow("MES_风险值"))
                e.DataRow("MES_评价级别") = dt("风险等级")
                e.DataRow("风险分级") = dt("风险级别")
                e.DataRow("管控层级") = dt("管控层级")
            End If
        End If
End Select

用您上面的代码,没实现,我又自己改了一下代码,还是不行,麻烦您再给看看,谢谢

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110808 积分:563978 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/9/2 21:35:00 [只看该作者]

4楼的代码我在1楼的实例测试没有问题,说明如何测试,按什么步骤,输入什么数据有问题?

如果是改到其它实例不会改,就上传有问题的实例说明

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


加好友 发短信
等级:小狐 帖子:364 积分:3491 威望:0 精华:0 注册:2012/7/24 7:15:00
  发帖心情 Post By:2019/9/3 20:08:00 [只看该作者]

如果MES_风险值这一列是通过公式计算得出的,而不是输入的,就不行,我改了一下,现在可以了。谢谢老师

 回到顶部