VBA中连接数据库
VBA中連接數據庫
- 前言
- ADODB
- ADODB使用前的準備
- ADODB的2個核心概念
- ADODB 讀取數據三步曲
- 連接字符串
- 連接Excel,將worksheet做數據源的特別事項
前言
數據庫的重要性無需多說,稍微正式或復雜一點的應用都需要操縱數據庫讀寫數據。當然這里主要說的是關系數據庫,常見的數據庫有MS Access (是的, Access是一款桌面性關系數據庫)、MS SQL Server、IBM DB2、Oracle等等。
從連接方式上,也分好多種,比如ODBC、ADODB等等。
聽起來很復雜,但是實際上在VBA里連接數據庫是非常簡單的。這里我們介紹結構比較清晰的ADODB,它實際上是通用的,在其它語言里也是一樣的用法。
ADODB
關于ADODB概念性的東西,網上有很多資料,就不多介紹了。 這里著重介紹使用。
ADODB使用前的準備
如之前多次介紹,對于各種對象,初學者最簡單的辦法的先在Reference里引用它。選擇"Microsoft ActiveX Data Objects Library", 有很多個版本,不用太糾結,對于日常的簡單應用,哪個版本都差不多。
ADODB的2個核心概念
對ADODB, 有2個非常重要的對象:
- Connection
顧名思義, Connection對象建立并維持與目標數據庫的連接。要想使用一個數據庫,要做的第一件事就是"連接"這個數據庫 - Recordset
通常連接數據庫的目的,是為了讀取數據或是寫入數據。而取得數據,也就是"記錄", 就是通過Recordset來訪問。
當然還有Command、Error等其它重要對象,但是對于普通的小項目,學會使用Connection和Recordset 就夠用了。
ADODB 讀取數據三步曲
連接字符串
整個過程中,最重要的是連接字符串。上述示例中使用了With語句,也可以不使用With,而直接將Provider一起寫進連接字符串。
objConnection.Open("Provider = "SQLOLEDB"; Data Source=<myDataSource>;Network Library=DBMSSOCN;Initial Catalog=<Initial Catalog>;User ID=<User Name>;Password=<Password>")這里Open()方法中的參數就是連接字符串。顯然它由幾個固定的部分組成。
Provider是最重要的,不同的數據庫有不同的Provider:
- SQL Server: SQLOLEDB
- AS400: IBMDA400.DataSource.1
- Ms Access / Excel: Microsoft.ACE.OLEDB.12.0
連接Access和Excel通常只需要提供Provider和Data Source就夠了。(Excell連接如果失敗可以嘗試多提供一個Excel版本參數"Extended Properties=Excel 12.0;")
'Access "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Temp\Test.accdb" ) 'Excel, 注意Data Source需要完整的路徑與文件名 objConnection.Open("Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0; Data Source= C:\Temp\Test.xlsx")連接Excel,將worksheet做數據源的特別事項
-
如果 連接VBA運行的這個workbook, 可以使用ThisWorkbook.FullName取得完整路徑及文件名:
objConnection.Open ("Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0; Data Source= " & ThisWorkbook.FullName) -
一個Excel可以有多張worksheet, 相當于數據庫中的多張表。將數據表名和列范圍用[]括起來,下例中將Sheet2從B列到C列,第2行到第30行做為數據源。注意第一行會被認為是標題行
objRecordset.Open ("SELECT * FROM[Sheet2$B2:C30]")如果將整張worksheet做為數據源,那么無需要指定行列信息
objRecordset.Open ("SELECT * FROM[Sheet2$]")空行是不會被統計的,如上例中,雖然查詢的是B2:C30, 但是實際只有3行有效數據,返回的數據也只有3行。
總結
- 上一篇: 优秀工程师应该具备哪些素质_一名优秀工程
- 下一篇: 优化JS代码的34种方法(上)