Foxtable(狐表)用户栏目专家坐堂 → 合并外部数据


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

主题:合并外部数据

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


加好友 发短信
等级:一尾狐 帖子:419 积分:3316 威望:0 精华:0 注册:2012/3/21 10:44:00
合并外部数据  发帖心情 Post By: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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:4752 积分:34568 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2012/10/10 10:53:00 [只看该作者]

在find中增加判断条件

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:419 积分:3316 威望:0 精华:0 注册:2012/3/21 10:44:00
  发帖心情 Post By:2012/10/10 15:37:00 [只看该作者]

非常感谢!


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


加好友 发短信
等级:一尾狐 帖子:463 积分:4163 威望:0 精华:0 注册:2011/4/5 16:54:00
有个问题请赐教  发帖心情 Post By: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()

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:463 积分:4163 威望:0 精华:0 注册:2011/4/5 16:54:00
谢谢您  发帖心情 Post By:2014/4/1 9:59:00 [只看该作者]

谢谢您的指点,但是我很菜,不会写,能否帮忙写一下?再次感谢!

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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()

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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()

 回到顶部
总数 11 1 2 下一页