【发布时间】:2009-02-10 20:04:18
【问题描述】:
在这个网站上到处都有这个问题的答案提示,但我问的是一个稍微不同的问题。
Crystal Reports 在哪里记录了这种语法不起作用?
Trim({PatientProfile.First}) + " "
+ Trim(Iif(
IsNull({PatientProfile.Middle})
, Trim({PatientProfile.Middle}) + " "
, " "
)
)
+ Trim({PatientProfile.Last})
我知道解决办法是
If IsNull({PatientProfile.Middle}) Then
Trim({PatientProfile.First})
+ " " + Trim({PatientProfile.Last})
Else
Trim({PatientProfile.First})
+ " " + Trim({PatientProfile.Middle})
+ " " + Trim({PatientProfile.Last})
但是我们应该如何确定我们不能使用第一个版本?
IsNull 的文档说
- 评估当前记录中指定的字段,如果该字段包含空值,则返回 TRUE
而 Iif 给出
- [返回] 如果表达式为 True,则返回 truePart,如果表达式为 False,则返回 falsePart。返回值的类型与truePart和falsePart的类型相同。
我想如果你盯着关于“返回值的类型”的那一行你可以得到它,但是......
【问题讨论】:
-
我今天手边没有 CRXI,但是第一个有什么不工作的呢?它只是间距错误(这是代码中的逻辑错误 - 你有一个额外的 Trim() 在那里)还是以其他方式失败?
-
对于 .Middle 为 NULL 的记录,CR 无法评估 Trim(.Middle) 中的字符串值,并决定 Iif 的值为 NULL,即使我在那里进行了显式测试.
标签: crystal-reports isnull iif-function