Foxtable(狐表)用户栏目专家坐堂 → [求助]请教2个问题


  共有4879人关注过本帖树形打印复制链接

主题:[求助]请教2个问题

帅哥哟,离线,有人找我吗?
Bin
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/5/19 11:53:00 [只看该作者]

请上对应的例子.

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/19 11:54:00 [只看该作者]

回复10楼,不理解你的意思。

 

如果客户是有重复的,就应该用证件号作为唯一标识。


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/5/19 11:56:00 [只看该作者]

或者自己先参考一下这里,试试看能否动手完成http://www.foxtable.com/help/topics/2490.htm

 回到顶部
帅哥哟,离线,有人找我吗?
ahbrq
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:314 积分:2412 威望:0 精华:0 注册:2013/9/29 20:41:00
  发帖心情 Post By:2014/5/20 22:33:00 [只看该作者]

请问“客户资料”中的“证件号码”与“理财积分”中的“证件号码”格式不同,但都是字符型的,我用Substring函数来做判断如下:

 

If e.DataCol.Name = "客户名称" Then
    Dim cszf As Double = DataTables("储蓄积分").Compute("sum(储蓄积分)", "客户名称 = '" & e.DataRow("客户名称") & "' and 证件号码 = '" & e.DataRow("证件号码") & "'")
   Dim lczf As Double = DataTables("理财积分").Compute("sum(理财积分)", "客户名称 = '" & e.DataRow("客户名称") & "' and 证件号码.substring(1,13) = '" & e.DataRow("证件号码").Substring(2,13) & "'")
    e.DataRow("合计积分") = cszf + lczf
 
   Dim dhjf As Double = DataTables("积分兑换明细").Compute("sum(兑换积分)", "客户名称 = '" & e.DataRow("客户名称") & "' and 证件号码 = '" & e.DataRow("证件号码") & "'")
   e.DataRow("兑换积分") = dhjf

End If

 

但是出现错误:.NET Framework 版本:2.0.50727.3053
Foxtable 版本:2014.3.8.1
错误所在事件:表,客户资料, DataColChanged
详细错误信息:
Exception has been thrown by the target of an invocation.
The expression contains undefined function call 证件号码.substring().

 

如何纠正呢?


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/20 22:36:00 [只看该作者]

 证件号码格式不同,数据本来就错了,这是不规范的。

 

 要从源头做起,把不同的证件号规范起来。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/20 22:37:00 [只看该作者]

 如果要改代码,参考这里,substring要这样写

 

Substring

说明 从字符串中的指定位置开始,返回指定长度的子字符串。
语法 Substring(expression, start, Length)
参数 expression — 原字符串。
start — 起始位置,从1开始编号。
Length — 返回长度。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/20 22:37:00 [只看该作者]

If e.DataCol.Name = "客户名称" Then
    Dim cszf As Double = DataTables("储蓄积分").Compute("sum(储蓄积分)", "客户名称 = '" & e.DataRow("客户名称") & "' and 证件号码 = '" & e.DataRow("证件号码") & "'")
   Dim lczf As Double = DataTables("理财积分").Compute("sum(理财积分)", "客户名称 = '" & e.DataRow("客户名称") & "' and substring(证件号码,1,13) = '" & e.DataRow("证件号码").Substring(2,13) & "'")
    e.DataRow("合计积分") = cszf + lczf
 
   Dim dhjf As Double = DataTables("积分兑换明细").Compute("sum(兑换积分)", "客户名称 = '" & e.DataRow("客户名称") & "' and 证件号码 = '" & e.DataRow("证件号码") & "'")
   e.DataRow("兑换积分") = dhjf

End If


 回到顶部
帅哥哟,离线,有人找我吗?
ahbrq
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:314 积分:2412 威望:0 精华:0 注册:2013/9/29 20:41:00
  发帖心情 Post By:2014/5/20 22:57:00 [只看该作者]

证件号码格式都是字符型,但内容是:340102197602191026   和   3.40102197602191E+17   和   3.40111196607134E+17  我只有通过判断部分字符断来确定

340102197602191026   和   3.40102197602191E+17   是同一个人。所以就要引用substring函数:

语法:

SubString(StartIndex)
SubString(StartIndex, Length)

参数:

StartIndex: 子字符串的开始位置。
Length: 可选参数,子字符串的长度。

如果忽略长度,则返回自指定位置开始的所有字符串。

 

和老师给我的有点不同。

而且把老师的代码运行任然报错:

.NET Framework 版本:2.0.50727.3053
Foxtable 版本:2014.3.8.1
错误所在事件:表,客户资料, DataColChanged
详细错误信息:
Exception has been thrown by the target of an invocation.
startIndex cannot be larger than length of string.
Parameter name: startIndex
不过,这次报错是:初始位置不能大于字符长度。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/20 23:00:00 [只看该作者]

 回复18楼,可能是你的数据有空值、或者不规范的值。你检查一下

 

 你应该循环一次把证件号码改正确的才对,而不是每次截取一部分内容比较。


 回到顶部
帅哥哟,离线,有人找我吗?
ahbrq
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:314 积分:2412 威望:0 精华:0 注册:2013/9/29 20:41:00
  发帖心情 Post By:2014/5/22 22:34:00 [只看该作者]

我从“理财积分”表中生成一个没有重复的带有正确身份证号码的“客户身份证号码”表。

接着:判断“储蓄积分”表中如果与“客户身份证号码”表中是同一人(即客户名称相同,证件号码大致相同),则用“客户身份证号码”中正确的身份证号码填入

        否则还用原来的号码。怎么啊还是错误。

 

 

Select Case e.DataCol.name
    Case  "客户名称","证件号码"
        If e.DataRow("客户名称") = DataTables("客户身份证号码").datacols("客户名称")  AndAlso substring(DataTables("客户身份证号码").datacols("证件号码"),2,13) = '" & e.DataRow("证件号码").Substring(2,12)   Then
          e.DataRow("证件号码")=DataTables("客户身份证号码").datacols("证件号码")
      Else
           e.DataRow("证件号码")=e.DataRow("证件号码1")
          
      End If
End Select

 


 回到顶部
总数 30 上一页 1 2 3 下一页