以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  复制表结构的通用代码  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=9428)

--  作者:狐狸爸爸
--  发布时间:2011/4/11 7:58:00
--  复制表结构的通用代码

这是复制表结构的通用代码,如果是外部数据源,记得给ADOXTable指定数据源名称。

一些类型是没有介绍过的,例如Data.DataColumn和DataType,大家无需理会,直接套用代码即可:

 

Dim Builder As New ADOXBuilder
Dim tbl As ADOXTable
Builder.Open()
tbl = Builder.NewTable("新表名称") \'创建表
With tbl
    For Each dc As Data.DataColumn In DataTables("订单").baseTable.Columns
        If DataTables("旧表名称").DataCols.Contains(dc.ColumnName)  = False Then
            Continue For
        End If
        If dc.DataType Is Gettype(String)
            If dc.maxlength > 0 And dc.MaxLength < 256 Then
                tbl.AddColumn(dc.ColumnName, ADOXType.String, dc.maxlength)
            Else
                tbl.AddColumn(dc.ColumnName, ADOXType.text)
            End If
        ElseIf dc.datatype Is Gettype(Date) Then
            tbl.AddColumn(dc.ColumnName, ADOXType.DateTime)
        ElseIf dc.datatype Is Gettype(Boolean) Then
            tbl.AddColumn(dc.ColumnName, ADOXType.Boolean)
        ElseIf dc.datatype Is Gettype(Integer) Then
            tbl.AddColumn(dc.ColumnName, ADOXType.Integer)
        ElseIf dc.datatype Is Gettype(Long) Then
            tbl.AddColumn(dc.ColumnName, ADOXType.Long)
        ElseIf dc.datatype Is Gettype(Short) Then
            tbl.AddColumn(dc.ColumnName, ADOXType.Short)
        ElseIf dc.datatype Is Gettype(Byte) Then
            tbl.AddColumn(dc.ColumnName, ADOXType.Byte)
        ElseIf dc.datatype Is Gettype(Double) Then
            tbl.AddColumn(dc.ColumnName, ADOXType.Double)
        ElseIf dc.datatype Is Gettype(Single) Then
            tbl.AddColumn(dc.ColumnName, ADOXType.Single)
        ElseIf dc.datatype Is Gettype(Decimal) Then
            tbl.AddColumn(dc.ColumnName, ADOXType.Decimal)
        End If
    Next
End With
Builder.AddTable(tbl) \'增加表
Builder.Close()
MessageBox.show("生成新表成功,将重新打开项目")
syscmd.project.Open(ProjectFile)

[此贴子已经被作者于2011-4-11 7:59:25编辑过]

--  作者:kylin
--  发布时间:2011/4/11 10:16:00
--  

顶一个,呵呵


--  作者:程兴刚
--  发布时间:2011/4/11 12:22:00
--  
顶!
--  作者:bl018
--  发布时间:2011/4/14 22:13:00
--  

DataTables("订单")   就应改为    DataTables("旧表名称")

   不然出错图片点击可在新窗口打开查看


--  作者:lihe60
--  发布时间:2011/4/15 9:03:00
--  
应该加入帮助。这些代码最好放在后台,用户只需一行代码最好了。
--  作者:cbs429
--  发布时间:2011/4/23 21:36:00
--  
要如何给ADOXTable指定数据源名称。我想从A.table文件中的A表复制到B.table文件去。要如何操作?
--  作者:cbs429
--  发布时间:2011/4/23 21:39:00
--  
用以上方法也只能复制数据列,表达式列复制到新表中后都变成数据列了
--  作者:mr725
--  发布时间:2011/4/24 1:09:00
--  

tbl.AddColumn(dc.ColumnName, ADOXType.Long)  这个有问题吧:

 

帮助中说::::

 

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

 

············

 

Long:    长整数型,注意内部表和Access数据源不支持此类型..

 

·············

 


--  作者:狐狸爸爸
--  发布时间:2011/4/24 14:33:00
--  

呵呵,没有问题的,因为内部表不存在Long类型,代码根本就不会执行此处,再说这是通用代码,加上才合理。


--  作者:shanyou20
--  发布时间:2013/1/22 14:49:00
--  
 好用,顶图片点击可在新窗口打开查看