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,通过在图书信息界面填写书本的基本信息,然后提交后写入数据库中的表格中.需要对提交的信息进行修改,信息填入不 ...
随机推荐
- jQuery网页加载的不同方式
一.window.onload 代码是从上而下执行的,通过window.onload可以使事件在页面加载完毕再执行 注意:window.onload事件多个只会执行最下面的一个,前面的会被覆盖 < ...
- [转] C++ STL中map.erase(it++)用法原理解析
总结一下map::erase的正确用法. 首先看一下在循环中使用vector::erase时我习惯的用法: for(vector<int>::iterator it = vecInt.be ...
- TensorFlow(六):tensorboard网络结构
# MNIST数据集 手写数字 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # ...
- 使用Ajax和一般处理程序实现文件上传与下载
1.使用HTML的input标签 <input type="file" multiple="multiple" id="file_load&qu ...
- AdvanceEast源码理解
目录 文章思路 源码理解 一. 标签点形式 按顺序排列四个点,逆时针旋转,且第一个点为左上角点(刚开始选择最左边的点, 二. 标签切边 三. loss计算 四. NMS 最后说明 文章思路 大神的gi ...
- OS创建页目录和页
;开始创建页目录项(PDE) .create_pde: ; 创建Page Directory Entry mov eax, PAGE_DIR_TABLE_POS ; PAGE_DIR_TABLE_PO ...
- Ubuntu 14.04 indigo 相关依赖
sudo apt-get install libbullet-dev sudo apt-get install ros-indigo-bfl sudo apt-get install libsdl-d ...
- [bzoj 3534][Sdoi2014] 重建
传送门 Description T国有N个城市,用若干双向道路连接.一对城市之间至多存在一条道路. 在一次洪水之后,一些道路受损无法通行.虽然已经有人开始调查道路的损毁情况,但直到现在几乎没有消息传 ...
- Concurrent初探 --- Atomic 无锁
一.CAS算法 Compare And Swap,CAS算法的过程是这样:它包含3个参数CAS(V,E,N).V表示要更新的变量,E表示预期值,N表示新值.仅当V值等于E值时,才会将V的值设为N,如果 ...
- sonca排除不扫描文件
在pom.xml文件中的<properties>标签下加上<sonar.exclusions>XXX</sonar.exclusions>标签,如下 <pro ...