以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  合并外部数据  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=24303)

--  作者:wilson
--  发布时间:2012/10/10 10:50:00
--  合并外部数据

帮助文件提到

 

 

我们知道,用Merger可以到表中,不过Merger没有排除重复内容的选项,有时不能满足我们的要求。

例如项目中有一个员工表,要从一个文件中到这个员工表中,希望在过程中检查身份证号,如果员工表已经存在相同身份证号,则跳过此
假定被的表和员工表的结构相同,代如下:

Dim cmd As New SQLCommand
Dim
dt As DataTable
cmd.ConnectionName =
"源名称"
cmd.CommandText =
"SELECT * From {员工}"
dt = cmd.ExecuteReader()

For
Each dr As DataRow In dt.DataRows
If
DataTables("员工").Find("身份证号 = \'" & dr("身份证号") & "\'") Is Nothing Then
Dim
nr As DataRow = DataTables("员工").AddNew()
For
Each dc As DataCol In dt.DataCols
nr(dc.name) = dr(dc.name)

Next
End
If
Next

 

 

我想把它改为多列判断是否存在相同的行,不知如何解决,求助

 

谢谢!


--  作者:y2287958
--  发布时间:2012/10/10 10:53:00
--  
在find中增加判断条件
--  作者:狐狸爸爸
--  发布时间:2012/10/10 11:27:00
--  

Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.C
cmd.CommandText = "SELECT * From {员工}"
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.DataRows
    If DataTables("员工").Find("身份证号码 = \'" & dr("身份证号码") & "\' And 另一列 = \'" & dr("另一列") & "\'") Is Nothing Then
        Dim nr As DataRow = DataTables("员工").AddNew()
        For Each dc As DataCol In dt.DataCols
            nr(dc.name) = dr(dc.name)
        Next
    End If
Next

 

建议看看:


 http://www.foxtable.com/help/topics/1284.htm

 

[此贴子已经被作者于2012-10-10 11:28:21编辑过]

--  作者:wilson
--  发布时间:2012/10/10 15:37:00
--  

非常感谢!


--  作者:jygyyl
--  发布时间:2014/4/1 9:29:00
--  有个问题请赐教
我有两张表(sfzxxcj和jmsfzxx),均是外部数据表,我用上述代码将 sfzxxcj的记录合并到 jmsfzxx,要求排除身份证(GB011)重复,在表jmsfzxx加载所有数据时,可以达到不合并已有数据的目的,但如果表jmsfzxx不加载数据时,不能实现目的。我的代码如下:

DataTables("sfzxxcj").Save()
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.C
cmd.CommandText = "SELECT * From {sfzxxcj}"
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.DataRows
    If DataTables("jmsfzxx").Find("GB011 = \'" & dr("GB011") & "\'") Is Nothing Then
        Dim nr As DataRow = DataTables("jmsfzxx").AddNew()
        For Each dc As DataCol In dt.DataCols
            nr(dc.name) = dr(dc.name)
        Next
    End If
Next
DataTables("jmsfzxx").Save()

--  作者:有点甜
--  发布时间:2014/4/1 9:33:00
--  
以下是引用jygyyl在2014-4-1 9:29:00的发言:
我有两张表(sfzxxcj和jmsfzxx),均是外部数据表,我用上述代码将 sfzxxcj的记录合并到 jmsfzxx,要求排除身份证(GB011)重复,在表jmsfzxx加载所有数据时,可以达到不合并已有数据的目的,但如果表jmsfzxx不加载数据时,不能实现目的。我的代码如下:

 

用sqlfind 代替 find 方法

 

http://www.foxtable.com/help/topics/2911.htm

 


--  作者:有点甜
--  发布时间:2014/4/1 9:41:00
--  

 不过,既然是两表不重复内容的合并,建议先用sql语句查询出数据,然后把数据插入就行了。

 

 连接查询,sql语句,得到的jmsfzxx没有的行,如:

 

 select a.*, b.GB011 from {sfzxxcj} as a left join {jmsfzxx} as b on a.GB011 = b.GB011 where b.GB011 is null


--  作者:jygyyl
--  发布时间:2014/4/1 9:59:00
--  谢谢您
谢谢您的指点,但是我很菜,不会写,能否帮忙写一下?再次感谢!
--  作者:有点甜
--  发布时间:2014/4/1 10:01:00
--  
以下是引用jygyyl在2014-4-1 9:59:00的发言:
谢谢您的指点,但是我很菜,不会写,能否帮忙写一下?再次感谢!

 

如果不会写,就用7楼的方法,就行了。也可以用。

 

DataTables("sfzxxcj").Save()
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.C
cmd.CommandText = "SELECT * From {sfzxxcj}"
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.DataRows
    If DataTables("jmsfzxx").SQlFind("GB011 = \'" & dr("GB011") & "\'") Is Nothing Then
        Dim nr As DataRow = DataTables("jmsfzxx").AddNew()
        For Each dc As DataCol In dt.DataCols
            nr(dc.name) = dr(dc.name)
        Next
    End If
Next
DataTables("jmsfzxx").Save()

--  作者:有点甜
--  发布时间:2014/4/1 10:03:00
--  

 或者

 

DataTables("sfzxxcj").Save()
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.C
cmd.CommandText = "select a.* from {sfzxxcj} as a left join {jmsfzxx} as b on a.GB011 = b.GB011 where b.GB011 is null"
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.DataRows
    Dim nr As DataRow = DataTables("jmsfzxx").AddNew()
    For Each dc As DataCol In dt.DataCols
        nr(dc.name) = dr(dc.name)
    Next
Next
DataTables("jmsfzxx").Save()