VBA鏈接數據庫

此次維護的項目須要根據Excel文件中條件,抽取數據庫的信息,導出到CSV文件。
而後就給出了兩種方案:1、直接鏈接數據庫,寫入本地文件。;2、WebService取得最終的信息,寫入本地文件。
首先看直接鏈接數據庫。

默認VBA環境是不支持鏈接數據庫的,須要手動添加引用,以下圖:
選擇【Microsoft ActiveX Data Objects 2.8 Library】,打勾,按OK按鈕返回。
若是圖中表示的不同,儘可能選擇高版本的。
選擇ADODB引用

VBA中採用ADODB的方式,定義三個變量
Dim conn As New ADODB.Connection
Dim cmd As New ADODB.command
Dim rs As New ADODB.Recordset

本次使用的SqlServer,鏈接字符串以下
Provider=SQLOLEDB;Server=數據庫地址;User ID=用戶;Password=密碼;database=數據庫名;Connection Reset=FALSE

設置鏈接字符串,並打開鏈接
conn.ConnectionString = strConn
conn.Open

設置Command的鏈接和sql語句
 Set cmd.ActiveConnection = conn
cmd.CommandText = strSQL

執行command,結果存放在rs裏
Set rs = cmd.Execute

查詢結果的表頭信息在rs.Fields裏
能夠遍歷一下,取出來放在Sheet1裏,從單元格A1開始
For col = 0 To rs.Fields.Count - 1
        Worksheets("Sheet1").Range("A1").Offset(0, col).Value = rs.Fields(col).Name
Next
而後把結果放在第二行,從單元格A2開始
Worksheets("Sheet1").Range("A1").Offset(1, 0).CopyFromRecordset rs

到目前爲止只是爲了驗證執行結果,下面開始寫入CSV文件。

定義文件對象,文件對象的使用方法能夠查看資料
Dim fs, f
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.OpenTextFile("c:\sample.csv", 8, True)

定義臨時變量,存放CSV的一行信息
    Dim csvRowText As String
    csvRowText = ""
首先把表頭信息寫入文件
    For col = 0 To rs.Fields.Count - 1
        If col = 0 Then
        csvRowText = rs.Fields(col).Name
        Else
        csvRowText = csvRowText + "," + rs.Fields(col).Name
        End If
    Next
f.writeline csvRowText


遊標移到第一行
rs.MoveFirst
遍歷結果集,防止全是數字時,在excel打開時,顯示成數字,因此都加上雙引號.
    While (rs.EOF = False)
        csvRowText = ""
        For col = 0 To rs.Fields.Count - 1
            If col = 0 Then
                csvRowText = """" + rs(col).Value + """"
            Else
                csvRowText = csvRowText + ",""" + rs(col).Value + """"
            End If
        Next
        f.writeline csvRowText
        rs.MoveNext
    Wend
    f.Close

關閉鏈接,釋放資源
    Set rs = Nothing
    conn.Close
    Set conn = Nothing

以上就是VBA鏈接數據庫時的查詢操做,固然在高級語言裏ADODB能作update,delete,insert,VBA裏都能作到。
根據須要靈活便可。
相關文章
相關標籤/搜索