在if-else Crystal Report公式中更正多条执行行的语法

时间:2016-03-03 01:46:59

标签: if-statement crystal-reports

我在Crystal Report公式中一直收到错误“此处需要字符串”。突出显示的部分是“else”部分,表明错误在哪里。我尝试了很多不同的括号,没有括号,分号等等...有时我会得到一个不同的错误,但似乎没有任何效果。

Local stringVar outputString := ""; 
if isNull({Evaluation.Strategic}) then
(
 outputString := "None"
)
else
 (
stringVar array x := split({Evaluation.Strategic},"|"); 
Local numberVar i;
For i:=1 to Count(x) do
   (
   outputString := outputString + x[i] + Chr(10)
   )
);
outputString;

任何人都可以向我指出正确的语法来做我想做的事吗?我在网上找到的所有样本(在if-else块中有很多行都有)表明这应该有效。

由于

3 个答案:

答案 0 :(得分:0)

根据以下2个网站,我真的认为你可以在if-else中有多个语句,但我尝试的没有任何工作。

http://www.experts-exchange.com/questions/23735693/Multiple-line-IF-statement-in-Crystal-Reports.html

http://www.kenhamady.com/formulas/form08.shtml

我最终通过重构我的逻辑来实现这一点,如下所示。它有点笨重,但它让CR编译器感到高兴。

//Syntactically correct - this worked:
//-------------------------------------
Local stringVar outputString := ""; 
stringVar array x := "";
Local numberVar i; 

If isNull({Evaluation.Strategic}) Then
   (
    x := ""
   )
Else
   (
    x := split({Evaluation.Strategic},"|");
   );

If x <> "" Then
(
    For i:=1 to Count(x) do
     (
     outputString := outputString + x[i] + Chr(10)
     )
)
else
(
For i:=1 to Count(x) do
     (
     outputString := "None";
     );
);

outputString;

已编辑:另一个网站建议您在If中可以有多个语句: https://msdn.microsoft.com/en-us/library/ms225356(v=vs.80).aspx

答案 1 :(得分:0)

IF ([enter first condition here] or [enter second condition here])

然后([先在此处执行]; [在此处输入第二次执行]) ELSE 0

为我工作(来自第一个答案中的链接)

答案 2 :(得分:0)

您需要在每个语句的末尾记住分号,包括if

之后的分号

例如,这将无法验证-

if (myCondition) Then (
    a:= "First"
    b:= "Second"
)

if (myOtherCondition) Then (
    a:= a + "Other First"
    b:= b + "Other Second"
)

但是,如果添加分号,它将进行验证-

if (myCondition) Then (
    a:= "First";
    b:= "Second";
);

if (myOtherCondition) Then (
    a:= a + "Other First";
    b:= b + "Other Second";
);

虽然Crystal在范围内的最终声明后不需要分号,但在每个声明的末尾添加分号可能是一种好习惯,因为这将有助于避免此类问题。