Foxtable(狐表)用户栏目专家坐堂 → [求助]三个表之间的计算


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

主题:[求助]三个表之间的计算

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


加好友 发短信
等级:幼狐 帖子:118 积分:906 威望:0 精华:0 注册:2013/3/21 12:44:00
[求助]三个表之间的计算  发帖心情 Post By:2013/7/22 13:45:00 [只看该作者]

 

表名:档案表

 

  卡号    建档余额    当前余额     状态
   111    100.0        可用
   222    200.0        可用
   333    300.0        停用

 

 

         

表名:收款表

 

 卡    号     收款时间   收款金额  
   111    2013-05-05    100.0
   222    2013-05-06    200.0
   111     2013-05-07    300.0
   222    2013-05-08    400.0

 

表名:扣款表

 

 

  卡    号    扣款日期    扣款金额 
   111    2013-06-01    50
   222    2013-06-02    50
   111    2013-06-03    50
   222    2013-06-04    50

 

 

如上所示:有三张表。其中“档案表”中的【当前余额】应该为【建档余额】+【收款金额】再-【扣款金额】。我想做到的就是不论什么时间收款、扣款,相应卡号的当前余额都应该及时自动更新  并自动填充到“档案表”的【当前余额】中。

我能力有限,只能做到目前这种地步:

在“档案表”中的DataColChanged 事件中写代码,

 

For Each r As DataRow In DataTables("档案表").DataRows   
If e.DataCol.Name="卡号" And r("状态")="正常" Then
    For Each dr As DataRow In DataTables("收款表").DataRows   
    For Each dr1 As DataRow In DataTables("扣款表").DataRows
        If r("卡号")=e.NewValue Then
            r("当前余额")=r("建档余额")+dr("收款金额")-dr1("扣款金额")
        End If
    Next
    Next

End If
Next

 

而且就是写出来了,也有错,这段代码在调用“收款金额”“扣款金额”的时候,只调用相同卡号的最后一条记录。求狐爸帮忙。谢谢


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


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

扣款表中

If e.DataCol.Name="扣款金额" Then
    dim dr as datarow = datatables("档案表").Find("卡号='" & e.datarow("卡号") & "'")
    dim dr2 as datarow = datatables("收款表").Find("卡号='" & e.datarow("卡号") & "'")
    if dr isnot nothing then
            dr("当前余额")=dr("建档余额 ")+dr2("收款金额")-e.datarow("扣款金额")
    end if
end if

收款表

If e.DataCol.Name="收款金额" Then
    dim dr as datarow = datatables("档案表").Find("卡号='" & e.datarow("卡号") & "'")
    dim dr2 as datarow = datatables("扣款表").Find("卡号='" & e.datarow("卡号") & "'")
    if dr isnot nothing then
            dr("当前余额")=dr("建档余额 ")+e.datarow("收款金额")-dr2("扣款金额")
    end if
end if

档案表中

If e.DataCol.Name="建档余额And e.datarow("状态")="正常" Then
    dim dr as datarow = datatables("收款表").Find("卡号='" & e.datarow("卡号") & "'")
    dim dr2 as datarow = datatables("扣款表").Find("卡号='" & e.datarow("卡号") & "'")
    if dr isnot nothing then
            e.datarow("当前余额")=e.datarow("建档余额 ")+dr("收款金额")-dr2("扣款金额")
    end if
end if

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


加好友 发短信
等级:幼狐 帖子:118 积分:906 威望:0 精华:0 注册:2013/3/21 12:44:00
  发帖心情 Post By:2013/7/22 14:24:00 [只看该作者]

以下是引用Bin在2013-7-22 14:19:00的发言:
扣款表中

If e.DataCol.Name="扣款金额" Then
    dim dr as datarow = datatables("档案表").Find("卡号='" & e.datarow("卡号") & "'")
    dim dr2 as datarow = datatables("收款表").Find("卡号='" & e.datarow("卡号") & "'")
    if dr isnot nothing then
            dr("当前余额")=dr("建档余额 ")+dr2("收款金额")-e.datarow("扣款金额")
    end if
end if
 
 
 
 
Thanks you  马上试试

收款表

If e.DataCol.Name="收款金额" Then
    dim dr as datarow = datatables("档案表").Find("卡号='" & e.datarow("卡号") & "'")
    dim dr2 as datarow = datatables("扣款表").Find("卡号='" & e.datarow("卡号") & "'")
    if dr isnot nothing then
            dr("当前余额")=dr("建档余额 ")+e.datarow("收款金额")-dr2("扣款金额")
    end if
