我在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块中有很多行都有)表明这应该有效。
由于
答案 0 :(得分:0)
根据以下2个网站,我真的认为你可以在if-else中有多个语句,但我尝试的没有任何工作。
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在范围内的最终声明后不需要分号,但在每个声明的末尾添加分号可能是一种好习惯,因为这将有助于避免此类问题。