VBA来实现已存在的数据库,取得所有表的结构
问题描述
用VBA来取出MySQL数据库中的所有表的结构后生成一个Excel的文档
首先创建MySQL的数据源,如何创建数据源在前章已经写过,之后把下面的信息填写上即可
在window7 64位系统上面可能会出现错误,出错的原因是因为mysql的驱动问题,你需要安装window7的32位的MySQL驱动。这样就不会出现问题。
在window10上面则没有这种问题。

说明
DSN是你所创建的数据源的名称
SERVER是你本地的数据库
DB是你的数据库的名称
UID是登入数据库的用户名
PWD是登入数据库的密码
SCHEMA是你所创建的数据库的SCHEMA
之后在MysqlDbTable按钮下写入下面的代码即可
'----------------mysqlからテーブル一覧出力---------------------------
Private Sub getMysqlDbTeble_Click() Dim fiStr As String
Dim dsnStr As String
Dim serverStr As String
Dim dbStr As String
Dim uidStr As String
Dim pwdStr As String
Dim schemaStr As String Dim sheet As Worksheet
Set sheet = ThisWorkbook.Sheets("Sheet1")
dsnStr = sheet.Range("C2")
serverStr = sheet.Range("C3")
dbStr = sheet.Range("C4")
uidStr = sheet.Range("C5")
pwdStr = sheet.Range("C6")
schemaStr = sheet.Range("C7") fiStr = ThisWorkbook.Path & "\QR_DBテーブル一覧.xlsx"
Dim wb As Workbook
Set wb = Workbooks.Open(fiStr) Dim sht As Object
Set sht = wb.Sheets("テーブル一覧")
sht.Range("A3:D" & sht.UsedRange.Rows.Count) = "" 'MySql接続
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset 'テーブル情報取得
conn.ConnectionString = "DSN=" & dsnStr & ";Server=" & serverStr & ";DB=" & dbStr & ";UID=" & uidStr & ";PWD=" & pwdStr & ";OPTION=3;" sqlStr = "select TABLE_NAME, TABLE_COMMENT from information_schema.tables where table_schema='" & schemaStr & "'"
conn.Open connStr Set rs = conn.Execute(sqlStr) Dim index As Integer
index =
While Not rs.EOF
sht.Range("A" & index) = index -
sht.Range("B" & index) = rs!TABLE_NAME
sht.Range("C" & index) = rs!TABLE_COMMENT 'テーブル定義情報
Dim shtName As String
shtName = tebleInfo(conn, wb, rs!TABLE_NAME, rs!TABLE_COMMENT, index) sht.Hyperlinks.Add Anchor:=sht.Range("B" & index), Address:="", SubAddress:="'" & shtName & "'" & "!C2"
rs.MoveNext
index = index +
Wend rs.Close: Set rs = Nothing
conn.Close: Set conn = Nothing
wb.Close savechanges:=False MsgBox "完了"
End Sub '----------------mysqlからテーブル定義出力---------------------------
Function tebleInfo(connTable As ADODB.Connection, wbTable As Workbook, tableNm As String, tableComment As String, idx As Integer) Dim rsTable As ADODB.Recordset
Set rsTable = New ADODB.Recordset '検索テーブル定義情報
sqlStr = "select COLUMN_NAME, COLUMN_COMMENT, COLUMN_KEY, COLUMN_TYPE, COLUMN_DEFAULT ,IS_NULLABLE from information_schema.columns where TABLE_SCHEMA='XXX_XXX_XXX' and TABLE_NAME = '" & tableNm & "'"
Set rsTable = connTable.Execute(sqlStr) Worksheets("テンプレート").Copy before:=Worksheets("テンプレート") 'シート名の長さが31文字以内
Dim sheetNm As String
If Len(tableNm) > Then
sheetNm = Right(tableNm, )
Else
sheetNm = tableNm
End If 'シート名存在チェック
Dim flag As Boolean
flag = SheetIsExist(wbTable, sheetNm)
If flag Then
Application.DisplayAlerts = False
'シート名存在したら、削除
wbTable.Sheets(sheetNm).Delete
Application.DisplayAlerts = True End If ActiveSheet.Name = sheetNm
Dim shtTable As Object
Set shtTable = ActiveSheet
shtTable.Range("C2") = tableNm
shtTable.Range("E2") = tableComment '取得した
Dim indexTable As Integer
indexTable =
While Not rsTable.EOF
'No
shtTable.Range("A" & indexTable) = indexTable -
'項目物理名(EN)
shtTable.Range("B" & indexTable) = rsTable!COLUMN_NAME
'項目論理名(CH)
shtTable.Range("C" & indexTable) = rsTable!COLUMN_COMMENT
'KEY
shtTable.Range("D" & indexTable) = rsTable!COLUMN_KEY
'属性
shtTable.Range("E" & indexTable) = rsTable!COLUMN_TYPE
'黙認
shtTable.Range("F" & indexTable) = rsTable!COLUMN_DEFAULT
'NULL
shtTable.Range("G" & indexTable) = rsTable!IS_NULLABLE
rsTable.MoveNext
indexTable = indexTable +
Wend
tebleInfo = sheetNm
End Function Function SheetIsExist(wbCheck As Workbook, shtNm As String) SheetIsExist = False
On Error GoTo lab1
Set shtSheet = wbCheck.Sheets(shtNm)
If shtSheet Is Nothing Then
SheetIsExist = False
Else
SheetIsExist = True
End If Set shtSheet = Nothing
Exit Function lab1:
SheetIsExist = False
End Function
最总实现的效果:


