Foxtable(狐表)用户栏目专家坐堂 → [求助]结构不同表数据合并问题


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

主题:[求助]结构不同表数据合并问题

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


加好友 发短信
等级:一尾狐 帖子:400 积分:3961 威望:0 精华:0 注册:2009/4/28 7:39:00
[求助]结构不同表数据合并问题  发帖心情 Post By:2011/7/20 9:22:00 [只看该作者]

在帮助中有一段数据合并代码,试做了一个始终不能成功,请各位老师帮看一下,问题出在哪里?该怎样修改?谢谢!

Dim cmd As New SQLCommand
Dim dt As DataTable
Dim sCols() As String = {"已发","标题","小区","楼层","室厅卫","面积","价格","描述","装修","手机号","年代"}
Dim dCols() As String = {"已发","标题1","小区1","楼层1","户型","面积","价格","描述","装修","手机号","年代"}
cmd.ConnectionName = "C:\Documents and Settings\Administrator\桌面\SpiderResult.mdb"
cmd.CommandText = "SELECT * From {content}"
dt = cmd.ExecuteReader()
For Each dr As DataRow In dt.DataRows
    Dim nr As DataRow = DataTables("Content").AddNew()
    For i As Integer =0 To sCols.Length -1
        nr(dCols(i)) = dr(sCols(i))
    Next
Next

 

注:目的是将桌面的SpiderResult.mdb文件中的表content中的内容导入到当前FOXTABLE文件的content中,两个文件中表结构不同。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试.zip

[此贴子已经被作者于2011-7-20 9:25:49编辑过]

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


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33963 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2011/7/20 9:37:00 [只看该作者]

http://www.foxtable.net/help/topics/0685.htm

 

Dim mg As New Merger
mg.SourcePath = ProjectPath & "SpiderResult.mdb"
mg.SourceTableName = "Content"
mg.DataTableName = "Content"
mg.FieldMaps.Add("标题","标题1")
mg.FieldMaps.Add("小区","小区1")
mg.FieldMaps.Add("楼层","楼层1")
mg.Merge()


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


加好友 发短信
等级:一尾狐 帖子:400 积分:3961 威望:0 精华:0 注册:2009/4/28 7:39:00
  发帖心情 Post By:2011/7/20 9:44:00 [只看该作者]

谢谢C老师,像这种情况能否举一个例子,其中最令人困惑的地方是数据源名称和access2003文件中的表,下列文件好像是针对EXCEL文件的,同时好像也不能指明数据源的路径?

 

Dim cmd As New SQLCommand
Dim
dt As DataTable
Dim
sCols() As String = {"列名1", "列名2", "列名3"}
Dim
dCols() As String = {"列名A", "列名B", "列名C"}
cmd
.ConnectionName = "数据源名称"
cmd
.CommandText = "SELECT * From {员工}"
dt
= cmd.ExecuteReader()
For Each
dr As DataRow In dt.DataRows
    Dim
nr As DataRow = DataTables("员工").AddNew()
    For
i As Integer =0 To sCols.Length -1
       
nr(dCols(i)) = dr(sCols(i))
    Next
Next

[此贴子已经被作者于2011-7-20 9:46:28编辑过]

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


加好友 发短信
等级:一尾狐 帖子:400 积分:3961 威望:0 精华:0 注册:2009/4/28 7:39:00
  发帖心情 Post By:2011/7/20 10:00:00 [只看该作者]

3楼问题只有看贺老师了???增加类似设计


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/7/20 10:14:00 [只看该作者]

我测试2楼c版的代码就能够直接执行了啊。

记得将列“标题1”的长度设置长一些,否则会报错。
 


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


加好友 发短信
等级:一尾狐 帖子:400 积分:3961 威望:0 精华:0 注册:2009/4/28 7:39:00
  发帖心情 Post By:2011/7/20 10:18:00 [只看该作者]

2楼C版没有问题!是学习“自行编码合并外部数据”时,想试试更灵活的合并方式,呵呵

自行编码合并外部数据

我们知道,用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

 

可见要自己设计一个功能更强的Merger,其实是件很简单的事情。

如果两个表的结构不同,可以参考下面的代码:

Dim cmd As New SQLCommand
Dim
dt As DataTable
Dim
sCols() As String = {"列名1", "列名2", "列名3"}
Dim
dCols() As String = {"列名A", "列名B", "列名C"}
cmd
.ConnectionName = "数据源名称"
cmd
.CommandText = "SELECT * From {员工}"
dt
= cmd.ExecuteReader()
For Each
dr As DataRow In dt.DataRows
    Dim
nr As DataRow = DataTables("员工").AddNew()
    For
i As Integer =0 To sCols.Length -1
       
nr(dCols(i)) = dr(sCols(i))
    Next
Next


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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/7/20 10:24:00 [只看该作者]

动态创建数据源:

http://www.foxtable.net/help/topics/1944.htm

 


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


加好友 发短信
等级:一尾狐 帖子:400 积分:3961 威望:0 精华:0 注册:2009/4/28 7:39:00
有明白WORD VBA的吗,帮忙看看为啥总报错  发帖心情 Post By:2011/7/20 10:43:00 [只看该作者]

哦,明白。这种方式感觉对多数据源的情况不是很方便,相比之下C版2楼方式方便很多!谢谢两位老师!


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


加好友 发短信
等级:一尾狐 帖子:400 积分:3961 威望:0 精华:0 注册:2009/4/28 7:39:00
  发帖心情 Post By:2011/7/20 11:05:00 [只看该作者]

不过仍建议贺老师6楼相关多一种设计:能够指定文件名称和路径,不一定用外部数据源方式-----------因为这是最灵活的合并方式。

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/7/20 11:26:00 [只看该作者]

其实二楼很灵活啊

 回到顶部