以文本方式查看主题 - Foxtable(狐表) (http://www.foxtable.com/bbs/index.asp) -- 专家坐堂 (http://www.foxtable.com/bbs/list.asp?boardid=2) ---- 3个表的思路? (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=178351) |
-- 作者:swagger -- 发布时间:2022/6/30 23:03:00 -- 3个表的思路? 一共3个表,表A, 表B,表C。 表B的数据 是从表C复制行来的。现在想每次从表C复制一次数据到表B,从表A对应的数据扣减一次,一直扣到余额不够为止,如果超出余额则不允许复制。 如附件图片,表A是主表,副表是表B。表A有张三两张订单,第一张是100元,第二张是200元。表C编号sr123一共收到张三的500元。表B发货id 1的订单对应是表A的ID 1, id2对应是表A的ID2。 新增从表C复制 scr123到表B,然后根据表A的发货金额,每复制一次,扣对应的发货金额一次,一直扣到500元。超过500元就不允许复制 请问老师,这个思路该怎么做? 用跨表统计(试了一下不太行)还是先生成一个临时表,然后通过数据对比表A,表C的金额?还是其它方法? [此贴子已经被作者于2022/6/30 23:03:38编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/6/30 23:16:00 -- 表B增加一个发货金额列、datacolchanged 如果录入了发货id和客户,使用compute统计当前表同一个发货id和客户的已收金额和发货金额,如果统计结果已收金额<=发货金额,退出事件,否则就根据发货id和客户从表A、表C查询复制数据
|
-- 作者:swagger -- 发布时间:2022/7/1 22:36:00 -- 表B,datacolchanged: Dim pr As DataRow = DataTables("表B").Find("收入ID = \'" & e.NewValue & "\'") If pr IsNot Nothing Then e.DataRow("发货金额") = DataTables("表A").Compute("Sum(发货金额)","[收入ID] = \'" & e.NewValue & "\'") End If Dim dr As DataRow = DataTables("表B").Find("收入ID = \'" & e.NewValue & "\'") If dr IsNot Nothing Then e.DataRow("已收金额") = DataTables("表C").Compute("Sum(已收金额)","[收入ID] = \'" & e.NewValue & "\'") End If If e.DataRow("已收金额") < e.DataRow("发货金额") Then msgbox ("金额错误") End If 这个代码? 从跨表统计A,C两个表,我测试一下,怎么都弹出”金额错误“ 。 或者不跨表,改为e.DataRow("发货总金额") = DataTables("表B").Compute("Sum(发货金额)","[收入ID] = \'" & e.NewValue & "\'") e.DataRow("已收总金额") = DataTables("表C").Compute("Sum(已收金额)","[收入ID] = \'" & e.NewValue & "\'"), 也不行,一样弹出错误信息。 [此贴子已经被作者于2022/7/1 22:36:51编辑过]
|
-- 作者:有点蓝 -- 发布时间:2022/7/2 9:28:00 -- 先看看:http://www.foxtable.com/webhelp/topics/1522.htm Dim dr As DataRow = e.DataRow Select Case e.DataCol.Name Case "收入ID","客户" if e.datarow.isnull("收入ID")=false orelse e.datarow.isnull("客户")=false then dim je1 as double = DataTables("表A").Compute("Sum(发货金额)","[客户] = \'" & dr("客户") & "\'") dim je2 as double = DataTables("表C").Compute("Sum(已收金额)","[收入ID] = \'" & dr("收入ID") & "\'") if je1 < je2 then msgbox("客户" & dr("客户") & "的发货金额<已收金额") else msgbox("客户" & dr("客户") & "的发货金额>=已收金额") end if end if End Select
|
-- 作者:swagger -- 发布时间:2022/7/3 22:44:00 -- 如果不符合条件就禁止新增行,是否把上述代码写到datarowadding? 提示datacol不是dataroweventargs。 Dim dr As DataRow = e.DataRow Select Case e.DataCol.Name Case "收入ID","客户" if e.datarow.isnull("收入ID")=false orelse e.datarow.isnull("客户")=false then dim je1 as double = DataTables("表A").Compute("Sum(发货金额)","[客户] = \'" & dr("客户") & "\'") dim je2 as double = DataTables("表C").Compute("Sum(已收金额)","[收入ID] = \'" & dr("收入ID") & "\'") if je1 < je2 then msgbox("客户" & dr("客户") & "的发货金额<已收金额") else e.cancel = true msgbox("客户" & dr("客户") & "的发货金额>=已收金额") end if end if End Select |
-- 作者:有点蓝 -- 发布时间:2022/7/3 22:59:00 -- datarowadding事件就不需要判断列名了。另外这个事件触发的时候这个行所有列都不会有值的。所以这个事件无法判断 |