以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 求相同结构的二个表合并 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=150136) |
-- 作者:nbsugu_z -- 发布时间: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 -- 发布时间:2020/5/21 20:01:00 -- 直接用filler |
-- 作者:有点蓝 -- 发布时间: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 -- 发布时间: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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2020/5/29 11:17:00 -- 不要使用Filler。至少不能用在4楼这种代码里。用回3楼的用法 |
-- 作者:y2287958 -- 发布时间:2020/5/29 11:20:00 -- 上个例子,不好吗 |
-- 作者:nbsugu_z -- 发布时间: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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2020/5/29 11:31:00 -- 上传实例说明 |
-- 作者:nbsugu_z -- 发布时间: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编辑过]
|
-- 作者:有点蓝 -- 发布时间:2020/5/29 16:15:00 -- 怎么样才算是相同的记录?如果一个条件能够区分,就只需要1个条件;如果需要2个条件才能够区分,就必须是2个条件,以此类推 |