以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  非关联表的一个特殊问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=106408)

--  作者:douglas738888
--  发布时间:2017/9/8 10:29:00
--  非关联表的一个特殊问题

请教老师,下面代码是非关联表之间的数据同步,想实现,

 

如果FIND 绩效总评价表中已有的 项目编号 和 执行人 相同的情况下,绩效总评价表不再重复增加行和数据,否则可以增加新行和数据

 

Select Case e.DataCol.name
    Case "项目编号"
        Dim dr As DataRow = DataTables("绩效总评价").Find("项目编号 = \'" & e.OldValue & "\'")
        If dr Is Nothing Then
            dr = DataTables("绩效总评价").AddNew()
            dr("项目编号") = e.DataRow("项目编号")
            dr("项目名称") = e.DataRow("项目名称")
            dr("电压等级") = e.DataRow("电压等级")
            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("绩效总评价").Find("项目编号 = \'" & e.DataRow("项目编号") & "\'")
        If dr IsNot Nothing Then
            dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name)
        End If
End Select

[此贴子已经被作者于2017/9/8 10:30:14编辑过]

--  作者:有点甜
--  发布时间:2017/9/8 10:43:00
--  

Select Case e.DataCol.name
    Case "项目编号"
        Dim dr As DataRow
        If e.OldValue = Nothing Then
            dr = DataTables("绩效总评价").Find("[项目编号] = \'" & e.NewValue & "\' and 执行人 = \'" & e.DataRow("执行人") & "\'")
        Else
            dr = DataTables("绩效总评价").Find("[项目编号] = \'" & e.oldvalue & "\' and 执行人 = \'" & e.DataRow("执行人") & "\'")
        End If
        If dr Is Nothing Then
            dr = DataTables("绩效总评价").AddNew()
            dr("项目编号") = e.DataRow("项目编号")
            dr("项目名称") = e.DataRow("项目名称")
            dr("电压等级") = e.DataRow("电压等级")
            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
        If e.OldValue = Nothing Then
            dr = DataTables("绩效总评价").Find("[项目编号] = \'" & e.DataRow("项目编号") & "\' and 执行人 = \'" & e.newvalue & "\'")
        Else
            dr = DataTables("绩效总评价").Find("[项目编号] = \'" & e.DataRow("项目编号") & "\' and 执行人 = \'" & e.oldvalue & "\'")
        End If
        If dr Is Nothing Then
            dr = DataTables("绩效总评价").AddNew()
            dr("项目编号") = e.DataRow("项目编号")
            dr("项目名称") = e.DataRow("项目名称")
            dr("电压等级") = e.DataRow("电压等级")
            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("绩效总评价").Find("项目编号 = \'" & e.DataRow("项目编号") & "\' and 执行人 = \'" & e.DataRow("执行人") & "\'")
        If dr IsNot Nothing Then
            dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name)
        End If
End Select

 


--  作者:douglas738888
--  发布时间:2017/9/8 11:27:00
--  

老师,上个例子测试看看,还在同步增加行而且比原来还多增加不必要的一行了

 

想实现的是:如果表B行中 相同的项目编号和执行人这一行已存在,不再从表A提取数据,在表B中增加这两列相同内容的行,其他新的项目编号和执行人可在表B中增加

 

例如  表A     项目编号     项目名称      执行人

                 001           AAA            A

                 001           AAA            A

                 001           AAA            B

                 001           AAA            B

                 002           BBB            A

 

        表B    001           AAA            A   (此时,表B不再从复增加同内容的行)

                 001           AAA            B   (此时,表B不再从复增加同内容的行)

                 002           BBB            A

 

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:增加行测试.zip

 

如下代码,基本功能实现了,但如果表B没有任何行的时候,第一次增加行会增加一个有编号的空行,怎样处理

