【问题标题】:'The string is non-numeric' error in a crystal reports Formula水晶报告公式中的“字符串是非数字”错误
【发布时间】:2022-01-28 22:07:00
【问题描述】:

我在水晶报表中添加了一个公式来显示字段的值。但它在 cardno 变量中向我显示错误“字符串是非数字的”。以下是我的公式代码:

StringVar cardno;
NumberVar current_len;
NumberVar card_len;
NumberVar start;
NumberVar last;
StringVar ca;

card_len := ToNumber (Mid ({@lens},1,2));
start    := ToNumber (Mid ({@lens},3,2));
last     := ToNumber (Mid ({@lens},5,2));

current_len := Length (Trim (ToText({CA.CA}, 0 ,'')));

ca := ReplicateString("0",card_len-current_len) + Totext({CA.CA},0,'');

If card_len > current_len Then
    If start = 0 Then
        If last <= 1 Then
            cardno := Mid(ca, last, card_len)            
        Else
            cardno := ReplicateString("X",last-start-1) + Mid(ca, last, card_len)           
Else
    cardno := Mid (ca,1,start) + ReplicateString("X",last-start-1) + Mid(ca, last, card_len);

请提供解决方案以避免此错误。提前致谢。

【问题讨论】:

  • 你能发布一个数字的例子和所需的掩码吗?
  • 我需要像“cardno=XXXXXX1234”这样的cardno。
  • 字符串的长度是否恒定?或者有效长度是多少?
  • 另外,@len 公式基于什么?公式是否可能为空或不以至少 6 个数字字符开头?我只看到了您从 ToNumber() 函数调用中得到的错误。
  • 那么,您想屏蔽除数字字符串表示的最后 4 位以外的所有数字(可能是信用卡号)?我的回答就是这样。

标签: crystal-reports


【解决方案1】:

你为什么不做这样的事情:

Select Len({table.field})

//AmEx
Case 15:  Picture({table.field}, "XXXX XXXXXX XXXXX")

//Visa
Case 16:  Picture({table.field}, "XXXX XXXX XXXX XXXX")

Default:  {table.field}

** 编辑 **

Replace(Space(Len({table.field})-4), " ", "X") + Right({table.field},4)

【讨论】:

  • 感谢您的解决方案,但我在声明 cardno 时遇到错误。
  • 无论我在 Internet 上看到 Mid() 函数的任何示例,我都只看到将数字作为参数传递。我们不能将变量作为参数传递给它吗?
  • @maddy2011 使用变量不是问题,只要它们总是包含有效值并且在调用函数时永远不会为空。如果有任何无效的可能性,在传递它之前总是检查值是个好主意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多