以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 跨表条件合并引用 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=169223) |
-- 作者:ganlan -- 发布时间:2021/6/7 21:33:00 -- 跨表条件合并引用 If e.DataCol.Name = "订单号" Then If e.NewValue Is Nothing Then e.DataRow("是否发货") = Nothing Else Dim cr As DataRow cr = DataTables("第二次发货").Find("[订单号] = \'" & e.NewValue & "\'") Dim cz As DataRow cz = DataTables("销售直接发货").Find("[订单号] = \'" & e.NewValue & "\'") If cr IsNot Nothing Then e.DataRow("是否发货") = cr("第二次发货单号") + If e.DataRow("订单号") <> cz("直接发货订单号") Then cz("直接发货订单号") End If (想表达如果订单有两次发货就把两次发货的订单号都合并一起,直接发货没发,只在第二次出现就写入第二次发货的单号,如果第二次没发,在直接发货里发货,就写入直接发货的单号,直接发货里面有个判断,就是发货单号不等于订单号才是发货了,如果等于是没有发货的,这个不知道该如何编写代码,尝试好久都没摸索出来) Else e.DataRow("是否发货") = Nothing End If End If End If [此贴子已经被作者于2021/6/7 21:34:00编辑过]
|
-- 作者:有点蓝 -- 发布时间:2021/6/7 21:42:00 -- If e.DataCol.Name = "订单号" Then If e.NewValue Is Nothing Then e.DataRow("是否发货") = Nothing Else Dim dh As String Dim cr As DataRow cr = DataTables("第二次发货").Find("[订单号] = \'" & e.NewValue & "\'") If cr IsNot Nothing Then dh = cr("第二次发货单号") End If cr = DataTables("销售直接发货").Find("[订单号] = \'" & e.NewValue & "\' and 直接发货订单号 <> \'" & e.NewValue & "\'") If cr IsNot Nothing Then dh = dh & "," & cr("直接发货订单号") End If e.DataRow("是否发货") = dh End If End If
|
-- 作者:ganlan -- 发布时间:2021/6/7 21:51:00 -- 太有速度了,谢谢,实在太感谢了 |
-- 作者:ganlan -- 发布时间:2021/6/7 22:11:00 -- 我测试了如果有发货没有问题,我把发货删了,再重置了会卡死是什么原因呢 |
-- 作者:有点蓝 -- 发布时间:2021/6/7 22:45:00 -- 和其它代码冲突了,把datacolchanged事件完整代码发上来 |
-- 作者:ganlan -- 发布时间:2021/6/8 21:08:00 -- If e.DataCol.Name = "订单号" Then If e.NewValue Is Nothing Then \'e.DataRow("收款金额") = Nothing Else e.DataRow("收款金额") = DataTables("收款").Compute("sum(金额)","[订单编号] = \'" & e.NewValue & "\'") End If End If If e.DataCol.Name = "订单号" Then If e.NewValue Is Nothing Then e.DataRow("发货日") = Nothing e.DataRow("手机号") = Nothing e.DataRow("系统订单号") = Nothing e.DataRow("状态") = Nothing Else Dim cy As DataRow cy = DataTables("系统").Find("[平台订单号] = \'" & e.NewValue & "\'") If cy IsNot Nothing Then \'如果找到了同名的产品行,也就是dr不是Nothing e.DataRow("发货日") = cy("开始日期") e.DataRow("手机号") = cy("联系电话") e.DataRow("系统订单号") = cy("订单号") e.DataRow("状态") = cy("订单状态") Else e.DataRow("发货日") = Nothing e.DataRow("手机号") = Nothing e.DataRow("系统订单号") = Nothing e.DataRow("状态") = Nothing End If End If End If If e.DataCol.Name = "系统订单号" Then If e.NewValue Is Nothing Then e.DataRow("是否发货") = Nothing Else Dim dh As String Dim cr As DataRow cr = DataTables("第二次发货").Find("[系统订单号] = \'" & e.NewValue & "\'") If cr IsNot Nothing Then dh = cr("第二次发货单号") End If cr = DataTables("销售直接发货").Find("[系统订单号] = \'" & e.NewValue & "\'and 直接发货订单号 <> \'" & e.NewValue & "\'") If cr IsNot Nothing Then \' dh = dh & "," & cr("直接发货订单号") End If e.DataRow("是否发货") = dh End If End If If e.DataCol.Name = "订单号" Then If e.NewValue Is Nothing Then e.DataRow("供应商") = Nothing Else Dim br As DataRow br = DataTables("A").Find("[订单号] = \'" & e.NewValue & "\'") If br IsNot Nothing Then e.DataRow("供应商") = br("供应商") Else If e.NewValue Is Nothing Then e.DataRow("供应商") = Nothing Else Dim bl As DataRow bl = DataTables("B").Find("[订单号] = \'" & e.NewValue & "\'") If bl IsNot Nothing Then e.DataRow("供应商") = bl("供应商") Else If e.NewValue Is Nothing Then e.DataRow("供应商") = Nothing Else Dim bc As DataRow bc = DataTables("C").Find("[订单号] = \'" & e.NewValue & "\'") If bc IsNot Nothing Then e.DataRow("供应商") = bc("供应商") End If End If End If End If End If End If End If
|
-- 作者:有点蓝 -- 发布时间:2021/6/8 21:32:00 -- 看不出什么问题。请上传实例测试 |
-- 作者:ganlan -- 发布时间:2021/6/10 23:26:00 -- 数据有大,是现有使用的数据不好上传,看了一下好像是这个判断会很卡,cr = DataTables("销售直接发货").Find("[系统订单号] = \'" & e.NewValue & "\'and 直接发货订单号 <> \'" & e.NewValue & "\'") |
-- 作者:ganlan -- 发布时间:2021/6/10 23:30:00 -- 我发现用like这个也是会很卡,只有用=作为条件的时候就不会卡,因为我的数据都是上万至几十万,如果在销售直接发货哪里加一列表达式判断,只有会不会快点 |
-- 作者:有点蓝 -- 发布时间:2021/6/11 8:46:00 -- 这种用法几万行数据重置肯定慢的,没有办法。更改代码后也就已有的数据重置一次即可,新录入的数据不需要重置,不更改代码的时候也不需要动不动就重置。 |