标题:请教IIF命令的使用方法!!
只看楼主
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
既然知道条件变化碰到钉子,还不好好思考怎么修改系统的设计,却把精力放在代码上。唉~

授人以渔,不授人以鱼。
2012-05-25 19:25
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:4 
回复 楼主 小主板
程序代码:
IIF( ) 函数

根据逻辑表达式的值,返回两个值中的某一个。

语法

IIF(lExpression, eExpression1, eExpression2)

参数

lExpression

指定要计算的逻辑表达式。

eExpression1, eExpression2

如果 lExpression 计算结果为“真”(.T.),返回 eExpression1;如果 lExpression 为“假”(.F.),则返回 eExpression2。

返回值类型
字符型、数字型、货币型、日期型或日期时间型

说明
该函数也称作 Immediate IF。它计算一个逻辑表达式的值,然后根据计算结果,返回两个表达式中的一个。如果逻辑表达式的值为“真”(.T.),则 IIF( ) 返回第一个表达式;如果逻辑表达式的值为“假”(.F.),则 IIF( ) 返回第二个表达式。

提示
对于简单的条件表达式,该函数可以代替 IF ... ENDIF 语句。在按条件指定报表和标签表达式中的字段内容时 IIF( ) 特别有用。iif( ) 函数比等价语句 IF ... ENDIF 执行速度快得多。
首先要掌握IF ENDIF语句的用法。 IIF()的用法与IF ENDIF的用法基本相同。


[ 本帖最后由 sdta 于 2012-5-25 21:52 编辑 ]

坚守VFP最后的阵地
2012-05-25 21:51
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
先看一个简单的示例:
一、如何判断一个数值型数据是否小于或等于零
NUM=5
IF ELSE ENDIF 的用法
程序代码:
IF NUM>0
   ?"大于零"
ELSE
   ?"小于或等于零"
ENDIF 
IIF()用法
? IIF(NUM>0,"大于零","小于零")
二、如何判断一个数值型数据是:1、大于零;2、小于零;3、等于零。
NUM=-5
IF ELSE ENDIF 的用法
程序代码:
IF NUM>0
   ?"大于零"
ELSE
   IF NUM=0
      ?"等于零"
   ELSE
      ?"小于零"
   ENDIF
ENDIF  

IIF()用法
? IIF(NUM>0,"大于零",IIF(NUM=0,"等于零","小于零")
平常多练习,由易到难。关键是判断条件设置要合理。




[ 本帖最后由 sdta 于 2012-5-26 00:55 编辑 ]

坚守VFP最后的阵地
2012-05-25 22:17
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
回复 11楼 TonyDeng
实际上楼主应该重新设计一个值班标准表,将这些条件全部放在这个表中,并设计对应的计算公式就行了,然后对这两个表(值班表)进行操作就行了,还简单易行。
值班标准表结构
职务 值班 指标 标志 标准 公式
正处    1    1    1 900  IIF(标志=1,标准,0)
.....
正处    1         2 800  IIF(标志=2,标准,0)
.....
正处              3 700  IIF(标志=3,标准,0)
.....
正处         1    4 760  IIF(标志=4,标准,0)
.....

公式字段可以做为参考,也可以不要。
这样设计还有一个好处,就是当程序编译后,如果遇到标准数据修改,只要修改数据表中的记录就行了,不用修改代码部分。灵活性高。

值班表结构做相应的修改就行了
值班表的结构可设置为:姓名,职务,标志,金额

两表操作就可以用UPDATE命令了。VFP9.0主要代码就一句
UPDATE 值班表 SET 值班表.金额=值班标准表.标准 FROM 值班标准表 WHERE 值班表.职务=值班标准表.职务 AND 值班表.标志=值班标准表.标志

从上面可以看出,合理的设计数据表结构,可以为后面的设置代码部分省略不少麻烦。

[ 本帖最后由 sdta 于 2012-5-25 23:24 编辑 ]

坚守VFP最后的阵地
2012-05-25 22:41
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
以下是引用sdta在2012-5-25 22:41:40的发言:

实际上楼主应该重新设计一个值班标准表,将这些条件全部放在这个表中,并设计对应的计算公式就行了,然后对这两个表(值班表)进行操作就行了,还简单易行。

对的

授人以渔,不授人以鱼。
2012-05-25 22:43
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
那种IIF()的写法,就算写对了,自己看着那代码,好看么?容易理解么?容易维护么?

授人以渔,不授人以鱼。
2012-05-25 22:46
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
回复 16楼 TonyDeng
同感

坚守VFP最后的阵地
2012-05-26 00:47
软件服务
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:344
专家分:736
注 册:2011-12-23
得分:4 
? (AT(职务,"干事股级副科正科副处正处")+3)/4*100 + iif(指标=1,iif(值班=0,300,200),iif(值班=0,160,100))

2012-05-27 16:19
小主板
Rank: 2
等 级:论坛游民
帖 子:187
专家分:21
注 册:2009-6-28
得分:0 
感谢qjbzjp!!可以加你的QQ为好友吗???
2012-05-27 21:34
小主板
Rank: 2
等 级:论坛游民
帖 子:187
专家分:21
注 册:2009-6-28
得分:0 
感谢sdta!!!
2012-05-27 21:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-368025-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.166681 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved