问题描述

用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来实现已存在的数据库,取得所有表的结构的更多相关文章

  1. sql server数据库备份单个表的结构和数据生成脚本

    1.使用场景:sql server数据库备份单个表的结构和数据,在我们要修改正式系统的数据的一天或者多条某些数据时候,要执行update语句操作,安全稳健考虑,最好先做好所修改的表的结构和数据备份! ...

  2. sql server数据库备份单个表的结构和数据生成脚本【转】

    1.使用场景:sql server数据库备份单个表的结构和数据,在我们要修改正式系统的数据的一天或者多条某些数据时候,要执行update语句操作,安全稳健考虑,最好先做好所修改的表的结构和数据备份! ...

  3. EntityFramework Code-First 简易教程(十一)-------从已存在的数据库中映射出表

    怎样从一个已存在的数据库中映射表到 entity 实体? Entity Framework 提供了一个简便方法,可以为已存在的数据库里的所有表和视图创建实体类(entity class),并且可以用 ...

  4. linux环境:创建数据库用户,表空间,启动数据库

    1.启动数据库 首先使用oracle用户登录Linux,然后在shell命令行中执行下面的命令:第一步:打开Oracle监听(先查看状态:oracle监听是否启动:lsnrctl status)$ l ...

  5. SQL SERVER 将一个数据库中的表和数据复制到另一个数据库中

    第一种情况:将A数据库.dbo.A表的数据追加到B数据库.dbo.B表中 (条件:此时B数据库中已创建好了B表) insert into B数据库.dbo.B表 select * from A数据库. ...

  6. 《Entity Framework 6 Recipes》翻译系列 (4) -----第二章 实体数据建模基础之从已存在的数据库创建模型

    不知道对EF感兴趣的并不多,还是我翻译有问题(如果是,恳请你指正),通过前几篇的反馈,阅读这个系列的人不多.不要这事到最后成了吃不讨好的事就麻烦了,废话就到这里,直奔主题. 2-2 从已存在的数据库创 ...

  7. 使用EF对已存在的数据库进行模块化数据迁移

    注:本文面向的是已经对EF的迁移功能有所了解,知道如何在控制台下进行相关命令输入的读者 问题 最近公司项目架构使用ABP进行整改,顺带想用EF的自动迁移代替了以前的手工脚本. 为什么要替代? 请看下图 ...

  8. 如何把已有SQLSERVER数据库更名而且附加到数据库中?

    如何把已有SQLSERVER数据库更名而且附加到数据库中? 例如:已有数据库:zrmaa,希望更名为jjsh 特别提醒:数据库名中不能加入下划线,因为数据库日志文件有下划线. 把数据库文件mdf和数据 ...

  9. 已知数据库中存在表tb_book2,通过在图书信息界面填写书本的基本信息,然后提交后写入数据库中的表格中。需要对提交的信息进行修改,信息填入不能为空,为空则则有提示。

    jsp结合SQLSERVER向数据库中的表添加图书信息. 已知数据库中存在表tb_book2,通过在图书信息界面填写书本的基本信息,然后提交后写入数据库中的表格中.需要对提交的信息进行修改,信息填入不 ...

随机推荐

  1. jQuery相关方法4-----元素创建和移除

    一.创建添加元素 父元素.append(子元素)-----被动追加创建 子元素.appendTo(父元素)-----主动追加创建 <script src="http://libs.ba ...

  2. 实验1C语言开发环境使用和数据类型、运算符、表达式

    # include <stdio.h> int main() { char ch; printf("输入一个字符:\n"); scanf("%c", ...

  3. 开启php的PDO扩展,mysql扩展

    打开php.ini配置文件,找到extension=php_pdo.dll 和 extension=php_pdo_mysql.dll ,去掉前面“;”的注释,修改后的两行配置内容如下: extens ...

  4. Spring Cloud Gateway(六):路由谓词工厂 RoutePredicateFactory

    本文基于 spring cloud gateway 2.0.1 1.简介 Spring Cloud Gateway 创建 Route 对象时, 使用 RoutePredicateFactory 创建 ...

  5. Manjaro Linux无备份迁移home目录

    前几天安装了最新的manjaro kde 18.10,速度刚开始非常快,后来几乎每次重启都会出现无法挂在home分区的情况,刚开始以为是分区对齐的问题,但是后来发现根本不是.算了,干脆迁移下home分 ...

  6. mysql 对返回的值是null进行判断和重新赋值

    SELECT IFNULL(sum(c.tax_data),) ,IFNULL(SUM(c.fiscal_ret),) FROM corp_tax c WHERE c.industry_id = 使用 ...

  7. UNIX网络编程 环境搭建

    配置好动态链接库或者静态链接库 1,下载UNIX网络编程书的头文件及示例源码unpv13e 2    按照readme来编译 Execute the following from the src/ d ...

  8. php7的扩展库安装方法

    转:https://www.cnblogs.com/to-be-rich/p/8001175.html 今天的知识点:1.php的再次编译不会对现有的php业务有影响,只有正式kill -USR2 p ...

  9. git 初次提交

    前提:已经关联了ssh到本地,不用再输入用户名和密码 知道仓库地址:https://xxx.xxx.com/aiotcloud/yihao01-node-js.git 第一步:进入本地文件夹执行 gi ...

  10. PHP 根据 IP 获取定位数据

    使用的工具 GEOIP 配置 在PHP中使用 使用的工具 GEOIP: 什么是GepIP ? 所谓GeoIP,就是通过来访者的IP, 定位他的经纬度,国家/地区,省市,甚至街道等位置信息.这里面的技术 ...