Foxtable(狐表)用户栏目专家坐堂 → [求助]复杂条件的判断顺序


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

主题:[求助]复杂条件的判断顺序

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


加好友 发短信
等级:幼狐 帖子:170 积分:1195 威望:0 精华:0 注册:2016/2/21 18:26:00
[求助]复杂条件的判断顺序  发帖心情 Post By:2016/10/3 10:12:00 [只看该作者]

对于条件语句的复杂条件判断,其优先级是怎么样的呢,

比如想实现:

 

If  (   (y >=1 And y<3) Or (dr("工作时间")-dr("一级保养2") >=350)   )   And    ( dr("工作时间")-dr("一级保养2") <=1000   )

 

这么写行吗,顺便能这么加括号吗

If   y >=1   And    y<3   Or     dr("工作时间")-dr("一级保养2") >=350   And   dr("工作时间")-dr("一级保养2") <=1000

 

在     For Each dr As DataRow In DataTables("主窗口").Select("","机械分类")  

 

'这一语句下,以下条件判断似乎不行,取最大值能这么用吗~~~顺便所以数据都为保留一位小数的单精度小数

 

If ((y >=1 And y<3) Or dr("工作时间") -Math.Max(dr("一级保养2") ,dr("大修2"),dr("中修2"))>=350) And dr("工作时间")-Math.Max(dr("一级保养2") ,dr("大修2"),dr("中修2"))<1000 

[此贴子已经被作者于2016/10/3 10:39:24编辑过]

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


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2016/10/3 10:41:00 [只看该作者]

请多加括号,方便阅读,也不能容易错。


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


加好友 发短信
等级:幼狐 帖子:170 积分:1195 威望:0 精华:0 注册:2016/2/21 18:26:00
  发帖心情 Post By:2016/10/3 10:57:00 [只看该作者]

老师,显示应为 If y >=1 And y<3 Or ( dr("工作时间") -Math.Max(dr("一级保养2"),Math.Max(dr("大修2"),dr("中修2")))>=150) And dr("工作时间")-Math.Max(dr("一级保养2"),Math.Max(dr("大修2"),dr("中修2")))<450 )  Then

语句结束,

 

但是我检查了有一一配对了啊,哪里出问题了呢~~~~请老师帮我检查下吧~~图片点击可在新窗口打开查看

 

PS:一级保养2  指完成保养时机械的工作时间(H),单精度小数,取一位,以此类推

 

 

'一级保养判定程序
For Each dr As DataRow In DataTables("主窗口").Select("","机械分类")'列出所有装备代号
    Dim y,m,d As Integer
    Dim dt1 As Date = Date.Today
    Dim dt2 As Date = dr("一级保养1")
    DateYMD(dt1,dt2,y,m,d)

·············请看下面的,这个还没优化,太长了

[此贴子已经被作者于2016/10/3 11:04:02编辑过]

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


加好友 发短信
等级:幼狐 帖子:170 积分:1195 威望:0 精华:0 注册:2016/2/21 18:26:00
  发帖心情 Post By:2016/10/3 11:03:00 [只看该作者]

上面的没优化,其实这样就可以了~~~~一样的问题~~~~老师看这个就行了

 

 

 

