Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
内部表转换为SQL SERVER 2000的时候,内部表的表达式列是不是就不出现在SQL的表列中呢?ACCESS是这种情况。
顺便再问下,如何用代码增加外部数据源的表?给个具体的代码吧,呵呵,谢谢!
动态修改表结构
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)
表达式列是打开项目后,自动生成的,不存在与任何数据源中,包括内部表中。
重定向后,重新打开项目,表达式列依然会自动生成。
重启项目后,对于内部数据表,是可以生效,但对于外部数据源,如ACCESS,还要进行增加数据表操作,才能最后看的见。
我现在设计多工资套帐的人事工资管理部分,一种工资结构表(即一个工资套帐)对应一个数据表,是不是还有其他方便的方法呢?