以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]日期大小判定代码  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=141662)

--  作者:rbsoft
--  发布时间:2019/10/8 10:32:00
--  [求助]日期大小判定代码
附件中的“开始时间”和“结束时间” 都可以修改,但是要求:
要求:1、同一行“结束时间”必须大于“开始时间”
        2、同年月日的下一行的“开始时间”必须大于上一行的“结束时间”
当违反这些要求时系统会提示。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:业务记录.xlsx



--  作者:有点蓝
--  发布时间:2019/10/8 10:57:00
--  
datacolchanging事件

Select Case e.DataCol.Name
    Case "开始时间","结束时间"
        If e.DataRow.IsNull("开始时间") OrElse e.DataRow.IsNull("结束时间")
        Else
            If e.DataRow("开始时间") >= e.DataRow("结束时间") Then
                msgbox("结束时间必须大于开始时间")
                e.Cancel = True
            End If
        End If
        If e.DataCol.Name = "开始时间" Then
            Dim dr As DataRow = e.DataTable.Find("[_Identify] < " & e.DataRow("_Identify"),"[_Identify] desc")
            If dr IsNot Nothing Then
                If e.DataRow("开始时间") <= dr("结束时间") Then
                    msgbox("开始时间必须大于上一行结束时间")
                    e.Cancel = True
                End If
            End If
        End If
End Select

--  作者:rbsoft
--  发布时间:2019/10/8 11:33:00
--  
谢谢。如果按照人员工号判定呢?比如:工号:1001的人员,只判定该人员在2019-09-09的开始时间和结束时间。但是不判定1002人员的,当判定1002人员的时候,不判定1001人员的。意思是:同年月日的下一行的“开始时间”必须大于上一行的“结束时间”  仅限于该工号人员。不同工号人员之间不受限制。请看附件。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:业务记录.xlsx


--  作者:有点蓝
--  发布时间:2019/10/8 13:54:00
--  
Dim dr As DataRow = e.DataTable.Find("[_Identify] < " & e.DataRow("_Identify") & " and 工号=\'" & e.DataRow("工号") & "\'","[_Identify] desc")
--  作者:rbsoft
--  发布时间:2019/10/8 14:34:00
--  
同一行,虽然修改开始时间,会提示。但是开始时间还是可以修改过来,修改过后的时间还是会大于结束时间。请看附件截图。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:业务记录.xlsx

[此贴子已经被作者于2019/10/8 14:34:20编辑过]

--  作者:有点蓝
--  发布时间:2019/10/8 14:38:00
--  
我测试没有问题,上传实例说明

代码放到datacolchanging事件,不是datacolchanged事件

--  作者:rbsoft
--  发布时间:2019/10/10 11:24:00
--  
请帮忙看看附件实例,谢谢。
--  作者:rbsoft
--  发布时间:2019/10/10 11:24:00
--  
请帮忙看看附件实例,谢谢
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:时间大小判定.zip


--  作者:有点蓝
--  发布时间:2019/10/10 11:30:00
--  
Select Case e.DataCol.Name
    Case "开始时间"
        If e.DataRow.IsNull("开始时间") = False
            If e.NewValue >= e.DataRow("结束时间") Then
                msgbox("结束时间必须大于开始时间")
                e.Cancel = True
            End If
            Dim dr As DataRow = e.DataTable.Find("[_Identify] < " & e.DataRow("_Identify") & " and 工号=\'" & e.DataRow("工号") & "\'","[_Identify] desc")
            If dr IsNot Nothing Then
                If e.NewValue <= dr("结束时间") Then
                    msgbox("开始时间必须大于上一行结束时间")
                    e.Cancel = True
                End If
            End If
        End If
    Case "结束时间"
        If e.DataRow.IsNull("结束时间") = False
            If e.DataRow("开始时间") >= e.NewValue Then
                msgbox("结束时间必须大于开始时间")
                e.Cancel = True
            End If
        End If

End Select

--  作者:rbsoft
--  发布时间:2019/10/10 13:03:00
--  
非常感谢。