当前位置:  开发笔记 > 编程语言 > 正文

Crystal Reports公式:IsNull + Iif

如何解决《CrystalReports公式:IsNull+Iif》经验,为你挑选了3个好方法。

在这个网站上有这个问题的答案提示,但我问的是一个稍微不同的问题.

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给出了

[返回]如果expression为True则返回truePart,如果expression为False则返回falsePart.返回值的类型与truePart和falsePart的类型相同.

我想如果你盯着关于"返回值类型"的那一行你可以得到它,但是......



1> 小智..:

Crystal Reports在哪里记录此语法不起作用?

我怀疑在整个宇宙中有足够大的空间来记录在Crystal Reports中不起作用的一切......



2> LittleBobbyT..:

我知道我在这个问题上已经很晚了,但是我在尝试找出同样的事情时遇到了这个问题.有趣的是,我甚至无法在Crystal Reports文档中找到答案,而是在IBM的链接中找到答案.

Baiscally,如果你正在使用Crystal Reports 8.x中或10.x的,ISNULL并且IIF不一起工作.从网站:

原因

Crystal Reports 8.x和10.x中存在一个缺陷,导致上述公式无法正常工作.'IIF'和'IsNull'命令不能一起工作,包括尝试使用"Not"来修改IsNull命令; 例如,IIF(Not IsNull()).

解决问题

解决方法是使用"If-Then-Else"语句.例如,

If IsNull({~CRPT_TMP0001_ttx.install_date}) Then "TBD" Else "In Progress"

所以如果你使用的是CR 8.x或10.x(我们是),那你就不走运了.当您将多个字段连接在一起并且其中一个字段可能为NULL时,它会变得非常有趣.



3> Arvo..:

我认为CR会评估两个IIF的真假部分.因为那里有"Trim({PatientProfile.Middle})"部分,它将被评估为aganst null值,CR公式评估器似乎只是失败了.


从CR帮助:在返回结果之前评估IIF函数的每个参数.因此,使用IIF时应注意不良副作用.例如,如果falsePart导致除零,则会发生错误,即使expression为True,也会返回truePart.
推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有