'一级保养判定程序
For Each dr As DataRow In DataTables("主窗口").Select("","机械分类")'列出所有装备代号
    Dim y,m,d As Integer
    Dim dt1 As Date = Date.Today
    Dim dt2 As Date = dr("一级保养1")
    DateYMD(dt1,dt2,y,m,d)
    If dr("机械分类") ="蓄电池叉车" Or dr("机械分类") ="蓄电池牵引车" Then
        If y >=1 And y<3 Or ( dr("工作时间") -Math.Max(dr("一级保养2"),Math.Max(dr("大修2"),dr("中修2")))>=350 And dr("工作时间")-Math.Max(dr("一级保养2") ,Math.Max(dr("大修2"),dr("中修2")))<1000 ) Then
            '和上次一级保养时间比,间隔大于一年小于三年,或和一级保养工作时间,大修工作时间,中修工作时间中的最大值比,再次工作时间大于350h且小于1000h时提示需要一级保养
            Dim vr As WinForm.ListViewRow = lvw4.Rows.Add()
            vr.Text = dr("装备代号")
            vr.Name = dr("装备代号") '将ListViewRow的Name属性设置为装备代号
            vr.Font = New Font("微软雅黑",12)
            If dr("机械分类") = "蓄电池叉车" Then
                vr.ImageKey = "蓄电池叉车"
            Else If dr("机械分类") = "蓄电池牵引车" Then
                vr.ImageKey = "蓄电池牵引车"
            Else
                vr.ImageKey = "内燃机械"
            End If
        End If
    Else
        '此处开始设定内燃机械一级保养条件
        If y >=1 And y<3 Or ( dr("工作时间") -Math.Max(dr("一级保养2"),Math.Max(dr("大修2"),dr("中修2")))>=150) And dr("工作时间")-Math.Max(dr("一级保养2"),Math.Max(dr("大修2"),dr("中修2")))<450 )  Then
            Dim vr As WinForm.ListViewRow = lvw4.Rows.Add()
            vr.Text = dr("装备代号")
            vr.Name = dr("装备代号") '将ListViewRow的Name属性设置为装备代号
            vr.Font = New Font("微软雅黑",12)
            If dr("机械分类") = "蓄电池叉车" Then
                vr.ImageKey = "蓄电池叉车"
            Else If dr("机械分类") = "蓄电池牵引车" Then
                vr.ImageKey = "蓄电池牵引车"
            Else
                vr.ImageKey = "内燃机械"
            End If
        End If
    End If
Next


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


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2016/10/3 18:57:00 [只看该作者]

y >=1 And y<3  肯定要加括号的:
(y >=1 And y<3 )

我要是你,先写一个短的:

if  dr("工作时间") -Math.Max(dr("一级保养2"),Math.Max(dr("大修2"),dr("中修2")))>=350

没有问题,加长:

if dr("工作时间") -Math.Max(dr("一级保养2"),Math.Max(dr("大修2"),dr("中修2")))>=350 And dr("工作时间")-Math.Max(dr("一级保养2") ,Math.Max(dr("大修2"),dr("中修2")))<1000

如果有问题,用messagebox显示数据各列数据,看看问题是什么。

没有问题,继续加长:

If (y >=1 And y<3) Or ( dr("工作时间") -Math.Max(dr("一级保养2"),Math.Max(dr("大修2"),dr("中修2")))>=350 And dr("工作时间")-Math.Max(dr("一级保养2") ,Math.Max(dr("大修2"),dr("中修2")))<1000 ) Then

这种问题,别人不了解你的业务逻辑,也没有数据,无法帮你,自己分析最方便。

如果一定要帮忙,你也得告诉大家各列输入的数据是什么,条件是否应该成立,结果出了什么问题。
[此贴子已经被作者于2016/10/3 18:59:29编辑过]

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


加好友 发短信
等级:幼狐 帖子:170 积分:1195 威望:0 精华:0 注册:2016/2/21 18:26:00
  发帖心情 Post By:2016/10/3 20:04:00 [只看该作者]

感谢老师,经过思考~~~很神奇的发现第一句复杂的判断通过了而第二句几乎一样的挂了~~~于是乎我把第一句复制到第二句的位置上再把数字改了下~~~然后通过了~~~

 

~~~~于是我又仔细观察之前写的程序,的确是一模一样的~~~~于是我也不知道怎么回事反正就来回复了图片点击可在新窗口打开查看

 

从八月中旬学习foxtable(动手操作)到现在已经一个半月了~~~程序就快大功告成~~~老师们等我的好消息吧~~~

自吹下~~感觉自己做的比那些实例美观而且功能强多了,感谢老师一路栽培,等测试阶段还请老师继续答疑解惑~~~

 

献上一张图~~~PS 主要功能已经全部做完,还剩下界面美化和部分简单功能了~~~没做完原因也是因为试用版只能用15个表和20个窗口~~~不够用了~~得买开发版了

 

图片点击可在新窗口打开查看~~~~~那些等着现成模版的同志们还是赶快踏踏实实学吧~~~~我那么笨都学会了~~~你们那么聪明一定也可以的~~~~~

 

 

 


图片点击可在新窗口打开查看此主题相关图片如下:进展1.png
图片点击可在新窗口打开查看

 回到顶部