Select Case e.DataCol.name
    Case "项目编号"
        Dim dr As DataRow
        If e.OldValue <> Nothing Then
            dr = DataTables("表B").Find("项目编号 = \'" & e.OldValue & "\'")
        Else
            dr = DataTables("表B").Find("项目编号 = \'" & e.NewValue & "\'")
        End If
        If dr Is Nothing Then
            dr = DataTables("表B").AddNew()
            dr("项目编号") = e.DataRow("项目编号")
            dr("项目名称") = e.DataRow("项目名称")
            dr("执行人") = e.DataRow("执行人")
           
        Else
            dr("项目编号") = e.DataRow("项目编号")
        End If
    Case "执行人"
        Dim dr As DataRow
        If e.OldValue <> Nothing Then
            dr = DataTables("表B").Find("执行人 = \'" & e.OldValue & "\'")
        Else
            dr = DataTables("表B").Find("执行人 = \'" & e.NewValue & "\'")
        End If
        If dr Is Nothing Then
            dr = DataTables("表B").AddNew()
            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("项目编号") & "\'and 执行人 = \'" & e.DataRow("执行人") & "\'")
        If dr IsNot Nothing Then
            dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name)
        End If
End Select

[此贴子已经被作者于2017/9/8 12:58:47编辑过]

--  作者:有点甜
--  发布时间:2017/9/8 13:29:00
--  
Select Case e.DataCol.name
    Case "项目编号"
        If e.DataRow.IsNull("项目编号") = False AndAlso e.DataRow.IsNull("执行人") = False Then
            Dim dr As DataRow
            If e.OldValue = Nothing Then
                dr = DataTables("绩效总评价").Find("[项目编号] = \'" & e.NewValue & "\' and 执行人 = \'" & e.DataRow("执行人") & "\'")
            Else
                dr = DataTables("绩效总评价").Find("[项目编号] = \'" & e.oldvalue & "\' and 执行人 = \'" & e.DataRow("执行人") & "\'")
            End If
            If dr Is Nothing Then
                dr = DataTables("绩效总评价").AddNew()
                dr("项目编号") = e.DataRow("项目编号")
                dr("项目名称") = e.DataRow("项目名称")
                dr("电压等级") = e.DataRow("电压等级")
                dr("任务阶段") = e.DataRow("任务阶段")
                dr("任务部室") = e.DataRow("任务部室")
                dr("相关专业") = e.DataRow("相关专业")
                dr("执行人") = e.DataRow("执行人")
                dr("岗位层级") = e.DataRow("岗位层级")
            Else
                dr("项目编号") = e.DataRow("项目编号")
            End If
        End If
    Case "执行人"
        If e.DataRow.IsNull("项目编号") = False AndAlso e.DataRow.IsNull("执行人") = False Then
            Dim dr As DataRow
            If e.OldValue = Nothing Then
                dr = DataTables("绩效总评价").Find("[项目编号] = \'" & e.DataRow("项目编号") & "\' and 执行人 = \'" & e.newvalue & "\'")
            Else
                dr = DataTables("绩效总评价").Find("[项目编号] = \'" & e.DataRow("项目编号") & "\' and 执行人 = \'" & e.oldvalue & "\'")
            End If
            If dr Is Nothing Then
                dr = DataTables("绩效总评价").AddNew()
                dr("项目编号") = e.DataRow("项目编号")
                dr("项目名称") = e.DataRow("项目名称")
                dr("电压等级") = e.DataRow("电压等级")
                dr("任务阶段") = e.DataRow("任务阶段")
                dr("任务部室") = e.DataRow("任务部室")
                dr("相关专业") = e.DataRow("相关专业")
                dr("执行人") = e.DataRow("执行人")
                dr("岗位层级") = e.DataRow("岗位层级")
            Else
                dr("执行人") = e.DataRow("执行人")
            End If
        End If
    Case "项目名称","执行人","电压等级","任务阶段","任务部室","相关专业","岗位层级"
        Dim dr As DataRow = DataTables("绩效总评价").Find("项目编号 = \'" & e.DataRow("项目编号") & "\' and 执行人 = \'" & e.DataRow("执行人") & "\'")
        If dr IsNot Nothing Then
            dr(e.DataCol.Name) = e.DataRow(e.DataCol.Name)
        End If
End Select