Foxtable(狐表)用户栏目专家坐堂 → 3个表的思路?


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

主题:3个表的思路?

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


加好友 发短信
等级:三尾狐 帖子:689 积分:5362 威望:0 精华:0 注册:2012/8/25 20:50:00
3个表的思路?  发帖心情 Post By:2022/6/30 23:03:00 [只看该作者]

一共3个表,表A, 表B,表C。

表B的数据 是从表C复制行来的。现在想每次从表C复制一次数据到表B,从表A对应的数据扣减一次,一直扣到余额不够为止,如果超出余额则不允许复制。

图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20220630230001.png
图片点击可在新窗口打开查看


如附件图片,表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编辑过]

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


加好友 发短信
等级:超级版主 帖子:105948 积分:538809 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/6/30 23:16:00 [只看该作者]

表B增加一个发货金额列、datacolchanged
如果录入了发货id和客户,使用compute统计当前表同一个发货id和客户的已收金额和发货金额,如果统计结果已收金额<=发货金额,退出事件,否则就根据发货id和客户从表A、表C查询复制数据

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


加好友 发短信
等级:三尾狐 帖子:689 积分:5362 威望:0 精华:0 注册:2012/8/25 20:50:00
  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:超级版主 帖子:105948 积分:538809 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:689 积分:5362 威望:0 精华:0 注册:2012/8/25 20:50:00
  发帖心情 Post By: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

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


加好友 发短信
等级:超级版主 帖子:105948 积分:538809 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/7/3 22:59:00 [只看该作者]

datarowadding事件就不需要判断列名了。另外这个事件触发的时候这个行所有列都不会有值的。所以这个事件无法判断


 回到顶部