动态修改表结构
ADOXBuilder用于动态创建表和列。
ADOXBuilder对内部数据源、以及Access和SQL Server格式的外部数据源有效,对于Oracle格式的外部数据源无效。
增加列
在命令窗口执行下面的代码:
Dim
Builder As New ADOXBuilder执行后重新打开项目,会发现表A已经增加了上述列。
ADOXType是一个枚举,用于指定列的类型,其可选值包括:
String: 字符型
DateTime:日期时间型
Boolean: 逻辑型
Text: 备注型
Integer: 整数型
Long: 长整数型,注意内部表和Access数据源不支持此类型
Short: 短整数型
Byte: 微整数型
Double: 双精度小数型
Single: 单精度小数型
Decimal 高精度小数型
删除列
在命令窗口执行下面的代码:
Dim
Builder As New 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执行上述代码后,同样应该重新打开项目。
重命名表
在命令窗口执行下面的代码,可以将"表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)