以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]判断时间冲突的代码求助,10日更新问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=72852)

--  作者:huangfanzi
--  发布时间:2015/8/7 15:55:00
--  [求助]判断时间冲突的代码求助,10日更新问题
理论上,一个设备不可能同时做二个产品,有以下数据:
设备名    产品名       开始时间                   结束时间
轧机1号   A产品      2015-8-7 08:00      2015-8-7 10:00
轧机1号   B产品      2015-8-7 09:00      2015-8-7 11:00

上面记录中,当录入第二条数据的开始时间时,希望给予提示,告知用户时间冲突,并且取消录入。
请老师告诉我应该如何写判断代码,谢谢!
[此贴子已经被作者于2015/8/10 10:14:44编辑过]

--  作者:大红袍
--  发布时间:2015/8/7 15:59:00
--  

DataColChanging事件,判断一下

 

Dim fdr As DataRow = e.DataTable.Find("(结束时间 > #" & e.DataRow("开始时间") & "# or 开始时间 < #" & e.DataRow("结束时间") & "#) and 设备名 = \'" & e.DataRow("设备名") & "\'")

If fdr IsNot Nothing Then

    e.Cancel = True

End If

[此贴子已经被作者于2015/8/7 16:00:20编辑过]

--  作者:huangfanzi
--  发布时间:2015/8/10 10:14:00
--  
老师的代码是用于前台,我现在要改用后台,不成功,估计是SQL数据库中对于时间比较上的录入问题,根据帮助文件已经用单引号了,但还是不行,项目中时间用的是 datetime 格式,请老师帮我改下:
Dim dr1 As DataRow = _dt工序合并表.SQLFind("([结束时间] > \'" & e.DataRow("起始时间") & "\' or [起始时间] < \'" & e.DataRow("结束时间") & "\') And [卷号] = \'" & e.DataRow("卷号") & "\'" )

--  作者:大红袍
--  发布时间:2015/8/10 10:18:00
--  

 

Dim fdr As DataRow = e.DataTable.Find("(结束时间 > #" & e.DataRow("开始时间") & "# or 开始时间 < #" & e.DataRow("结束时间") & "#) and 设备名 = \'" & e.DataRow("设备名") & "\'")

If fdr IsNot Nothing Then
   
    e.Cancel = True
   
Else
    fdr = _dt工序合并表.SQLFind("([结束时间] > \'" & e.DataRow("起始时间") & "\' or [起始时间] < \'" & e.DataRow("结束时间") & "\') And [卷号] = \'" & e.DataRow("卷号") & "\'" )
    If fdr IsNot Nothing Then
        e.Cancel = True
    End If
End If


--  作者:huangfanzi
--  发布时间:2015/8/10 10:29:00
--  
好奇怪,我用了以下代码,不管时间如何输入,都能找到行:
\'时间冲突判断
If e.DataCol.Name = "审核" AndAlso e.NewValue = True Then
    \'同卷号时间冲突判断
    Dim dr1 As DataRow = _dt工序合并表.SQLFind("([结束时间] > \'" & e.DataRow("起始时间") & "\' or [起始时间] < \'" & e.DataRow("结束时间") & "\') And [卷号] = \'" & e.DataRow("卷号") & "\'" )
    If dr1 IsNot Nothing Then
        e.Cancel = True
        
        MessageBox.Show("时间冲突")
    End If
    \'同设备时间冲突判断
    
End If

--  作者:大红袍
--  发布时间:2015/8/10 10:43:00
--  

逻辑不严谨,这样写

 

"([结束时间] > \'" & e.DataRow("起始时间") & "\' and  [结束时间] < \'" & e.datarow("结束时间") & "\' or [起始时间] < \'" & e.DataRow("结束时间") & "\' and 起始时间 > \'" & e.datarow("起始时间") & "\') And [卷号] = \'" & e.DataRow("卷号") & "\'"


--  作者:huangfanzi
--  发布时间:2015/8/10 11:19:00
--  
逻辑上还是有问题,无论输入什么时间都能通过
--  作者:大红袍
--  发布时间:2015/8/10 11:22:00
--  

 不可能,逻辑,已经没有问题了。

 

 上传具体例子。


--  作者:huangfanzi
--  发布时间:2015/8/10 11:49:00
--  
实例上传太麻烦了,我把相关数据贴出来:
工序合并表中已经有以下数据:
工序         卷号               开始时间                           结束时间
原料入库   CS150005     2015-7-30 14:00         2015-07-30 14:00
轧机1号    CS150005     2015-8-7 8:00         2015-8-7 9:00

现在有以下数据准备写入工序表,写入的方式是“审核”列勾上后执行相关代码进行写入,写入的数据在时间上存在三种可能性:
可能性1:清洗1号    CS150005     2015-8-7 8:30         2015-8-7 9:30
可能性2:清洗1号    CS150005     2015-8-7 7:30         2015-8-7 8:30
可能性3:清洗1号    CS150005     2015-8-7 8:01         2015-8-7 8:59

--  作者:大红袍
--  发布时间:2015/8/10 11:56:00
--  

"([结束时间] > \'" & e.DataRow("起始时间") & "\' and  [结束时间] < \'" & e.datarow("结束时间") & "\' or [起始时间] < \'" & e.DataRow("结束时间") & "\' and 起始时间 > \'" & e.datarow("起始时间") & "\' or [结束时间] >= \'" & e.DataRow("结束时间") & "\' and  [起始时间] <= \'" & e.datarow("起始时间") & "\') And [卷号] = \'" & e.DataRow("卷号") & "\'"

[此贴子已经被作者于2015/8/10 11:55:54编辑过]