Foxtable(狐表)用户栏目专家坐堂 → [求助]判断时间冲突的代码求助,10日更新问题


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

主题:[求助]判断时间冲突的代码求助,10日更新问题

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


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
[求助]判断时间冲突的代码求助,10日更新问题  发帖心情 Post By:2015/8/7 15:55:00 [显示全部帖子]

理论上,一个设备不可能同时做二个产品,有以下数据:
设备名    产品名       开始时间                   结束时间
轧机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编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2015/8/10 10:14:00 [显示全部帖子]

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

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


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By: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

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


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2015/8/10 11:19:00 [显示全部帖子]

逻辑上还是有问题,无论输入什么时间都能通过

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


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By: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

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


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2015/8/10 13:46:00 [显示全部帖子]

老师,我终于搞定了,您写的代码还是不行,我为了简化代码,将起始时间与结束时间分开判断,代码如下:

'同卷号时间冲突判断
If e.DataCol.Name = "审核" AndAlso e.NewValue = True Then
    Dim dr1 As DataRow = _dt工序合并表.SQLFind("([起始时间] < '" & e.DataRow("起始时间") & "' and [结束时间] > '" & e.DataRow("起始时间") & "') And [卷号] = '" & e.DataRow("卷号") &"'")
    If dr1 IsNot Nothing Then
        e.Cancel = True
        MessageBox.Show("同卷号[起始时间]冲突,未修复前禁止审核!" & vbcrlf & "冲突工序:   " & dr1("来源表名") & vbcrlf & "行号流水:   " & dr1("行号流水") ,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
    Else
        Dim dr2 As DataRow = _dt工序合并表.SQLFind("([起始时间] < '" & e.DataRow("结束时间") & "' and [结束时间] > '" & e.DataRow("结束时间") & "') And [卷号] = '" & e.DataRow("卷号") &"'")
        If dr2 IsNot Nothing Then
            e.Cancel = True
            MessageBox.Show("同卷号[结束时间]冲突,未修复前禁止审核!" & vbcrlf & "冲突工序:   " & dr2("来源表名") & vbcrlf & "行号流水:   " & dr2("行号流水") ,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
        Else
            Dim dr3 As DataRow = _dt工序合并表.SQLFind("([起始时间] > '" & e.DataRow("起始时间") & "' and [结束时间] < '" & e.DataRow("结束时间") & "') And [卷号] = '" & e.DataRow("卷号") &"'")
            If dr3 IsNot Nothing Then
                e.Cancel = True
                MessageBox.Show("同卷号[起始时间]及[结束时间]冲突,未修复前禁止审核!" & vbcrlf & "冲突工序:   " & dr3("来源表名") & vbcrlf & "行号流水:   " & dr3("行号流水") ,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information)               
            End If
        End If
    End If
End If

三层IF看的有点烦,有办法改进吗?
[此贴子已经被作者于2015/8/10 13:47:41编辑过]

 回到顶部