以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于动态增加表的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=7968)

--  作者:cxabc123
--  发布时间:2010/8/25 15:07:00
--  关于动态增加表的问题
用ADOXBuilder可以动态增加外部表,那么增加的外部表能不能同时加载到项目中来
--  作者:狐狸爸爸
--  发布时间:2010/8/25 15:11:00
--  

可以参考:

 

OuterTableBuilder

QueryBuilder


--  作者:cxabc123
--  发布时间:2010/8/25 15:36:00
--  
我试了以下就是不成功,老大,写一段指导一下
--  作者:cxabc123
--  发布时间:2010/8/25 15:39:00
--  

 

\'创建外部数据表

Tables("项目表管理").Filter = ""

Tables("项目表管理").Filter = "[数据库名] = \'" & e.Form.Controls("数据库名").Value & "\' And [表名] = \'" & e.Form.Controls("新建表名").Value & "\'"

 

Dim s As String =e.Form.Controls("数据库名").Value

Dim s1 As String =e.Form.Controls("新建表名").Value

\'判断创建数据表的环境

If s="" Then

    MessageBox.Show("数据库名不能为空!")

    Return

End If

If s1 = "" Then

    MessageBox.Show("表名不能为空!")

    Return

End If

If GetTableNamesFromConnection("" & e.Form.Controls("数据库名").Value & "").Contains(s1)

    MessageBox.Show(s1 & " 外部表已经存在,不能创建!")

    Return

End If

For Each dt As datatable In DataTables

    If dt.Name.Contains(s1) Then

        MessageBox.Show(s1 & " 内部表已经存在,不能创建!")

        Return

    End If

Next

\'创建外部表

Dim Builder1 As New ADOXBuilder(s)

Builder1.Open()

Dim tbl2 As ADOXTable = Builder1.NewTable(s1)

For Each dr As DataRow In DataTables("项目表管理").DataRows

    If dr("表名") = s1 Then

        With tbl2

            Select Case dr("列类型")

                Case "字符型"

                    .AddColumn(dr("列名") ,ADOXType.String, dr("字符长度"))

                Case "日期型"

                    .AddColumn(dr("列名") ,ADOXType.DateTime)

                Case "整数型"

                    .AddColumn(dr("列名") ,ADOXType.Integer)

                Case "短整数型"

                    .AddColumn(dr("列名") ,ADOXType.Short)

                Case "微整数型"

                    .AddColumn(dr("列名") ,ADOXType.Byte)

                Case "单精度小数型"

                    .AddColumn(dr("列名") ,ADOXType.Single)

                Case "双精度小数型"

                    .AddColumn(dr("列名") ,ADOXType.Double)

                Case "高精度小数型"

                    .AddColumn(dr("列名") ,ADOXType.Decimal)

                Case "逻辑型"

                    .AddColumn(dr("列名") ,ADOXType.Boolean)

                Case "备注型"

                    .AddColumn(dr("列名") ,ADOXType.Text)

            End Select

        End With

    End If

Next

Builder1.AddTable(tbl2, True, True)

Builder1.Close()

\'创建查询表

Dim q As new OuterTableBuilder
q.TableName = s1
q.ConnectionName =s
q.SelectString = "Select * From [s1] "
q.Build

 

 

\'重新打开项目,加载新增数据表

syscmd.Project.Open(ProjectFile)

MainTable = Tables(s1)

\'数据表创建完成.


--  作者:cxabc123
--  发布时间:2010/8/25 15:40:00
--  
请老大看看,就是不能自动加载到项目,不知为什么
--  作者:狐狸爸爸
--  发布时间:2010/8/25 15:48:00
--  

你的表名不是“s1”,而是变量s1中存储的值,所以:

 

q.SelectString = "Select * From [s1] "

 

错了,应该:

q.SelectString = "Select * From [" & s1 & "] "

 

 

[此贴子已经被作者于2010-8-25 15:48:02编辑过]

--  作者:cxabc123
--  发布时间:2010/8/25 16:14:00
--  
老大,这样创建的表,重新打开项目后,就会消失,有没有办法能够让她保留下来
--  作者:狐狸爸爸
--  发布时间:2010/8/25 16:23:00
--  
在AfterOpenProject设置代码,用OuterTableBuilder加载

--  作者:cxabc123
--  发布时间:2010/8/25 16:51:00
--  
根据我前面提供的代码,该如何设置,能指点一下吗
[此贴子已经被作者于2010-8-25 16:52:20编辑过]

--  作者:狐狸爸爸
--  发布时间:2010/8/25 17:00:00
--  
你动态增加一个外部表后,就在某个内部表中写入动态增加的表名,以及其数据源名称,在AfterOpenProject事件中逐行读取此内部表的数据,逐个增加外部表。