2012-06-13 27 views
0

我已经把一个公式显示在晶体报告中并将其掩盖后显示一个字段的值。但它在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); 

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

+0

你会发布什么样的数量类似的例子,希望的掩模? – craig

+0

我需要cardno,如“cardno = XXXXXX1234”。 – maddy2012

+0

字符串的长度是否为常量?或者有效长度是多少? – craig

回答

0

你为什么不这样做:

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) 
+0

感谢您的解决方案,但我得到了cardno声明中的错误。 – maddy2012

+0

无论我在互联网上看到Mid()函数的例子,我只看到通过数字作为agruements。我们不能将变量作为参数传递给它吗? – maddy2012

+0

@ maddy2011只要它们的_always_包含有效值并且在函数被调用时永远不会为null,那么使用变量不是问题。如果任何可能性无效,总是在通过之前检查价值是一个好主意。 – Ryan