Foxtable(狐表)用户栏目专家坐堂 → [求助]Find查找范围


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

主题:[求助]Find查找范围

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


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

如果是按钮,这样写

 

DataTables("故障报告2").StopRedraw

Dim drs As List(Of DataRow) = DataTables("故障报告2").Select("", "飞机号,系统章节,日期")

For i As Integer = 2 To drs.count - 1
    Dim flag As Boolean = True
    For j As Integer = 1 To 2
        If not (drs(i-j)("飞机号") = drs(i)("飞机号") AndAlso drs(i-j)("系统章节") = drs(i)("系统章节") AndAlso drs(i-j)("日期") >= drs(i)("日期").AddDays(-30) AndAlso drs(i-j)("日期") < drs(i)("日期")) Then
            flag = False
            Exit For
        End If
    Next
    If flag Then
        drs(i)("预警") = "重复性故障"
    Else
        drs(i)("预警") = Nothing
    End If
Next

DataTables("故障报告2").ResumeRedraw


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


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

如果是datacolchanged事件,这样写

 

If e.DataCol.Name = "日期" Then
    Dim drs As List(of DataRow)
    Dim dv As Date = e.DataRow("日期")
    Dim n As Integer = 0
    drs = DataTables("故障报告2").Select("飞机号 = '" & e.DataRow("飞机号") & "' and 系统章节 = '" & e.DataRow("系统章节") & "'", "日期") '注意要根据日期排序
    For Each dr2 As DataRow In drs
    'dr2("预警") = Nothing
        If dr2("日期") >= dv.AddDays(-30) And dr2("日期") < dv Then
            n  = n + 1
            If n >=2 Then
                e.DataRow("预警") = "重复性故障"

                Exit For
            End If
        End If
    Next
End If

 


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


加好友 发短信
等级:童狐 帖子:234 积分:2062 威望:0 精华:0 注册:2015/11/7 21:11:00
  发帖心情 Post By:2016/2/18 18:02:00 [只看该作者]

红袍哥,刚才我给你穿的那个例子里,有一个窗口,叫自定义重复间歇性故障查询,要实现的功能是查找选定时间段内的重复性故障,但是我那代码的结果不仅不准确,还把其它时间段的也计算一遍,您帮看一下是什么原因好吗?今天麻烦您一天了,真是不好意思


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


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

在这里写条件

 

DataTables("故障报告2").StopRedraw

Dim drs As List(Of DataRow) = DataTables("故障报告2").Select("日期范围的条件写在这里", "飞机号,系统章节,日期")

For i As Integer = 2 To drs.count - 1
    Dim flag As Boolean = True
    For j As Integer = 1 To 2
        If not (drs(i-j)("飞机号") = drs(i)("飞机号") AndAlso drs(i-j)("系统章节") = drs(i)("系统章节") AndAlso drs(i-j)("日期") >= drs(i)("日期").AddDays(-30) AndAlso drs(i-j)("日期") < drs(i)("日期")) Then
            flag = False
            Exit For
        End If
    Next
    If flag Then
        drs(i)("预警") = "重复性故障"
    Else
        drs(i)("预警") = Nothing
    End If
Next

DataTables("故障报告2").ResumeRedraw


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


加好友 发短信
等级:童狐 帖子:234 积分:2062 威望:0 精华:0 注册:2015/11/7 21:11:00
  发帖心情 Post By:2016/2/18 18:25:00 [只看该作者]

以下是引用大红袍在2016/2/18 18:17:00的发言:

在这里写条件

 

DataTables("故障报告2").StopRedraw

Dim drs As List(Of DataRow) = DataTables("故障报告2").Select("日期范围的条件写在这里", "飞机号,系统章节,日期")

For i As Integer = 2 To drs.count - 1
    Dim flag As Boolean = True
    For j As Integer = 1 To 2
        If not (drs(i-j)("飞机号") = drs(i)("飞机号") AndAlso drs(i-j)("系统章节") = drs(i)("系统章节") AndAlso drs(i-j)("日期") >= drs(i)("日期").AddDays(-30) AndAlso drs(i-j)("日期") < drs(i)("日期")) Then
            flag = False
            Exit For
        End If
    Next
    If flag Then
        drs(i)("预警") = "重复性故障"
    Else
        drs(i)("预警") = Nothing
    End If
Next

DataTables("故障报告2").ResumeRedraw

嗯嗯,谢谢!


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


加好友 发短信
等级:童狐 帖子:234 积分:2062 威望:0 精华:0 注册:2015/11/7 21:11:00
  发帖心情 Post By:2016/3/14 13:06:00 [只看该作者]

以下是引用大红袍在2016/2/18 17:23:00的发言:

如果是按钮,这样写

 

DataTables("故障报告2").StopRedraw

Dim drs As List(Of DataRow) = DataTables("故障报告2").Select("", "飞机号,系统章节,日期")

