Foxtable(狐表)用户栏目专家坐堂 → 求相同结构的二个表合并


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

主题:求相同结构的二个表合并

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


加好友 发短信
等级:一尾狐 帖子:410 积分:3682 威望:0 精华:0 注册:2017/4/8 8:59:00
求相同结构的二个表合并  发帖心情 Post By:2020/5/21 19:18:00 [只看该作者]

二个相同结构的表合并,就是A表向B表追加记录,同时要验证是否有重复(只能追加一次)  结构为C1列、C2列  年  月  编号 共5列

A表中的行的 年、月  编号 三列数值、完全同B表中的行年、月  编号三列完全相同视为重复行,终止追加并提示
最好是在添加前先验证并有提示,求代码,想做个窗口按钮 执行此动作

Dim nma() As String
Dim nmb() As String
Systemready = False
For Each r As Row In Tables("表A").Rows
    Dim dr As DataRow = DataTables("表B").AddNew   
    For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = r(nma(i))
    Next
Next
Systemready = True

追加完成后 ,把A表中C1列数据更换为C2列数据 ,同时清除C2列数据为空 保存表

以上求代码


[此贴子已经被作者于2020/5/21 19:56:31编辑过]

 回到顶部
帅哥,在线噢!
y2287958
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:4748 积分:34538 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2020/5/21 20:01:00 [只看该作者]

直接用filler

 回到顶部
帅哥,在线噢!
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110528 积分:562524 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/21 20:54:00 [只看该作者]

Dim nma() As String
Dim nmb() As String
Systemready = False
For Each r As Row In Tables("表A").Rows
    Dim dr As DataRow = DataTables("表B").find("年= " & r("年") & " and 月=" & r("月") & " and  编号=‘" & r("编号") & "’")
if dr is nothing then 
dr  = DataTables("表B").AddNew   
    For i As Integer = 0 To nma.Length - 1
        dr(nmb(i)) = r(nma(i))
    Next
end f
r("c1") = r("c2")
r("c2")=nothing
Next
Systemready = True

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


加好友 发短信
等级:一尾狐 帖子:410 积分:3682 威望:0 精华:0 注册:2017/4/8 8:59:00
  发帖心情 Post By:2020/5/29 10:41:00 [只看该作者]

For Each r As Row In Tables("wy_sgd0").Rows
    Dim dr As DataRow = DataTables("wy_sgd").find("yy= " & r("yy") & " and yy1=" & r("yy1") & " and  khbh='" & r("khbh") & "'")
    If dr Is Nothing Then
        
        Dim nms As String() = {"wy_sgd0"}  '指定来源表,可以任意多个
        For Each nm As String In nms
            Dim f As New  Filler
            f.SourceTable = DataTables(nm) '指定这次的来源表
            f.SourceCols = "khbh,fymc,yy,yy1,je,bz1,je1,je2"  '指定数据来源列
            f.DataTable = DataTables("wy_sgd") '指定数据接收表
            f.DataCols = "khbh,fymc,yy,yy1,je,bz1,je1,je2"  '指定数据接收列
            f.Fill() '填充数据
        Next
    End If
Next

可以了刚才写错了。在这代码上如何实现   填充完好,源表的月份yy1加1 ,如果是源表是12月 就为1月,同时年份加1 
                           同时源表je1 替换为je2 ,je2清空
[此贴子已经被作者于2020/5/29 11:23:13编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110528 积分:562524 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/29 11:17:00 [只看该作者]

不要使用Filler。至少不能用在4楼这种代码里。用回3楼的用法

 回到顶部
帅哥,在线噢!
y2287958
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:4748 积分:34538 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2020/5/29 11:20:00 [只看该作者]

上个例子,不好吗

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


加好友 发短信
等级:一尾狐 帖子:410 积分:3682 威望:0 精华:0 注册:2017/4/8 8:59:00
  发帖心情 Post By:2020/5/29 11:24:00 [只看该作者]

For Each r As Row In Tables("wy_sgd0").Rows
    Dim dr As DataRow = DataTables("wy_sgd").find("yy= " & r("yy") & " and yy1=" & r("yy1") & " and  khbh='" & r("khbh") & "'")
    If dr Is Nothing Then
        
        Dim nms As String() = {"wy_sgd0"}  '指定来源表,可以任意多个
        For Each nm As String In nms
            Dim f As New  Filler
            f.SourceTable = DataTables(nm) '指定这次的来源表
            f.SourceCols = "khbh,fymc,yy,yy1,je,bz1,je1,je2"  '指定数据来源列
            f.DataTable = DataTables("wy_sgd") '指定数据接收表
            f.DataCols = "khbh,fymc,yy,yy1,je,bz1,je1,je2"  '指定数据接收列
            f.Fill() '填充数据
        Next
    End If
Next

可以了刚才写错了。在这代码上如何实现   填充完后,源表的月份yy1加1 ,如果是源表是12月 就为1月,同时年份加1 
                           同时源表je1 替换为je2 ,je2清空

[此贴子已经被作者于2020/5/29 11:24:35编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110528 积分:562524 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/29 11:31:00 [只看该作者]

上传实例说明

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


加好友 发短信
等级:一尾狐 帖子:410 积分:3682 威望:0 精华:0 注册:2017/4/8 8:59:00
  发帖心情 Post By:2020/5/29 15:39:00 [只看该作者]

For Each dr1 As Row In Tables("wy_sgd0").Rows
    Dim dr2 As DataRow = DataTables("wy_sgd").find("yy= " & dr1("yy") & " and yy1=" & dr1("yy1") & " and  khbh='" & dr1("khbh") & "'")
    If dr2 Is Nothing Then
        dr2 = DataTables("wy_sgd").AddNew()
    End If
    For Each dc As DataCol In DataTables("wy_sgd0").DataCols
        dr2(dc.Name) = dr1(dc.name)
    Next
       dr1("yy") =dr1("yy1")
       dr1("yy1")=Nothing
Next

这样可以了,谢谢老师提示。
再问一个问题,就是Dim dr2 As DataRow = DataTables("wy_sgd").find("yy= " & dr1("yy") & " and yy1=" & dr1("yy1") & " and  khbh='" & dr1("khbh") & "'")这个条件
太复杂,我目的是如果WY_sgd表中已经存在同wy_sgd0相同的记录,(非一定是三个条件),则覆盖原记录,有没有简洁的代码(二表结构完全一样的)
[此贴子已经被作者于2020/5/29 15:43:06编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110528 积分:562524 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/29 16:15:00 [只看该作者]

怎么样才算是相同的记录?如果一个条件能够区分,就只需要1个条件;如果需要2个条件才能够区分,就必须是2个条件,以此类推

 回到顶部