本文主要涉及:
- VBA中的SQL Server環境配置
- VBA連接SQL Server數據庫
- VBA讀寫SQL Server數據
- 如何安裝SQL Client
系統環境:
- Windows 7 64bit
- Excel 2016 64bit
1. VBA連接SQL Server前的環境配置
在Excel這邊,需要先在VBE中啟動數據庫連接支持。按下Alt+F11打開VBE,在菜單欄選擇“工具”-“引用”,在彈出的引用窗口中,找到"Microsoft ActiveX Data Objects 6.1 Library"和"Microsoft ActiveX Data Objects Recordset 2.8 Library",把前面的框勾選上,點擊確定即可。 (如果不是這兩個版本,則選擇一個版本號最高的勾選即可,如果是需要分享給office2003版的用戶,建議勾選版本最低的)
2. VBA連接SQL Server
在按照上述步驟配置了環境支持后,就可以在VBA中使用代碼連接SQL Server了。
首先需定義連接對象:
Dim conn as ADODB.Connection Set conn = new ADODB.Connection
這里也可以簡寫為:
Dim con As New ADODB.Connection
連接數據庫
conn.ConnectionString = "Provider=SQLOLEDB;Server=192.168.1.1;Database=XXXXX;Uid=sa;Pwd=123456" conn.Open
連接字符串ConnectionString
中的各個參數應該很明了,就不一一解釋了。
上一段代碼也可以簡寫為
con.Open "Provider=SQLOLEDB;Server=192.168.1.1;Database=XXXXX;Uid=sa;Pwd=123456"
至此,數據庫連接成功!
可以使用連接對象的State
屬性和Version
屬性查看數據庫狀態和版本(檢查是否連接成功)
MsgBox("連接成功!" & vbCrLf & "數據庫狀態:" & con.State & vbCrLf & "數據庫版本:" & con.Version)
最后關閉數據庫連接
con.Close Set con = Nothing
整個過程的完整代碼如下:
Sub 連接SQL Server數據庫() '1. 引用ADO工具 '2. 創建連接對象 Dim con As New ADODB.Connection '3. 建立數據庫的連接 con.ConnectionString = "Provider=SQLOLEDB;Server=192.168.1.1;Database=XXXXX;Uid=sa;Pwd=123456" con.Open MsgBox ("連接成功!" & vbCrLf & "數據庫狀態:" & con.State & vbCrLf & "數據庫版本:" & con.Version) con.Close Set con = Nothing End Sub
3. VBA讀寫SQL Server數據表
3.1 讀取SQL Server數據到Excel
代碼如下:
Sub linkSQL Server() Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Set conn = New ADODB.Connection Set rs = New ADODB.Recordset '配置連接串 conn.ConnectionString = "Provider=SQLOLEDB;Server=192.168.1.1;Database=XXXXX;Uid=sa;Pwd=123456" conn.Open '從test數據庫的YGXM表中取出所有數據 rs.Open "select * from `YGXM`", conn '設置表頭 Range("A1:B1").Value = Array("ID", "Name") '將數據輸出到工作表 Range("A2").CopyFromRecordset rs '關閉連接 rs.Close: Set rs = Nothing conn.Close: Set conn = Nothing End Sub
相比前面的代碼,以上代碼多了 ADODB.Recordset 和 rs.Open,ADODB.Recordset 用於執行SQL語句並接收查詢語句返回的結果集。
這里需要提一下的是,在VBA中執行SQL語句有兩種方式,其一是使用連接對象執行: conn.Execute ,其第一個參數就是SQL語句;另一種則使用結果集對象執行: rs.Open ,這種方式有兩個必要參數,分別是SQL語句和連接對象,如上例中的 rs.Open "select * from `test`", conn 。
接下來的兩行Range是用於把查詢結果復制到Excel表格中的。
3.2 寫入數據到SQL Server
其實寫入數據,只需要把上例中的SQL語句改成 UPDATE 或者 INSERT 即可,就不多說了。
番外篇—— 安裝SQL Server client 服務
如果你正好需要使用其他語言通過ODBC連接SQL Server,可能需要先安裝SQL Server client服務。
可以選擇使用官方安裝包,或者使用Navicat連接一次SQL Server(第一次連接時如果沒安裝會提示你安裝)
這里以使用官方安裝包為例: 下載地址 提取碼: 913s
一路下一步,在這一步選擇“此功能及所有子功能將安裝到本地硬盤上
然后繼續一路下一步即可。
ODBC的設置和MySQL或Oracle類似,在此不再贅述,如需要可以留言或者發郵件討論。
PS:數據庫連接工具推薦使用Navicat,可以同時連接不同的數據庫,非常方便。
我常用的是11.0.16版本 下載地址 提取碼: s5kt
往期鏈接:
Excel VBA 連接各種數據庫(一) VBA連接MySQL數據庫
Excel VBA 連接各種數據庫(二) VBA連接Oracle數據庫