C# 在使用VS 2012保存Crystal Reports的自定义函数时,需要获取错误号消息
我需要在Crystal Reports 2010版中创建一个自定义函数。C# 在使用VS 2012保存Crystal Reports的自定义函数时,需要获取错误号消息,c#,visual-studio,visual-studio-2012,crystal-reports,C#,Visual Studio,Visual Studio 2012,Crystal Reports,我需要在Crystal Reports 2010版中创建一个自定义函数。 下面是代码。 在Visual Studio 2012中使用Field Explorer保存函数时,我不断收到一个错误“Number is required”。 它突出显示了这段代码:ret:=ret+fchar 你能告诉我我做错了什么吗。 我是否有任何语法问题可以纠正 我创建的自定义函数如下所示: 函数(StringVar rollNo、StringVar rollNoFormat) 当pos>0时 ( ret因为您在声明
下面是代码。
在Visual Studio 2012中使用Field Explorer保存函数时,我不断收到一个错误“Number is required”。
它突出显示了这段代码:ret:=ret+fchar 你能告诉我我做错了什么吗。
我是否有任何语法问题可以纠正 我创建的自定义函数如下所示: 函数(StringVar rollNo、StringVar rollNoFormat) 当pos>0时 (
ret因为您在声明fchar时试图将数字(pos)添加到字符串中。请尝试将pos转换为字符串:
localnumbervarpos:=Val(Length(rollNoFormat));
或类似的内容。基本上,您是在混合字符串和数字,所以请将其中一个转换为匹配项
希望有帮助
克里斯
编辑:
我尝试使用2个字符串字段来复制公式。我最终得到了一个与您不同的错误,这与括号有关。以下是使用rollno和rollnoFormat替代品对我有效的代码:
Local NumberVAR pos := Length(immaster.prodclass);
Local NumberVAR xpos := Length(immaster.itemtype);
Local StringVAR ret := "";
Local StringVAR fchar := "";
While pos > 0 Do (
fchar := Mid(rollNoFormat, pos, 1);
If (fchar = "X")
Then
(
ret := ret + Mid(rollNo, xpos, 1);
xpos := xpos - 1;
)
Else
(
ret := ret + fchar;
pos := pos - 1;
));
我把pos:=pos-1移到了ELSE后面的括号中,没有出现错误。所以要么是错误,要么是rollno或rollnoformat的值不是字符串。@Chris:不起作用。我相信长度是NumberVar类型。你能想点别的吗。现在,我可能读错了,但当你声明fchar时,你是e使用MID,但从最后一个字母(pos:=长度(rollNoFormat))开始,然后询问最后一个字母?您可以更容易地使用正确的(rollNoFormat,1,1)。这样您就不需要pos和XPO,也许这会让它更简洁。我想澄清一下,我的意思是长度接受一个类型StringVar并返回一个NumberVar。例如:NumberVar variable=Len(StringVar)因此,我们不需要像你所说的那样进行任何转换。我希望你告诉我,如果我在上面的测试中的任何构造/语法是错误的。例如,如果还有其他偏执等,或者你认为可能是错误的。我感谢你提前帮我。请让我知道。
fchar := Mid(rollNoFormat, pos, 1);
If (fchar = "X")
Then
(
ret := ret + Mid(rollNo, xpos, 1);
xpos := xpos - 1;
)
Else
(
ret := ret + fchar;
)
pos := pos - 1;
);
If (Length(rollNoFormat) = 0 )
Then
(
ret := rollNo;
)
Else
(
ret := StrReverse(ret);
)
Local NumberVAR pos := Length(immaster.prodclass);
Local NumberVAR xpos := Length(immaster.itemtype);
Local StringVAR ret := "";
Local StringVAR fchar := "";
While pos > 0 Do (
fchar := Mid(rollNoFormat, pos, 1);
If (fchar = "X")
Then
(
ret := ret + Mid(rollNo, xpos, 1);
xpos := xpos - 1;
)
Else
(
ret := ret + fchar;
pos := pos - 1;
));