以文本方式查看主题 - 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 -- [求助]三个表之间的计算
表名:档案表
表名:收款表
表名:扣款表
如上所示:有三张表。其中“档案表”中的【当前余额】应该为【建档余额】+【收款金额】再-【扣款金额】。我想做到的就是不论什么时间收款、扣款,相应卡号的当前余额都应该及时自动更新 并自动填充到“档案表”的【当前余额】中。 我能力有限,只能做到目前这种地步: 在“档案表”中的DataColChanged 事件中写代码,
For Each r As DataRow In DataTables("档案表").DataRows End If
而且就是写出来了,也有错,这段代码在调用“收款金额”“扣款金额”的时候,只调用相同卡号的最后一条记录。求狐爸帮忙。谢谢 |
||||||||||||||||||||||||||||||||||||||||||||||
-- 作者: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("卡号") & "\'") |
||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:Bin -- 发布时间:2013/7/22 14:57:00 -- 可以的呀.现在就是让你这么做呀.不过Compute 不是这么用的 你的代码错了.请认真参考帮助 |
||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:fjt4444 -- 发布时间:2013/7/22 15:02:00 -- If e.DataCol.Name="建档余额" And e.DataRow("状态")="正常" Then
请帮我检查一下。谢谢 是这样吗? |
||||||||||||||||||||||||||||||||||||||||||||||
-- 作者: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 |