在日常工作當中姆打,很多人每天的任務就是做表做表做表,而表格數(shù)據(jù)又得從數(shù)據(jù)庫中去查找肠虽,然后查詢出來的數(shù)據(jù)導出為Excel文件幔戏,然后再在Excel里面用函數(shù),數(shù)據(jù)透視表做著以往每天都要做的內(nèi)容税课。實話說闲延,既費時,又苦逼了自己韩玩。
其實這些重復性工作完全可以通過VBA去實現(xiàn)垒玲。
這篇文章就是想展示怎么樣利用VBA鏈接MySQL數(shù)據(jù)庫進行查詢的。
因為我們是通過ODBC和ADO方式進行連接的找颓,所以b在此之前必須保證對電腦進行以下的配置
1侍匙、VBA連接MySQL前的環(huán)境配置
1.1首先你電腦上安裝了MySQL
1.2啟用腳本支持
在使用前,需要先在VBE窗口中啟動數(shù)據(jù)庫連接支持叮雳。在菜單欄選擇“工具”-“引用”,在彈出的引用窗口中妇汗,找到"Microsoft
ActiveX Data Objects 6.1 Library"和"Microsoft ActiveX Data Objects
Recordset 6.0 Library"帘不,把前面的框勾選上,點擊確定即可杨箭。
1.3安裝mysql ODBC連接服務
下載地址:Download Connector/ODBC
這里有一點要注意的是寞焙,如果mysql安裝的是5.5版本的,Connector/ODBC應該安裝5.1版本互婿。如果數(shù)據(jù)庫安裝的是5.7版本的捣郊,Connector/ODBC可以安裝5.3版本的,其他版本的數(shù)據(jù)庫應該安裝什么版本的Connector/ODBC慈参,因為沒用過呛牲,所以不清楚。至于是安裝32位的還是64位的驮配,并不是看你電腦位數(shù)娘扩,而是看你安裝的mysql是什么位數(shù)的着茸。
1.4.添加ODBC數(shù)據(jù)源
打開“控制面板”-“管理工具”-“ODBC 數(shù)據(jù)源”,在彈出的窗口中的“用戶DSN”選項卡右側琐旁,選擇“添加”涮阔,如果是5.3版本的,在新數(shù)據(jù)庫源中會出現(xiàn)兩個MySQL驅(qū)動灰殴,分別為“MySQLODBC 5.3 ANSI Driver”及"MySQL ODBC 5.3 Unicode Driver"敬特,很明顯兩者的區(qū)別在于編碼標準。選中其中一個牺陶,點完成即可伟阔。如果是5.1版本的,那出現(xiàn)的會是MySQL ODBC 5.1 Driver
已上環(huán)境配置好之后就可以進行在VBE窗口里面寫代碼了
2. VBA連接MySQL并執(zhí)行簡單查詢
Sub importFromMySQL()
Dim conn As Object
Dim rs As Object
Set conn = CreateObject("adodb.connection")
With conn
.ConnectionString = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;DB=train;UID=root;PWD=123456;OPTION=3;Stmt=set names GBK"
.Open
End With
Sql = "select * from orders"
Set rs = conn.Execute(Sql)
For i = 1 To rs.Fields.Count
Cells(1, i) = rs.Fields(i - 1).Name
Next i
Range("a2").CopyFromRecordset rs
rs.Close: Set rs = Nothing
conn.Close: Set conn = Nothing
End Sub
接下來詳細解釋一下這段代碼的思路含義:
1 最開頭要對我們之后要用到的變量對象定義
Dim i As Integer #將i定義為整型數(shù)據(jù)
Dim conn As Object #將conn定義為對象
Dim rs As Object #將rs定義為對象
Dim Sql As String #將Sql定義為字符型
2 接下來要創(chuàng)建一個對象义图,即數(shù)據(jù)庫連接對象
Set conn = CreateObject("ADODB.Connection") #數(shù)據(jù)庫連接對象
3 第三步是要創(chuàng)建一個連接字符串减俏,因為我們平時登錄MySQL也是需要什么密碼啊,用戶名之類的碱工。連接字符串的功能就相當于我們寫的登錄MySQL的語句娃承。
With conn
.ConnectionString = "Driver={MySQL ODBC 5.1 Driver};Server=localhost;DB=train;UID=root;PWD=123456;OPTION=3;Stmt=set names GBK"
.Open '相當于conn.open,即用open將conn和數(shù)據(jù)庫相連
End With
參數(shù) | 默認值 | 注釋 |
---|---|---|
uid | ODBC (on Windows) | 用于鏈接至MySQL的用戶名怕篷。 |
server | localhost | MySQL服務器的主機名历筝。 |
database(DB) | 數(shù)據(jù)庫。 | |
port | 3306 | 如果服務器不是本地主機將要使用的TCP/IP端口廊谓。 |
pwd | 服務器上用戶賬戶的密碼梳猪。 | |
DRIVER | MySQL的驅(qū)動程序 | |
OPTION | 用于指定ODBC Connector的工作方式的 |
- DRIVER是MySQL的驅(qū)動程序,這個驅(qū)動程序的版本名稱怎么寫得看自己電腦上管理工具里的ODBC數(shù)據(jù)源-驅(qū)動程序,具體看圖2
- OPTION蒸痹,按MySQL官方的說法是用于指定ODBC Connector的工作方式的春弥,但是我在他們官方文檔中并沒有找到有哪個選項是的值對應是3的。所以這里只有照寫了叠荠。但是經(jīng)過測試匿沛,好像是代表前三次能夠正常查詢,以后的查詢結果好像都跟第3次一樣榛鼎,讀者可以自己去測試一下逃呼。
- server 數(shù)據(jù)庫服務器的計算機名字,或者IP。如果本機是服務器,設置為Localhost或127.0.0.1者娱。
- 其他的database抡笼,UID,pwd相信大家都看得懂黄鳍,我就不細說了
4 第四步 推姻,寫上自己的sql語句
Sql = "select * from orders"
- from 后面的表是要你在用戶DSN設置的時候選的數(shù)據(jù)庫中的表
5 第五步:執(zhí)行sql語句,并將加過返回到excel中
Set rs = conn.Execute(Sql) '用于執(zhí)行SQL語句并接收查詢語句返回的結果集框沟,rs對象即為adodb.recordset對象
For i = 1 To rs.Fields.Count #查詢結果字段名的個數(shù)
Cells(1, i) = rs.Fields(i - 1).Name #將字段名賦值給第一行第一列至第一行第rs.Fields.Count列的單元格
Next i
Range("a2").CopyFromRecordset rs #將查詢結果通過CopyFromRecordset這個方法存到在Excel表中拾碌,以A2單元格為開頭
6 第六步吐葱,關閉和釋放rs和conn兩個對象
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
至此,一個相對簡單的VBA連接數(shù)據(jù)庫并查詢的代碼就算完成了校翔。