以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  日期的计算  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=56083)

--  作者:jk362223
--  发布时间:2014/8/28 23:08:00
--  日期的计算
有一个表,现要计算上下行之间的日期的间隔”天数“,及最后一次日期与今天的“距今天数”,示例是
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:笔筒该.zip


代码如下:
Select Case e.DataCol.Name
    Case  "分类", "处置日期"
        If e.DataCol.Name = "处置日期" AndAlso e.DataRow.IsNull(e.DataCol) = False Then
            Dim dr As DataRow = e.DataTable.Find("分类 = \'" & e.DataRow("分类") & "\' and 处置日期 <= #" & e.DataRow("处置日期") & "#","处置日期 Desc")
            If dr IsNot Nothing Then
                Dim tp As TimeSpan = e.DataRow("处置日期") - dr("处置日期")
                e.DataRow("天数") = tp.TotalDays
                dr =e.DataTable.Find("分类 = \'" & e.DataRow("分类")  & "\' and 处置日期 <= #" & e.DataRow("处置日期") & "#","处置日期 Desc")
                If dr IsNot Nothing Then                    
                        tp = Date.Today - cdate(dr("处置日期"))  
                        e.DataRow("距今天数") = tp.TotalDays
                    
                End If
           End If
        End If
End Select

示例中的表是“医疗废物处置”,现在问题是:要达到“计算上下行之间的各分类的处置日期的间隔”天数“,及最后一次“处置日期”与今天的“距今天数”这个目标,上述代码请改下。这组代码产生效果是:每个处置日期”都产生一个“距今天数”,而不是最近一个处置日期”产生一个“距今天数”;另一问题是,”天数“一直是“0”,
[此贴子已经被作者于2014-8-29 7:33:04编辑过]

--  作者:Bin
--  发布时间:2014/8/29 8:42:00
--  
无数据源打不开. 上个内部数据源的例子吧
--  作者:有点甜
--  发布时间:2014/8/29 9:08:00
--  
 没有数据库,没有表格
--  作者:jk362223
--  发布时间:2014/8/29 9:22:00
--  
示例
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:鲨娑.zip


--  作者:有点甜
--  发布时间:2014/8/29 9:28:00
--  
Select Case e.DataCol.Name
    Case  "分类", "处置日期"
        If e.DataRow.IsNull("处置日期") = False Then
            Dim dr As DataRow = e.DataTable.Find("分类 = \'" & e.DataRow("分类") & "\' and 处置日期 <= #" & e.DataRow("处置日期") & "# and _Identify <> " & e.DataRow("_Identify"),"处置日期 Desc")
            If dr IsNot Nothing Then
                Dim tp As TimeSpan = e.DataRow("处置日期") - dr("处置日期")
                e.DataRow("天数") = tp.TotalDays
                dr =e.DataTable.Find("分类 = \'" & e.DataRow("分类")  & "\' and 处置日期 <= #" & e.DataRow("处置日期") & "#","处置日期 Desc")
                If dr IsNot Nothing Then
                    tp = Date.Today - cdate(dr("处置日期"))
                    e.DataRow("距今天数") = tp.TotalDays                  
                End If
            End If
        End If
End Select

--  作者:jk362223
--  发布时间:2014/8/29 9:57:00
--  
回5楼,每个"处置日期"都有一个"距今天数",能不能这样,下一行"距今天数"产生以后,上一行的"距今天数"变为“0”,这样代码如何写?
--  作者:有点甜
--  发布时间:2014/8/29 10:02:00
--  
 Select Case e.DataCol.Name
    Case  "分类", "处置日期"
        If e.DataRow.IsNull("处置日期") = False Then
            Dim dr As DataRow = e.DataTable.Find("分类 = \'" & e.DataRow("分类") & "\' and 处置日期 <= #" & e.DataRow("处置日期") & "# and _Identify <> " & e.DataRow("_Identify"),"处置日期 Desc")
            If dr IsNot Nothing Then
                Dim tp As TimeSpan = e.DataRow("处置日期") - dr("处置日期")
                e.DataRow("天数") = tp.TotalDays
               
                tp = Date.Today - cdate(e.DataRow("处置日期"))
                e.DataRow("距今天数") = tp.TotalDays
                e.DataTable.ReplaceFor("距今天数", Nothing, "分类 = \'" & e.DataRow("分类") & "\' and 处置日期 <= #" & e.DataRow("处置日期") & "# and _Identify <> " & e.DataRow("_Identify"))
            End If
        End If
End Select

--  作者:jk362223
--  发布时间:2014/8/29 10:12:00
--  
Select Case e.DataCol.Name
    Case  "身份证号", "报销起日", "记录时间", "报销止日"
        If e.DataCol.Name = "记录时间" AndAlso e.DataRow.IsNull(e.DataCol) = False Then
            Dim dr As DataRow = e.DataTable.Find("身份证号 = \'" & e.DataRow("身份证号") & "\' and 报销起日 = #" & e.DataRow("报销起日") & "# and _Identify <> \'" & e.DataRow("_Identify") & "\' and 记录时间 <= #" & e.DataRow("记录时间") & "#","记录时间 Desc")
            If dr IsNot Nothing Then
                Dim tp As TimeSpan = e.DataRow("记录时间") - dr("记录时间")
                e.DataRow("天数") = tp.TotalDays
                dr = e.DataTable.Find("身份证号 = \'" & e.DataRow("身份证号") & "\' and 报销起日 = #" & e.DataRow("报销起日") & "# And 记录时间 <= #" & e.DataRow("记录时间") & "#","记录时间 Desc")
                If dr IsNot Nothing Then
                    If dr.IsNull("报销止日") Then
                        tp = cdate(dr("记录时间")) - Date.Today
                        e.DataRow("距今天数") = tp.TotalDays
                    Else
                        tp = cdate(dr("记录时间")) - cdate(dr("报销止日"))
                        e.DataRow("距今天数") = tp.TotalDays
                        e.DataTable.ReplaceFor("距今天数", Nothing, "身份证号 = \'" & e.DataRow("身份证号") & "\' and 报销起日 = #" & e.DataRow("报销起日") & "# and _Identify <> \'" & e.DataRow("_Identify") & "\' and 记录时间 <= #" & e.DataRow("记录时间") & "#","记录时间 Desc")
                    End If
                End If
            Else
                e.DataRow("天数") = 0
            End If
        End If
End Select

那这个代码这样写吗?

--  作者:有点甜
--  发布时间:2014/8/29 10:35:00
--  

 是


--  作者:有点甜
--  发布时间:2014/8/29 10:40:00
--  

 请参照这一段改

 

Select Case e.DataCol.Name
    Case  "分类", "处置日期"
        If e.DataRow.IsNull("处置日期") = False Then
            Dim dr As DataRow = e.DataTable.Find("分类 = \'" & e.DataRow("分类") & "\' and 处置日期 <= #" & e.DataRow("处置日期") & "# and _Identify <> " & e.DataRow("_Identify"),"处置日期 Desc")
            If dr IsNot Nothing Then
                Dim tp As TimeSpan = e.DataRow("处置日期") - dr("处置日期")
                e.DataRow("天数") = tp.TotalDays
               
                tp = Date.Today - cdate(e.DataRow("处置日期"))
                e.DataRow("距今天数") = tp.TotalDays
                e.DataTable.ReplaceFor("距今天数", Nothing, "分类 = \'" & e.DataRow("分类") & "\' and 处置日期 <= #" & e.DataRow("处置日期") & "# and _Identify <> " & e.DataRow("_Identify"))
            End If
        End If
End Select