以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  跨表复制不重复的行内容  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=84891)

--  作者:benwong2013
--  发布时间:2016/5/12 16:04:00
--  跨表复制不重复的行内容

If e.DataCol.Name = "仓库物料编号" Then

    Dim dr As DataRow = DataTables("A").Find("仓库物料编号 = \'" & e.NewValue & "\'")

    If dr Is Nothing Then

        dr = DataTables("B").AddNew()

        dr("物料名称") = e.DataRow("物料名称")

        dr("规格") = e.DataRow("规格")

        dr("等级") = e.DataRow("等级")

        dr("单位") = e.DataRow("单位")

        dr("仓库物料编号") = e.DataRow("仓库物料编号")

    End If

End If


在表A和表B有部分列的内容一样,若表A新增一个仓库物料编号,若表B中没有找到的话,则表B新增一行,并将仓库物料编号、物料名称、规格、等级、单位填入新增的行中,但这个单位只能填入仓库物料编号,其它的不能自动填入;


表A中可能会存在多行一样编号的仓库物料编号,表B只有一个仓库物料编号与其对应,若表A的编号不变的情况下,其它列变化,系统不做处理,请问应该如何处理?


--  作者:大红袍
--  发布时间:2016/5/12 16:13:00
--  

 看看这个例子吧

 

http://www.foxtable.com/help/topics/2490.htm

 


--  作者:benwong2013
--  发布时间:2016/5/12 16:37:00
--  
Select Case e.DataCol.name
    Case "仓库物料编号"
        Dim dr As DataRow = DataTables("表B").Find("仓库物料编号 = \'" & e.OldValue & "\'")
        If dr Is Nothing Then
            dr = DataTables("表B").AddNew()
            dr("仓库物料编号") = e.DataRow("仓库物料编号")
            dr("物料名称") = e.DataRow("物料名称")
            dr("规格") = e.DataRow("规格")
            dr("等级") = e.DataRow("等级")
            dr("单位") = e.DataRow("单位")
        Else
            dr("仓库物料编号") = e.DataRow("仓库物料编号")
        End If
    Case "物料名称","规格","等级","单位"
        Dim dr As DataRow = DataTables("表B").Find("仓库物料编号 = \'" & e.DataRow("仓库物料编号") & "\'")
        If dr IsNot Nothing Then
            dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name)
        End If
End Select

发现在表A增加一个行,仓库物料编号一样,若其它列信息有修改的时候,表B中会出现一行空的,请问如何处理?

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

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

[此贴子已经被作者于2016/5/12 16:40:31编辑过]

--  作者:大红袍
--  发布时间:2016/5/12 16:54:00
--  

Select Case e.DataCol.name
    Case "仓库物料编号"
   Dim dr As DataRow
        If e.oldvalue = Nothing Then
            dr = DataTables("表B").Find("仓库物料编号 = \'" & e.newvalue & "\'")
        Else
            dr = DataTables("表B").Find("仓库物料编号 = \'" & e.oldvalue & "\'")
        End If
        If dr Is Nothing Then
            dr = DataTables("表B").AddNew()
            dr("仓库物料编号") = e.DataRow("仓库物料编号")
            dr("物料名称") = e.DataRow("物料名称")
            dr("规格") = e.DataRow("规格")
            dr("等级") = e.DataRow("等级")
            dr("单位") = e.DataRow("单位")
        Else
            dr("仓库物料编号") = e.DataRow("仓库物料编号")
        End If
    Case "物料名称","规格","等级","单位"
        Dim dr As DataRow = DataTables("表B").Find("仓库物料编号 = \'" & e.DataRow("仓库物料编号") & "\'")
        If dr IsNot Nothing Then
            dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name)
        End If
End Select


--  作者:凡夫俗子
--  发布时间:2016/5/12 18:50:00
--  
编码编码编码

如果数据量大了,就等死你

--  作者:大红袍
--  发布时间:2016/5/12 20:10:00
--  
以下是引用凡夫俗子在2016/5/12 18:50:00的发言:
编码编码编码

如果数据量大了,就等死你

 

为什么?具体实例。


--  作者:凡夫俗子
--  发布时间:2016/5/13 9:46:00
--  
很简单,你不要总是拿几条数据的增删修改来测试。随便一个表随机生成两万条数据,再进行全部的增删修改,再保存。是不是等死,要老半天才好,任务管理器显示程序失去反应。而这些我都改写了方法,均实现秒级完成。相信狐爸在内核级肯定也能完成,效果更好。
--  作者:benwong2013
--  发布时间:2016/5/13 14:51:00
--  
请问用什么办法?
[此贴子已经被作者于2016/5/13 14:51:38编辑过]

--  作者:大红袍
--  发布时间:2016/5/13 14:53:00
--  
以下是引用benwong2013在2016/5/13 14:51:00的发言:
请问用什么办法?
[此贴子已经被作者于2016/5/13 14:51:38编辑过]

 

人家说的东西和你做的东西没有任何关联。


--  作者:benwong2013
--  发布时间:2016/5/13 15:00:00
--  
上面的代码是进行一列重复性的判定,若要进行两列的重复性判定,但两列判定满足的时候才进行,请问应如何处理?