end if

档案表中

If e.DataCol.Name="建档余额And e.datarow("状态")="正常" Then
    dim dr as datarow = datatables("收款表").Find("卡号='" & e.datarow("卡号") & "'")
    dim dr2 as datarow = datatables("扣款表").Find("卡号='" & e.datarow("卡号") & "'")
    if dr isnot nothing then
            e.datarow("当前余额")=e.datarow("建档余额 ")+dr("收款金额")-dr2("扣款金额")
    end if
end if


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


加好友 发短信
等级:幼狐 帖子:118 积分:906 威望:0 精华:0 注册:2013/3/21 12:44:00
  发帖心情 Post By:2013/7/22 14:47:00 [只看该作者]

有问题。。。

还是那种情况,如果同一卡号有多条收款记录的话,代码找的是最后面一条,并没有将收款金额全部相加(同一卡号)。

同理  扣款 也是一样的


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/7/22 14:50:00 [只看该作者]

多条件记录的话就使用 DataTables("表A").Compute 来统计


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


加好友 发短信
等级:幼狐 帖子:118 积分:906 威望:0 精华:0 注册:2013/3/21 12:44:00
  发帖心情 Post By:2013/7/22 14:56:00 [只看该作者]

可不可以直接将FIND 换成Compute呢?

就像Dim dr As DataRow = DataTables("收款表").Compute("卡号='" & e.DataRow("卡号") & "'")
    Dim dr2 As DataRow = DataTables("规费记录").Compute("卡号='" & e.DataRow("卡号") & "'")


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/7/22 14:57:00 [只看该作者]

可以的呀.现在就是让你这么做呀.不过Compute 不是这么用的 你的代码错了.请认真参考帮助

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


加好友 发短信
等级:幼狐 帖子:118 积分:906 威望:0 精华:0 注册:2013/3/21 12:44:00
  发帖心情 Post By:2013/7/22 15:02:00 [只看该作者]

If e.DataCol.Name="建档余额" And e.DataRow("状态")="正常" Then
    Dim dr As DataRow = DataTables("收款表").Compute("Sum(充值金额)","卡号='" & e.DataRow("卡号") & "'")
    Dim dr2 As DataRow = DataTables("规费记录").Compute("Sum(扣款金额)","卡号='" & e.DataRow("卡号") & "'")
    If dr IsNot Nothing Then
            e.DataRow("当前余额")=e.DataRow("建档余额")+dr("充值金额")-dr2("扣款金额")
    End If
End If

 

 

 

请帮我检查一下。谢谢  是这样吗?


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178530 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2013/7/22 15:04:00 [只看该作者]

Dim Total As Long
Total = 
DataTables("订单").Compute("Sum(数量)""产品 = 'PD01'"
)
Output.Show(Total)  帮助里面不是有例子说明 应该用数值类型变量来储存吗? 你用datarow是无法正常运作的.

而且下面的也应该直接用变量参加运算

If e.DataCol.Name="建档余额" And e.DataRow("状态")="正常" Then
    Dim dr As Integer = DataTables("收款表").Compute("Sum(充值金额)","卡号='" & e.DataRow("卡号") & "'")
    Dim dr2 As Integer = DataTables("规费记录").Compute("Sum(扣款金额)","卡号='" & e.DataRow("卡号") & "'")
    If dr IsNot Nothing Then
            e.DataRow("当前余额")=e.DataRow("建档余额")+dr-dr2
    End If
End If

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


加好友 发短信
等级:幼狐 帖子:118 积分:906 威望:0 精华:0 注册:2013/3/21 12:44:00
  发帖心情 Post By:2013/7/22 15:06:00 [只看该作者]

If e.DataCol.Name="建档余额" And e.DataRow("状态")="正常" Then
    Dim dr As Integer = DataTables("收款表").Compute("Sum(充值金额)","卡号='" & e.DataRow("卡号") & "'")
    Dim dr2 As Integer = DataTables("规费记录").Compute("Sum(扣款金额)","卡号='" & e.DataRow("卡号") & "'")
 
            e.DataRow("当前余额")=e.DataRow("建档余额")+dr - dr2
  
End If

 回到顶部
总数 15 1 2 下一页