以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]自定义合并多次导入部分数据重复  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=23260)

--  作者:chnfo
--  发布时间:2012/9/7 9:48:00
--  [求助]自定义合并多次导入部分数据重复
应用场景:有一个货物编号表,希望直接合并到表B中。

于是我在管理项目>菜单设计>程序菜单>项目里加了一个merge的项,参考帮助设置了代码。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:自定义合并数据.rar


但是有分类无明细的行总是会重复出现,合并一次出现一次。

这个应当如何解决 ?
[此贴子已经被作者于2012-9-7 9:54:53编辑过]

--  作者:chnfo
--  发布时间:2012/9/7 10:40:00
--  

因为你多了后面那段  and  coding = \'" & sheet(n,1).Value & "\'

 

把上面这段删了就不会导入重复的了,

不过建议使用标识列表示每行的内容,以防止重复咯。




我想你可能理解错了。
我是要把EXCEL表里的所有行都合并到表B中去,不论合并多少次,都只是EXCEL中的那些行。

判断重复的标准不是code列不重复,而是code+coding不重复。
[此贴子已经被作者于2012-9-7 10:40:52编辑过]

--  作者:chnfo
--  发布时间:2012/9/7 11:03:00
--  

 Dim dr As DataRow = DataTables("表B").Find("code = \'" & sheet(n,0).Value & "\' ")
        If dr Is  Nothing Then
            dr = DataTables("表B").AddNew()
        End If
        For m As Integer = 0 To nms.Length - 1
            dr(nms(m)) = Sheet(n,m).Value
        Next

 

你不是做了重复不录入的判断了么???


请注意一下,EXCEL表里的code列是有重复的,而coding列有空白行。但code+coding就没有重复行了。


问题是判断不生效啊,我的判断不重复的条件是code列和coding列组合起来是不重复的

如果不信,你点左上角>导入货物分类,选择那个EXCEL试试。

如果用你这一段,就只能合并5行,并且这5行本应是明细编号为空白对应的行,而实际上不是,例如明细编号为1.1.1.6和1.1.2.6以及1.1.3.6是不应当合并进来的。

用我那一段,就能合并21行。但如果我再合并一次,就会把明细编号为空白的那5行再增加一次进去。再合并一次,又会增加明细编号为空白的那5行.


我本意是不管合并多少次,都只合并那21行,除非code列+coding列的文本发生了变化,或增加了新行。

[此贴子已经被作者于2012-9-7 11:46:48编辑过]

--  作者:chnfo
--  发布时间:2012/9/7 12:45:00
--  

我明白了,那您有没有数据唯一的列,就是没有重复数据的列?例如Unit列,单位不重复?


——这个确实是没有。判断是否重复,只能组合判断才可以。
是不是能这样变通处理:在要合并的源文件中增加一列code&coding,然后在表B中也增加一列
code&coding,这么干?
其实我的目的是把猪杀死,要求不太过分,都可以接受。

用变通的方法可以完成。增加辅助列……
不知各位狐神能不能指教一个更好的方法?
[此贴子已经被作者于2012-9-7 13:27:22编辑过]

--  作者:lin_hailun
--  发布时间:2012/9/7 19:29:00
--  
楼主,可能是筛选条件没有注意到null值的情况。

        Dim s1 As String = sheet(n, 0).Value
        Dim s2 As String = sheet(n, 1).Value
        Dim dr As DataRow = DataTables("表B").Find("(code = \'" & s1 & "\' or code is null and \'" & s1 & "\' = \'\') And  (coding = \'" & sheet(n,1).Value & "\' or coding is null and \'" & s2 & "\' = \'\')")


--  作者:chnfo
--  发布时间:2012/9/10 17:08:00
--  
非常感谢。 试验有效。