Foxtable(狐表)用户栏目专家坐堂 → 非关联表的一个特殊问题


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

主题:非关联表的一个特殊问题

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


加好友 发短信
等级:五尾狐 帖子:1172 积分:8772 威望:0 精华:0 注册:2012/4/18 16:28:00
非关联表的一个特殊问题  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1172 积分:8772 威望:0 精华:0 注册:2012/4/18 16:28:00
  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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

 回到顶部