-- 作者:沦落深蓝
-- 发布时间: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编辑过]
|
-- 作者:沦落深蓝
-- 发布时间: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编辑过]
|
-- 作者:沦落深蓝
-- 发布时间: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
|
-- 作者:狐狸爸爸
-- 发布时间: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编辑过]
|
-- 作者:沦落深蓝
-- 发布时间:2016/10/3 20:04:00
--
感谢老师,经过思考~~~很神奇的发现第一句复杂的判断通过了而第二句几乎一样的挂了~~~于是乎我把第一句复制到第二句的位置上再把数字改了下~~~然后通过了~~~
~~~~于是我又仔细观察之前写的程序,的确是一模一样的~~~~于是我也不知道怎么回事反正就来回复了
从八月中旬学习foxtable(动手操作)到现在已经一个半月了~~~程序就快大功告成~~~老师们等我的好消息吧~~~
自吹下~~感觉自己做的比那些实例美观而且功能强多了,感谢老师一路栽培,等测试阶段还请老师继续答疑解惑~~~
献上一张图~~~PS 主要功能已经全部做完,还剩下界面美化和部分简单功能了~~~没做完原因也是因为试用版只能用15个表和20个窗口~~~不够用了~~得买开发版了
~~~~~那些等着现成模版的同志们还是赶快踏踏实实学吧~~~~我那么笨都学会了~~~你们那么聪明一定也可以的~~~~~
此主题相关图片如下:进展1.png

|