以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]三个表之间的计算  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=38190)

--  作者:fjt4444
--  发布时间: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
--  发布时间: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
--  发布时间: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
--  发布时间:2013/7/22 14:47:00
--  

有问题。。。

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

同理  扣款 也是一样的


--  作者:Bin
--  发布时间:2013/7/22 14:50:00
--  
多条件记录的话就使用 DataTables("表A").Compute 来统计


--  作者:fjt4444
--  发布时间: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
--  发布时间:2013/7/22 14:57:00
--  
可以的呀.现在就是让你这么做呀.不过Compute 不是这么用的 你的代码错了.请认真参考帮助
--  作者:fjt4444
--  发布时间: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
--  发布时间: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
--  发布时间: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