以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  跨表条件合并引用  (http://foxtable.com/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
--  
这种用法几万行数据重置肯定慢的,没有办法。更改代码后也就已有的数据重置一次即可,新录入的数据不需要重置,不更改代码的时候也不需要动不动就重置。