For i As Integer = 2 To drs.count - 1
    Dim flag As Boolean = True
    For j As Integer = 1 To 2
        If not (drs(i-j)("飞机号") = drs(i)("飞机号") AndAlso drs(i-j)("系统章节") = drs(i)("系统章节") AndAlso drs(i-j)("日期") >= drs(i)("日期").AddDays(-30) AndAlso drs(i-j)("日期") < drs(i)("日期")) Then
            flag = False
            Exit For
        End If
    Next
    If flag Then
        drs(i)("预警") = "重复性故障"
    Else
        drs(i)("预警") = Nothing
    End If
Next

DataTables("故障报告2").ResumeRedraw



红袍哥,我在此基础上改了一下,原来的意思是:出现三次就判断为重复性故障。现在改成,如果出现三次,那么这三次全部在预警列标注:重复性故障。我是这样改的,但是怎么也标不上




For i As Integer = 2 To drs.count - 1

    Dim flag As Boolean = True    ''定义布尔变量

    For j As Integer = 1 To 2     ''因为出现三次算重复性(间歇性),故找两次

        If not (drs(i-j)("飞机号") = drs(i)("飞机号") AndAlso drs(i-j)("系统章节") = drs(i)("系统章节") AndAlso drs(i-j)("日期") >= drs(i)("日期").AddDays(-recycle) AndAlso drs(i-j)("日期") < = drs(i)("日期")) Then ''三十天内同一飞机,同一章节出现的条件不满足

            flag = False  ''不是重复或间歇

            Exit For

        End If

    Next

    If flag Then

        drs(i)("自动预警") = "重复性故障"    ''如果是重复间歇,将前两个亦写为重复性故障.因为已经按照飞机号,章节号,日期进行排序

        drs(i-1)("自动预警") = "重复性故障"

        drs(i-2)("自动预警") = "重复性故障"

    Else

        drs(i)("自动预警") = Nothing

    End If

Next


您有时间帮我看一下吧,谢谢!


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


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

我测试了一下,没问题,会填入。

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


加好友 发短信
等级:童狐 帖子:234 积分:2062 威望:0 精华:0 注册:2015/11/7 21:11:00
  发帖心情 Post By:2016/3/15 11:16:00 [只看该作者]

嗯,谢谢!

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


加好友 发短信
等级:童狐 帖子:234 积分:2062 威望:0 精华:0 注册:2015/11/7 21:11:00
  发帖心情 Post By:2016/3/16 13:03:00 [只看该作者]

以下是引用大红袍在2016/2/18 18:17:00的发言:

在这里写条件

 

DataTables("故障报告2").StopRedraw

Dim drs As List(Of DataRow) = DataTables("故障报告2").Select("日期范围的条件写在这里", "飞机号,系统章节,日期")

For i As Integer = 2 To drs.count - 1
    Dim flag As Boolean = True
    For j As Integer = 1 To 2
        If not (drs(i-j)("飞机号") = drs(i)("飞机号") AndAlso drs(i-j)("系统章节") = drs(i)("系统章节") AndAlso drs(i-j)("日期") >= drs(i)("日期").AddDays(-30) AndAlso drs(i-j)("日期") < drs(i)("日期")) Then
            flag = False
            Exit For
        End If
    Next
    If flag Then
        drs(i)("预警") = "重复性故障"
    Else
        drs(i)("预警") = Nothing
    End If
Next

DataTables("故障报告2").ResumeRedraw



红袍哥,又有一个新问题,现在这段代码是30天内出现三次,判定为重复性故障。可是领导那又提出新的要求,同一天的不论出现几次,都只算做一次。咱们这段代码,就没法用了。我尝试改了下,失败了。我的想法是:

For i As Integer = 2 To drs.count - 1

统计("日期范围为drs(i)往前推30天,日期不重复的次数),如果大于等于三,则判定为重复性。可是这个不重复次数,我不知道怎么统计

[此贴子已经被作者于2016/3/16 13:12:22编辑过]

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


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

DataTables("故障报告2").StopRedraw

Dim drs As List(Of DataRow) = DataTables("故障报告2").Select("", "飞机号,系统章节,日期")

For i As Integer = 2 To drs.count - 1
    Dim flag As Boolean = False
    Dim count As Integer = 0
    For j As Integer = i-1 To 0 Step -1
        If drs(j)("日期") <> drs(j+1)("日期") Then
            If drs(j)("飞机号") = drs(i)("飞机号") AndAlso drs(j)("系统章节") = drs(i)("系统章节") AndAlso drs(j)("日期") >= drs(i)("日期").AddDays(-30) AndAlso drs(j)("日期") < drs(i)("日期") Then
                count += 1
            End If
        End If
        If count >= 2 Then
            flag = True
            Exit For
        End If
    Next
    If flag Then
        drs(i)("预警") = "重复性故障"
    Else
        drs(i)("预警") = Nothing
    End If
Next

DataTables("故障报告2").ResumeRedraw


 回到顶部
总数 31 上一页 1 2 3 4 下一页