以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  如何将外部数据源中的所有表一次全加入到狐表中  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=23861)

--  作者:Fotable
--  发布时间:2012/9/21 22:52:00
--  如何将外部数据源中的所有表一次全加入到狐表中
如题
--  作者:Fotable
--  发布时间:2012/9/21 23:25:00
--  

我想了一个这样的办法

方法一:利用 outtalebuilder

Dim lst As List(Of String)
lst = Connections(connection1).GetTableNames

Dim q As new OuterTableBuilder
q.ConnectionName = connection1

For Each nm As String In lst
    q.TableName = nm
    q.SelectString = "Select * From {" & nm &"}"
    q.Build
Next
但这种办法由好像能加入,但是生成加入的表是临时表,关闭系统就没有了。

 

[此贴子已经被作者于2012-9-21 23:33:37编辑过]

--  作者:Fotable
--  发布时间:2012/9/21 23:36:00
--  

然后我有想了第二个方法 利用adoxbuilder

 

Dim Builder As New ADOXBuilder(connection1)
Dim
tbl As ADOXTable

 

 

Dim lst As List(Of String)
lst = Connections(connection1).GetTableNames

For Each nm As String In lst


Builder.Open()
tbl = Builder.Tables(nm
) \'创建表
Builder.AddTable(tbl) \'增加表
Builder.Close()

next

 

这个方法报错

[此贴子已经被作者于2012-9-21 23:38:13编辑过]

--  作者:Fotable
--  发布时间:2012/9/21 23:53:00
--  

思考一下为什么报错呢?是不是外部数据库中的表没有identify列。

我就先用代码给外部数据库中的表增加identify列。

Dim Builder As New ADOXBuilder(connection1)
Builder.Open() \'打开ADOXBuilder
Builder.Tables("表1").AddColumn("_Identify" ,ADOXType.Integer) \'增加自动增量型列
Builder.Close() \'关闭ADOXBuilder

 

但这个方法也报错,提示保留名称不能作为列名称使用


--  作者:blackzhu
--  发布时间:2012/9/22 8:14:00
--  
2楼的做法虽说是临时表,但是可编辑保存的.

貌似全部加载可以这样吧

for each dt as datatable in datatables
    dt.load
next

--  作者:lin_hailun
--  发布时间:2012/9/22 9:22:00
--  
以下是引用Fotable在2012-9-21 23:36:00的发言:

然后我有想了第二个方法 利用adoxbuilder

 

Dim Builder As New ADOXBuilder(connection1)
Dim
tbl As ADOXTable

 

 

Dim lst As List(Of String)
lst = Connections(connection1).GetTableNames

For Each nm As String In lst


Builder.Open()
tbl = Builder.Tables(nm
) \'创建表
Builder.AddTable(tbl) \'增加表
Builder.Close()

next

 

这个方法报错

[此贴子已经被作者于2012-9-21 23:38:13编辑过]

Dim Builder As New ADOXBuilder(connection1)   去掉数据源

tbl = Builder.Tables(nm)   创建表是 Builder.NewTable(nm)

但这样是复制表,与外部数据源就无关了。

建议还是使用2楼的方法,每次项目启动的时候添加进来。(狐表可能也是这样干的)



--  作者:Fotable
--  发布时间:2012/9/22 10:37:00
--  
以下是引用blackzhu在2012-9-22 8:14:00的发言:
2楼的做法虽说是临时表,但是可编辑保存的.

貌似全部加载可以这样吧

for each dt as datatable in datatables
    dt.load
next
datatable.load  方法 其实针对的是数据的加载。本身都已经成为datatable了 说明这个表已经被加入到狐表中了,只是没有加载数据。
--  作者:Fotable
--  发布时间:2012/9/22 10:42:00
--  
以下是引用blackzhu在2012-9-22 8:14:00的发言:
2楼的做法虽说是临时表,但是可编辑保存的.

貌似全部加载可以这样吧

for each dt as datatable in datatables
    dt.load
next

还有 虽说这种方法可以编辑保存,但保存的只是数据,对于表格的事件函数,表格的属性设置,确没有办法保存。这个意义是差别很大的


--  作者:Fotable
--  发布时间:2012/9/22 10:46:00
--  
以下是引用lin_hailun在2012-9-22 9:22:00的发言:

Dim Builder As New ADOXBuilder(connection1)   去掉数据源

tbl = Builder.Tables(nm)   创建表是 Builder.NewTable(nm)

但这样是复制表,与外部数据源就无关了。


用builder.newtable的方法这样建立,只是复制一个表名,表的列如何复制呢?