问题描述

用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. 洛谷 P2347 砝码称重 题解

    每日一题 day12 打卡 Analysis 完全背包 #include<iostream> #include<cstdio> #include<cstring> ...

  2. Greenplum table 之 appendonly的列存储表

    一.appendonly的列存储表 1.创建列存储表 create table test_column_ao( id bigint, name varchar(128), value varchar( ...

  3. TensorFlow(一):准备

    我的环境:win10+python3.6.4(64位) 一:安装python 根据自己的电脑下载python(32位或者64位)-->安装教程 安装好python后记得配置pip源,使用官方的源 ...

  4. ROStopic 通信方式

    操作演示,对 topic 通信方式的理解请看:点击打开链接 开启终端,运行 roscore 新开一个终端(已经安装好(ros-<distro>-ros-tutorials 包,否则运行  ...

  5. shiro 配置注解异常 java.lang.ClassNotFoundException: org.aspectj.util.PartialOrder$PartialComparable

    解决方案: pom 文件添加: <!-- 解决shiro注解(shiro 使用 aop) --> <dependency> <groupId>aspectj< ...

  6. 数据结构Java版之排序算法(二)

    排序按时间复杂度和空间复杂度可分为 低级排序 和 高级排序 算法两种.下面将对排序算法进行讲解,以及样例的展示. 低级排序:冒泡排序.选择排序.插入排序. 冒泡排序: 核心思想,小的数往前移.假设最小 ...

  7. html 获取地址栏信息

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...

  8. JDK安装及Java环境变量配置

    1.JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html. 2.点击A ...

  9. 网页表格导入导出Excel

    用JS实现网页表格数据导入导出excel. 首先是JS文件中的代码 (function($){ function getRows(target){ var state = $(target).data ...

  10. ab 压测

    Linux学习14-ab报错apr_pollset_poll: The timeout specified has expired (70007) 前言 使用ab压力测试时候出现报错apr_polls ...