5

このサイトのあちこちにこの質問に対する答えのヒントがありますが、私は少し異なる質問をしています。

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のドキュメントには

  • 現在のレコードで指定されたフィールドを評価し、フィールドにnull値が含まれている場合はTRUEを返します

そしてIifは与える

  • [戻り値]式がTrueの場合はtruePart、式がFalseの場合はfalsePart。戻り値のタイプは、truePartおよびfalsePartのタイプと同じです。

「戻り値の種類」についてその行を見つめればわかると思いますが…

4

4 に答える 4

11

この構文が機能しないことは、Crystal Reports のどこに記載されていますか?

Crystal Reports で機能しないものすべてを文書化するのに十分な大きさの場所が宇宙全体にあるとは思えません...

于 2011-01-07T16:07:49.997 に答える
6

私はこれに何年も遅れていることを知っていますが、同じことを理解しようとしているときにこの質問に出くわしました。おかしなことに、Crystal Reportsのドキュメントでは答えを見つけることができませんでしたが、代わりにIBMへのリンクで答えを見つけることができました。

基本的に、Crystal Reports 8.xまたは10.xを使用していて、一緒に動作ISNULLIIFない場合。サイトから:

原因

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(私たちが使用している)を使用している場合は、運が悪いことになります。複数のフィールドを連結していて、そのうちの1つがNULLである可能性がある場合は、非常に楽しくなります。

于 2011-05-19T13:07:07.593 に答える
5

CR は IIF の true 部分と false 部分の両方を評価すると思います。null 値に対して評価される "Trim({PatientProfile.Middle})" 部分があるため、CR 式評価器は失敗したようです。

于 2009-02-11T22:27:15.847 に答える
-3

これを試して:

currencyvar tt;
currencyvar dect;
tt :={ship.comm_amount};
dect := tt - Truncate(tt);
tt := truncate(tt);
dect := dect * 100;
if dect = 0 then
UPPERCASE('$ ' + ToWords (tt,0 )) + ' ONLY'
else
UPPERCASE('$ ' + ToWords (tt,0) + ' And ' + ToWords(dect,0)) + ' ONLY ';
于 2011-06-28T20:27:18.213 に答える