VBA来实现已存在的数据库,取得所有表的结构的更多相关文章
- sql server数据库备份单个表的结构和数据生成脚本
1.使用场景:sql server数据库备份单个表的结构和数据,在我们要修改正式系统的数据的一天或者多条某些数据时候,要执行update语句操作,安全稳健考虑,最好先做好所修改的表的结构和数据备份! ...
- sql server数据库备份单个表的结构和数据生成脚本【转】
1.使用场景:sql server数据库备份单个表的结构和数据,在我们要修改正式系统的数据的一天或者多条某些数据时候,要执行update语句操作,安全稳健考虑,最好先做好所修改的表的结构和数据备份! ...
- EntityFramework Code-First 简易教程(十一)-------从已存在的数据库中映射出表
怎样从一个已存在的数据库中映射表到 entity 实体? Entity Framework 提供了一个简便方法,可以为已存在的数据库里的所有表和视图创建实体类(entity class),并且可以用 ...
- linux环境:创建数据库用户,表空间,启动数据库
1.启动数据库 首先使用oracle用户登录Linux,然后在shell命令行中执行下面的命令:第一步:打开Oracle监听(先查看状态:oracle监听是否启动:lsnrctl status)$ l ...
- SQL SERVER 将一个数据库中的表和数据复制到另一个数据库中
第一种情况:将A数据库.dbo.A表的数据追加到B数据库.dbo.B表中 (条件:此时B数据库中已创建好了B表) insert into B数据库.dbo.B表 select * from A数据库. ...
- 《Entity Framework 6 Recipes》翻译系列 (4) -----第二章 实体数据建模基础之从已存在的数据库创建模型
不知道对EF感兴趣的并不多,还是我翻译有问题(如果是,恳请你指正),通过前几篇的反馈,阅读这个系列的人不多.不要这事到最后成了吃不讨好的事就麻烦了,废话就到这里,直奔主题. 2-2 从已存在的数据库创 ...
- 使用EF对已存在的数据库进行模块化数据迁移
注:本文面向的是已经对EF的迁移功能有所了解,知道如何在控制台下进行相关命令输入的读者 问题 最近公司项目架构使用ABP进行整改,顺带想用EF的自动迁移代替了以前的手工脚本. 为什么要替代? 请看下图 ...
- 如何把已有SQLSERVER数据库更名而且附加到数据库中?
如何把已有SQLSERVER数据库更名而且附加到数据库中? 例如:已有数据库:zrmaa,希望更名为jjsh 特别提醒:数据库名中不能加入下划线,因为数据库日志文件有下划线. 把数据库文件mdf和数据 ...
- 已知数据库中存在表tb_book2,通过在图书信息界面填写书本的基本信息,然后提交后写入数据库中的表格中。需要对提交的信息进行修改,信息填入不能为空,为空则则有提示。
jsp结合SQLSERVER向数据库中的表添加图书信息. 已知数据库中存在表tb_book2,通过在图书信息界面填写书本的基本信息,然后提交后写入数据库中的表格中.需要对提交的信息进行修改,信息填入不 ...
随机推荐
- CF516D Drazil and Morning Exercise【并查集,结论】
题目描述:一棵\(n\)个点的树,设\(d(u)=\max_{v\in V}\text{dis}(u,v)\),每次询问一个数\(l\),求一个最大的联通子图\(L\),使得\(\forall u,v ...
- javaee三层架构案例--简单学生管理系统
背景 学了jdbc.jsp等需要串起来,不然会忘记 项目环境 win10 jdk11 mysql8.0.13 jar包 c3p0-0.9.5.2 commons-dbutils-1.7 jstl mc ...
- 如何查看Linux cpu核数、版本等信息
CPU总核数 = 物理CPU个数 * 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数 1.查看CPU信息(型号): [root@iZ2ze1rl2qy ...
- python3编程基础之一:程序结构
程序从程序入口进入,到程序执行结束,大体是按照顺序结构执行语句.函数或代码块,掌握程序的结构,有利于把握程序的主体框架. 1.顺序结构--最常见的结构 顺序结构的程序设计是最简单的,只要按照解决问题的 ...
- meshing-划分圆柱结构化网格
原视频下载地址:https://yunpan.cn/cqjeckrzEpVkY 访问密码 eb5d
- Coroutine 协程
https://en.wikipedia.org/wiki/Coroutine Coroutines are computer program components that generalize s ...
- P5663 加工零件
P5663 加工零件 题解 暴力搜索 搜索显然会TLE #include<iostream> #include<cstdio> #include<cstdlib> ...
- GIS 空间分析案例分析-错误排除经验总结
GIS 空间分析案例分析-错误排除经验总结 商务科技合作:向日葵,135—4855__4328,xiexiaokui#qq.com 目录:问题发现,问题分析,解决方法,结果 1. problem di ...
- python脚本实现-excel二级统计
pandas和SQL数据分析实战视频教程 https://study.163.com/course/courseMain.htm?courseId=1006383008&share=2& ...
- Nginx设置黑名单
date: 2019-07-04 14:35:56 author: headsen chen notice: 个人原创 1,在分域名下面设置: [root@pro-nginx:/usr/local/ ...