问题描述

用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. 十七.rsync+SSH同步

    1. rsync同步操作 • 命令用法 – rsync [选项...] 源目录 目标目录   • 同步与复制的差异 – 复制:完全拷贝源到目标 – 同步:增量拷贝,只传输变化过的数据   • rsyn ...

  2. learning scala for comprehensions

    code: package com.aura.scala.day01 object forComprehensions { def main(args: Array[String]): Unit = ...

  3. list, vector, map, set 区别与用法比较

    List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]. Vector对于随机 ...

  4. linux系列(十八):locate命令

    1.命令格式: locate [选择参数] [样式] 2.命令功能: locate指令和find找寻档案的功能类似,但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库 ...

  5. vue中封装一个倒计时

    <template> <div class="countDownBox"> <div class="row resetStyle" ...

  6. 持续api管理翻译

    - 书籍内容 > 地址: https://www.safaribooksonline.com/library/view/continuous-api-management/97814920435 ...

  7. 使用tmate快速分享你的终端会话

    tmate 的意思是 teammates,它是 tmux 的一个分支,并且使用相同的配置信息(例如快捷键配置,配色方案等).它是一个终端多路复用器,同时具有即时分享终端的能力.它允许在单个屏幕中创建并 ...

  8. class与computed一起应用

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

  9. GO 跟C++/C差异

    规范的语法(不需要符号表来解析) 垃圾回收(独有) 无头文件 明确的依赖 无循环依赖 常量只能是数字 int和int32是两种类型 字母大小写设置可见性(letter case sets visibi ...

  10. JDBC的概述和简单使用

    1. 概念 JDBC是 Java DataBase Connectivity 的简写,翻译过来就是 Java 操作数据库. 目的是使用统一的Java代码操作所有关系型数据库. JDBC实际是定义了一套 ...