VBA MySQL数据库连接帮助类

本篇文章分享本人常用的VBA链接MYSQL数据库通用帮助类,有需要的可以拿去

1.引用VBA相关的类库

1
2
Microsoft ActiveX Data Objects 6.1
Microsoft Scripting Runtime

2.安装MySQL驱动

1
mysql-connector-odbc-8.0.33-win32.msi

3.MySQL帮助类代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
Option Explicit

''数据库对象
Public mysqlCn As New ADODB.Connection

''数据库配置
Private Const Driver As String = "MySQL ODBC 8.0 Unicode Driver" '' 驱动程序,MySQL ODBC 5.3 Unicode Driver
Private Const Host As String = "xxxxx.com" ''数据库地址
Private Const Port As Integer = 3306 ''数据库端口
Private Const UID As String = "user" ''数据库账号
Private Const PWD As String = "password" ''数据库密码
Private Const CharSet As String = "Utf-8" ''数据库编码


''初始化类
Private Sub Class_Initialize()
On Error Resume Next
Dim ConnectionString As String
ConnectionString = "Driver=" & Driver & ";Server=" & Host & ";Database=mydb;Uid=" & UID & ";Pwd=" & PWD & ";Option=" & Port & ";Stmt=Set Names " & CharSet
mysqlCn.Open ConnectionString
mysqlCn.CursorLocation = adUseClient
If Err <> 0 Then
MsgBox "连接数据库失败!" & vbCrLf & "错误信息" & Err.Number & ":" & Err.Description
Err.Clear '清除错误
Exit Sub
End If
End Sub


''析构类
Private Sub Class_Terminate()
mysqlCn.Close
End Sub



''查询数据,并把数据转化成集合字典
Public Function QueryDatasToListDic(sql As String) As Collection
On Error GoTo er
Dim lst As New Collection, dic As Dictionary
Dim rs As New ADODB.Recordset: Set rs = mysqlCn.Execute(sql)
''读取数据
rs.MoveFirst
Do While Not rs.EOF
Set dic = New Dictionary
Dim field As Variant
For Each field In rs.Fields
dic.Add field.Name, field.Value
Next field
lst.Add dic
rs.MoveNext
Loop
rs.Close
Set QueryDatasToListDic = lst
Exit Function
er:
Debug.Print Err.Description
Set QueryDatasToListDic = Nothing
End Function


''查询数据,并把数据转成二维数组,数据包含表头
Public Function QueryDataToArrayInHeader(sql As String) As Variant
On Error GoTo er
''获取数据库数据
Dim rs As New ADODB.Recordset
Set rs = mysqlCn.Execute(sql)
' 获取表头字段名
Dim arr() As Variant
Dim i As Long, j As Long
ReDim arr(0 To rs.RecordCount + 1, 0 To rs.Fields.Count)
For j = 0 To rs.Fields.Count - 1
arr(0, j) = rs.Fields(j).Name
Next j
' 获取数据,转换成数组
rs.MoveFirst
i = 1
Do While Not rs.EOF
For j = 0 To rs.Fields.Count - 1
arr(i, j) = rs.Fields(j).Value
Next j
rs.MoveNext
i = i + 1
Loop
rs.Close
' 返回数据
QueryDataToArrayInHeader = arr
Exit Function
er:
Debug.Print Err.Description
QueryDataToArrayInHeader = Nothing
End Function

''查询数据,并把数据转成二维数组
Public Function QueryDataToArray(sql As String) As Variant
On Error GoTo er
''获取数据库数据
Dim rs As New ADODB.Recordset
Set rs = mysqlCn.Execute(sql)
' 获取数据,转成数组
Dim arr() As Variant
Dim i As Long, j As Long
ReDim arr(0 To rs.RecordCount, 0 To rs.Fields.Count)
rs.MoveFirst
i = 0
Do While Not rs.EOF
For j = 0 To rs.Fields.Count - 1
arr(i, j) = rs.Fields(j).Value
Next j
rs.MoveNext
i = i + 1
Loop
rs.Close
''返回数据
QueryDataToArray = arr
Exit Function
er:
Debug.Print Err.Description
QueryDataToArray = Nothing
End Function


''查询所有数据,并把数据写入指定单元格
Public Sub QueryAllDataToRange(sql As String, rng As Range)
On Error GoTo er
''获取数据库数据
Dim rs As New ADODB.Recordset
Set rs = mysqlCn.Execute(sql)
''把数据写入单元格
rng.CopyFromRecordset rs
rs.Close
Exit Sub
er:
MsgBox "数据查询失败!" & vbCrLf & "错误信息" & Err.Number & ":" & Err.Description
End Sub


'' 执行SQL指令(返回受影响的行)
Public Function ExecuteSQL(sql As String) As Long
On Error GoTo er
Dim affectedRows As Long
Call mysqlCn.Execute(sql, affectedRows)
ExecuteSQL = affectedRows
Exit Function
er:
Debug.Print Err.Description
ExecuteSQL = 0
End Function




VBA MySQL数据库连接帮助类
https://bgmh.work/2023/12/15/VBA-MySQL数据库连接帮助类/
作者
OuHuanHua
发布于
2023年12月15日
许可协议