Foxtable(狐表)用户栏目专家坐堂 → [分享]第5种创建表结构方法:根据Excel的表结构生成内部表


  共有3821人关注过本帖树形打印复制链接

主题:[分享]第5种创建表结构方法:根据Excel的表结构生成内部表

帅哥哟,离线,有人找我吗?
shenyl0211
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
[分享]第5种创建表结构方法:根据Excel的表结构生成内部表  发帖心情 Post By:2019/8/15 10:56:00 [只看该作者]

 Foxtable数据库应用开发宝典》介绍了4种创建表结构的方法,这里介绍第5种,是最好的。理由是:用户可以看到的表结构不是开发者所能决定的,所以,创建表前必须征求用户的意见,此时的征求意见内容不仅是表名、列名、标题、类型、长度、表达式,还有顺序,显然,这些内容应该先在Excel表中编写、修改、排序、定稿。直接利用已经完善的、完整的Excel形式的表结构,再结合ADOXBuilder,就可以快速创建表结构。

1 下列代码所用的Excel表格形式为:A列表名、B列列名、C列标题、D列类型、E列长度、F列表达式。

2 创建新项目,在命令窗口执行下列代码动态创建新的表和列。

3 重新打开项目,查看添加结果。

4 后续完善工作:需改为数字开头的列用手工或代码设置标题;增加或插入表达式列、长整数列。

Dim filename As String

Dim dlg As New OpenFileDialog

dlg.Filter = "Excel文件|*.xls;*.xlsx"

If dlg.ShowDialog = DialogResult.OK Then

    filename = dlg.FileName

Else

    Return Nothing

End If

Dim Builder As New ADOXBuilder

Dim tbl As ADOXTable

Dim App As New MSExcel.Application

Dim book As MSExcel.WorkBook = App.WorkBooks.Open(filename)

Dim ws As MSExcel.WorkSheet = book.WorkSheets(1)

Dim rg As MSExcel.Range = ws.usedRange

Dim str1,str2,bm,lx As String

Dim i,k As Integer

Builder.Open()

app.visible = False

For i = 1 To Rg.Rows.Count

    Str1 = Ws.Cells(i,1).value

    Str2 = Ws.Cells(i,2).value

    If str1 = Nothing AndAlso str2 = Nothing Then '空行

        Continue For

    End If

    If str2 = Nothing Then '第二列空则就是表名所在行,str1为表名

        If bm IsNot Nothing Then

            Builder.AddTable(tbl) 'AddTable将创建的表增加到Builder

        End If

        bm = str1.trim.ToUpper

        tbl = Builder.NewTable(bm) 'NewTable方法创建表

    Else '为列名

        str1 = Ws.Cells(i,6).value

        If str1 IsNot Nothing Then '是表达式列

            Continue For

        End If

        Lx = Ws.Cells(i,4).value

        Select Case lx.trim.ToLower

            Case "text"

                tbl.AddColumn(str2,ADOXType.Text)

            Case "datetime"

                tbl.AddColumn(str2,ADOXType.DateTime)

            Case "boolean"

                tbl.AddColumn(str2,ADOXType.Boolean)

            Case "single"

                tbl.AddColumn(str2,ADOXType.Single)

            Case "double"

                tbl.AddColumn(str2,ADOXType.Double)

            Case "integer"

                tbl.AddColumn(str2,ADOXType.Integer)

            Case "string"

                K = Ws.Cells(i,5).value

                tbl.AddColumn(str2,ADOXType.String,k)

            Case "long"

                Continue For

        End Select

    End If

Next

Builder.AddTable(tbl)

Builder.Close()

app.visible = True
[此贴子已经被作者于2019/8/19 15:19:10编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106138 积分:539807 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/15 11:36:00 [只看该作者]

多谢分享

 回到顶部
帅哥,在线噢!
y2287958
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:4628 积分:33772 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2019/8/15 12:13:00 [只看该作者]

鼓励一下

 回到顶部
帅哥哟,离线,有人找我吗?
百灵
  4楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:739 积分:7677 威望:0 精华:0 注册:2015/3/3 14:34:00
  发帖心情 Post By:2019/8/15 20:54:00 [只看该作者]

http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=95427这种方式更好

 回到顶部
帅哥哟,离线,有人找我吗?
shenyl0211
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2019/8/16 10:48:00 [只看该作者]

回4楼:功能是完全不同的。
你是根据现有的Excel数据表(相当于数据库吧),一张一张地创建表头、导入或合并数据,所有的字符列长度都是255、数值列都是双精度,没有整数列和逻辑列。显然,以后还要修改表结构。
我是根据现有的Excel表结构(设计好表名、列名、类型、长度,但没有数据),创建表和列。以后直接合并数据,不需要合并数据的代码。针对列名不同的单列导入和针对列名相同的批量导入,在论坛上我有分享:
[此贴子已经被作者于2019/8/16 10:55:09编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
蓝才文百
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:391 积分:2441 威望:0 精华:0 注册:2015/1/31 23:19:00
  发帖心情 Post By:2019/11/15 16:28:00 [只看该作者]

强大!

 回到顶部
帅哥哟,离线,有人找我吗?
wei0769
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1814 积分:19234 威望:0 精华:0 注册:2013/4/10 14:38:00
  发帖心情 Post By:2019/11/16 10:12:00 [只看该作者]

谢谢分享


 回到顶部
帅哥哟,离线,有人找我吗?
ychsit
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:119 积分:1123 威望:0 精华:0 注册:2017/5/12 20:04:00
  发帖心情 Post By:2019/11/16 10:56:00 [只看该作者]

学习


 回到顶部