动态修改表结构

ADOXBuilder用于动态创建表和列。
ADOXBuilder对内部数据源、以及Access和SQL Server格式的外部数据源有效,对于Oracle格式的外部数据源无效。

增加列

在命令窗口执行下面的代码:

Dim Builder As New ADOXBuilder
Builder.Open()
'打开ADOXBuilder
With
Builder.Tables("表A")
    .AddColumn(
"日期" ,ADOXType.DateTime) '增加日期型列
    .AddColumn(
"产品" ,ADOXType.String, 12) '增加字符型列,长度指定为12
    .AddColumn(
"客户" ,ADOXType.String, 20) '增加字符列,长度为20
    .AddColumn(
"数量" ,ADOXType.Integer) '增加整数型列
    .AddColumn(
"备注" ,ADOXType.Text) '增加备注列
End
With
Builder.Close()
'关闭ADOXBuilder

执行后重新打开项目,会发现表A已经增加了上述列。

ADOXType是一个枚举,用于指定列的类型,其可选值包括:

String:  字符型
DateTime:日期时间型
Boolean: 逻辑型
Text:    备注型
Integer: 整数型
Long:    长整数型,注意内部表和Access数据源不支持此类型
Short:   短整数型
Byte:    微整数型
Double:  双精度小数型
Single:  单精度小数型
Decimal   高精度小数型

删除列

在命令窗口执行下面的代码:

Dim Builder As New ADOXBuilder
Builder.Open()
'打开ADOXBuilder
With
Builder.Tables("表A")
    .DeleteColumn(
"日期")
    .DeleteColumn(
"产品")
End
With
Builder.Close()
'关闭ADOXBuilder

执行后重新打开项目,会发现表A的日期和产品列已经被删除。

重命名列

在命令窗口执行下面的代码:

Dim Builder As New ADOXBuilder
Builder.Open()

With
Builder.Tables("A")
    .
RenameColumn("第一列","姓名")
End With

Builder
.Close()

然后重新打开项目,表A的"第一列"已经被重命名为"姓名"。

增加表

在命令窗口执行下面的代码:

Dim
Builder As New ADOXBuilder
Dim
tbl As ADOXTable
Builder.Open()
tbl = Builder.NewTable(
"订单") '创建表
With
tbl
    .AddColumn(
"日期" ,ADOXType.DateTime)
    .AddColumn(
"产品" ,ADOXType.String, 12)
    .AddColumn(
"客户" ,ADOXType.String, 20)
    .AddColumn(
"数量" ,ADOXType.Integer)
    .AddColumn(
"备注" ,ADOXType.Text)
End With
Builder.AddTable(tbl)
'增加表
Builder.Close()

执行后重新打开项目,会发现多了一个订单表。
增加表是分步的,首先用NewTable方法创建表,最后用AddTable将创建的表增加到
Builder中。

删除表

执行下面的代码,可以删除表A和表B:

Dim Builder As New ADOXBuilder
Builder
.Open()
With
Builder
    .
DeleteTable("表A")
    .
DeleteTable("表B")
End With

Builder
.Close()

执行上述代码后,同样应该重新打开项目。

重命名表

在命令窗口执行下面的代码,可以将"表A"重命名为"订单":

Dim Builder As New ADOXBuilder
Builder.Open()

With
Builder.Tables("A")
   
.Rename("订单")
End With

Builder
.Close()

执行上述代码后,同样应该重新打开项目。

使用外部数据源

前面的代码都是针对内部数据源的,如果要为外部数据源动态创建表和列,只需在定义ADOXBuilder的时候,指定数据源名称即可:

Dim Builder As New ADOXBuilder("数据源名称")

例如在名为nwnd的外部数据源中创建一个订单表:

Dim Builder As New ADOXBuilder("nwnd") '要指定数据源名称
Dim
tbl As ADOXTable
Builder.Open()
tbl = Builder.NewTable(
"订单") '创建表
With
tbl
    .AddColumn(
"日期" ,ADOXType.DateTime)
    .AddColumn(
"产品" ,ADOXType.String, 12)
    .AddColumn(
"客户" ,ADOXType.String, 20)
    .AddColumn(
"数量" ,ADOXType.Integer)
    .AddColumn(
"备注" ,ADOXType.Text)
End With
Builder.AddTable(tbl)
'增加表
Builder.Close()

为外部表增加系统列

使用前述代码添加的表,默认会添加主键列“_Identify”。
如果是内部数据源,默认还会添加“_Locked”和"_SortKey"两列,前者用于保存行的锁定状态,后者用于开启插入行功能。
如果是外部数据表,默认不会添加“_Locked”和"_SortKey"两列,你可以使用AddTable方法的另一个语法,来决定是否为外部表增加这两列:

AddTable(Table, AddLockColumn, AddSortColumn)

Table:          要增加的表
AddLockColumn: 逻辑型,是否增加_Locked列
AddSortColumn: 逻辑型,是否增加_SortKey列

例如在名为nwnd的外部数据源中创建一个订单表,且为订单表添加“_Locked”和"_SortKey"两列:

Dim Builder As New ADOXBuilder("nwnd") '要指定数据源名称
Dim
tbl As ADOXTable
Builder.Open()
tbl = Builder.NewTable(
"订单") '创建表
With
tbl
    .AddColumn(
"日期" ,ADOXType.DateTime)
    .AddColumn(
"产品" ,ADOXType.String, 12)
    .AddColumn(
"客户" ,ADOXType.String, 20)
    .AddColumn(
"数量" ,ADOXType.Integer)
    .AddColumn(
"备注" ,ADOXType.Text)
End With
Builder.AddTable(tbl, True, True)
'增加表
Builder.Close()

重新打开项目的代码

前面已经提到,动态创建的表和列之后,都必须重新打开项目。
可以使用下面的代码重新打开当前项目:

Syscmd.Project.Open(ProjectFile)


本页地址:http://www.foxtable.com/webhelp/topics/2122.htm