日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

VBA中连接数据库

發布時間:2023/12/10 数据库 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 讀取數據三步曲

  • 第一步:創建所需的Connection和Recordset對象
  • 第二步: 使用Connection對象連接上數據庫
  • 第三步: 使用Recordset對象取得數據
  • Sub Test()'第一步: 創建對象Dim objConnection As New ADODB.ConnectionDim objRecordset As New ADODB.Recordset'第二步: 連接數據庫,一次性工作With objConnection '設置參數.CursorLocation = adUseClient.ConnectionTimeout = 120.Provider = "SQLOLEDB".ConnectionString = "Data Source=<myDataSource>;Network Library=DBMSSOCN;Initial Catalog=<Initial Catalog>;User ID=<User Name>;Password=<Password>".OpenEnd With'第三步: 讀取數據, 假定數據庫里有張表叫User_Table'以下設置是一次性的With objRecordset.ActiveConnection = objConnection.CursorLocation = adUseClient.LockType = 3.CursorType = 1End With'以下代碼每讀一次數據都需要用一次If objRecordset.State = 1 Then objRecordset.Close '如果Recordset對象已經處于open狀態,則關閉它objRecordset.Open ("SELECT * FROM User_Table") End Sub

    連接字符串

    整個過程中,最重要的是連接字符串。上述示例中使用了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行。

    總結

    以上是生活随笔為你收集整理的VBA中连接数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。