以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]结构不同表数据合并问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=11376)

--  作者:xl
--  发布时间: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
--  发布时间: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
--  发布时间: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
--  发布时间:2011/7/20 10:00:00
--  

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


--  作者:狐狸爸爸
--  发布时间:2011/7/20 10:14:00
--  

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

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


--  作者:xl
--  发布时间: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


--  作者:狐狸爸爸
--  发布时间:2011/7/20 10:24:00
--  

动态创建数据源:

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

 


--  作者:xl
--  发布时间:2011/7/20 10:43:00
--  有明白WORD VBA的吗,帮忙看看为啥总报错

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


--  作者:xl
--  发布时间:2011/7/20 11:05:00
--  
不过仍建议贺老师6楼相关多一种设计:能够指定文件名称和路径,不一定用外部数据源方式-----------因为这是最灵活的合并方式。
--  作者:狐狸爸爸
--  发布时间:2011/7/20 11:26:00
--  
其实二楼很灵活啊