以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 合并外部数据 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=24303) |
-- 作者:wilson -- 发布时间:2012/10/10 10:50:00 -- 合并外部数据 帮助文件提到
自行编码合并外部数据
我们知道,用Merger可以合并外部数据到表中,不过Merger没有排除重复内容的选项,有时不能满足我们的要求。 例如项目中有一个员工表,要从一个外部文件中合并数据到这个员工表中,希望在合并过程中检查身份证号码,如果员工表已经存在相同身份证号码的行,则跳过此行。 Dim cmd As New SQLCommandDim 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
建议看看: 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() |