excel生成建表SQL

趁这个暑假有些时间,想写些“代码生成”的文章。现在代码生成工具有很多,这里就不作探讨,自己写几个小工具,主要是了解这一个过程,记录些技术点。

计划:
1: excel生成建表SQL
2: JAVA读取Excel,建库建表
3:JAVA读取Excel和数据库,生成实体类等
4:CodeSmith生成普通三层
5:CodeSmith生成抽象工厂三层
6:eclipse插件生成SSH框架

技术点:VBS、Java读取Excel、CodeSmith工具、eclipse插件开发

1:excel生成建表SQL

为什么选用excel?最主要是图个方便,不使用建模工具(假设已经建模)。还有excel还可以写宏、excel谁都能看得懂等等。
不再费话。
业务是:有一张公司表,一张员工表。生成这两张表的建表脚本。
Excel本身是可以建多表的,我们建立三张表,并进入开发模式,拖几个控件,如图:
excel生成建表SQL_第1张图片
说明:
1:第一张表是对系统或对模块的描述。
2:“生成表目录”是将第二张表开始,自动生成第一张表的数据。
3:“生成sql”是将第二表开始,自动生成sql语句,并写入到console控件(TextBox)中。

下面是第二张和第三张表:

excel生成建表SQL_第2张图片

excel生成建表SQL_第3张图片
说明:
1:表中所有字段均为文本字符,不作类型验证
2:第二行的第一列为英文表名
3:最下面excel表名为中文表名

代码实现

1:“生成表目录” 功能
打开开发模式,双击“生成表目录”按钮。
'生成表目录
Private Sub btn_shell_Click()
For si = 2 To Workbooks(1).Sheets.Count '从第二张表开始,遍历每一张表
	Set mysheet = Workbooks(1).Sheets(si) '表
	Workbooks(1).Sheets(1).Range("D" & si).Value = mysheet.Name '中文名
	Workbooks(1).Sheets(1).Range("C" & si).Value = mysheet.Range("A2").Value  '英文名
Next si
End Sub
原理很简单, 从第二(N)张表开始遍历,取得中文名和英文名,并将值写入到第一张表的第N行的第C列和第D列

2:“生成slq” 功能
'生成建表hql
Private Sub btnSql_Click()
    Dim sql As String
    Dim tableName As String
    
    For si = 2 To Workbooks(1).Sheets.Count '从第二张表开始,遍历每一张表

        Set mysheet = Workbooks(1).Sheets(si) '表
        tableName = mysheet.Range("A2").Value '英文表名
        
        
        '如果数据库中已存在表,则删除表
        'if exists (select * from sysobjects where name='tableName')
        sql = sql & "if exists (select * from sysobjects where name='" & tableName & "') " & vbCrLf
        
        'drop table tableName
        sql = sql & "   drop table [" & tableName & "] " & vbCrLf
        sql = sql & "go " & vbCrLf
        
        '开始创建表
        'create table tableName (
        sql = sql & "create table [" & tableName & "] ( " & vbCrLf
            
        
        For i = 2 To mysheet.UsedRange.Rows.Count '遍历所有的列
            Dim nameStr As String
            Dim typeStr As String
        
            nameStr = mysheet.Range("B" & i).Value '字段名
            typeStr = mysheet.Range("D" & i).Value '数据类型
            refStr = mysheet.Range("E" & i).Value '引用
            
            If nameStr = "ID" Then
                sql = sql & "   [id] varchar(44) primary key" '默认id为主键
            Else
                sql = sql & "   [" & nameStr & "] " & typeStr '非id列,则直接加入
            End If
            
            
            If i < mysheet.UsedRange.Rows.Count Then
                sql = sql & "," '添加‘,’号
            End If
            
             sql = sql & vbCrLf
        Next i
        
        '建表完成
        sql = sql & ")" & vbCrLf
        sql = sql & "go" & vbCrLf
        sql = sql & "-----Create table [" & tableName & "] end." & vbCrLf & vbCrLf
    
    Next si
    txtConsole.Value = sql '将值输出到console控件中
End Sub

测试
退出开发模式后,点击生成表目录,生成两张表的中文名和英文名。点击生生sql名,在console控件中,输出建表脚本。如图:
excel生成建表SQL_第4张图片

问题
1:因为用的是遍历表和列,如果有空列,可能会出错
2:因为代码中都是写列的列名,所以需要严格按照这种表的格式
3:没有代码提示,如输入数据类型,可以做成下拉框,直接选择

这篇就到这里,上面的问题留着以后慢慢改进。

测试Excel文档下载

你可能感兴趣的:(代码生成)