VBA數據庫解決方案第十講:Recordset記錄集合的動態查詢顯示結果

VBA語言専攻 2024-05-02 20:01:38

《VBA數據庫解決方案》教程(版權10090845)是我推出的第二套教程,目前已經是第二版修訂了。這套教程定位于中級,是學完字典後的另一個專題講解。數據庫是數據處理的利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作,教程第一版的修訂內容主要是完成所有程序文件的32位和64位OFFICE系統測試。

這套教程共兩冊,八十四講,今後一段時間會給大家陸續推出修訂後的教程內容。今日的內容是:VBA數據庫解決方案第十講:Recordset記錄集合的動態查詢,並顯示結果

【分享成果,隨喜正能量】一心熱枕對待生活,靜靜的安撫自己內心的急迫和焦慮,你人生的好運,常常在你沉醉于生活時悄悄臨門的。。

第十講 Recordset記錄集合的動態查詢,並顯示結果

大家好,今日繼續講解VBA數據庫解決方案的第10講內容,打開一個指定的數據庫記錄集,把所得的數據顯示到工作表中。今日的內容是和第8講,第9講內容是相連續,在第9講中講了打開記錄集的用的方法是“rsADO.Open strSQL, cnADO, 1, 3”,在第8講中我們講了還有一種是“Execute(strSQL)”方法,今日我們就講利用這種方法達到我們的目的,同時在SQL語句中的我們將查詢設置爲一個動態的查詢。

1 應用場景的具體分析

如下面的工作表文件:我們要根據I2單元格的提示部門信息來查找數據表中的數據並將查詢的結果放在左側的區域:

2 Execute(strSQL)方法實現查詢的代碼及代碼分析

我們看代碼:

Sub mynz_10() '第10講,打開一個指定的數據庫記錄集,把所得的數據顯示到工作表中的方法

Dim cnADO As Object, rsADO As Object

Dim strPath, strSQL As String

Dim i As Integer

strPath = ThisWorkbook.Path & "\mydata.accdb"

Set cnADO = CreateObject("ADODB.Connection")

With cnADO

.Provider = "Microsoft.ACE.OLEDB.12.0"

.Open strPath

End With

strSQL = "SELECT * FROM 職員表 WHERE 部門='" & Cells(2, 9) & " '"

Set rsADO = cnADO.Execute(strSQL)

Sheets("10").Select

Columns("A:E").Select

Selection.ClearContents

Cells(2, 9).Select

For i = 0 To rsADO.Fields.Count - 1

Cells(1, i + 1) = rsADO.Fields(i).Name

Next i

Range("A2").CopyFromRecordset rsADO

rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

End Sub

代碼截圖:

代碼解讀:

① Dim cnADO, rsADO As Object

Dim strPath, strSQL As String

Dim i As Integer

strPath = ThisWorkbook.Path & "\mydata.accdb"

Set cnADO = CreateObject("ADODB.Connection")

上面的代碼和第9講的相同,分別聲明了幾個變量並建立了數據庫的ADO連接,

② 在打開數據庫時同時設置了連接:

With cnADO

.Provider = "Microsoft.ACE.OLEDB.12.0"

.Open strPath

End With

這種連接方式采用了我在第8講中講到另外的方式,可以參考一下。

③strSQL = "SELECT * FROM 職員表 WHERE 部門= '" & Cells(2, 9) & " '"

我們要重點的講解一下這條語句,之前有朋友聯絡問過這類語句的書寫方式,今日可以一並回答,這裏要注意變量,變量是代碼中的變量,在SQL語句中是不能出現變量的,要是常量並用引號括起來,所以在上面的語句中

a "SELECT * FROM 職員表 WHERE 部門= '" 爲第一部分

b 最後的 " '"爲第三部分

c Cells(2, 9)爲第二部分。

三個部分中間用“&”連接起來。大家要務必記住這種書寫的方式,這樣在程序的運行中SQL語句才正確,下面看看在運行過程中的SQL語句:

④ Set rsADO = cnADO.Execute(strSQL) 對于這條語句,我在第8講的內容中,也講到是一種打開記錄集的方式之一,是Connection對象的Execute方法,通過上面語句,我們就可以執行查詢,並將結果保存到集合的對象中。

下面我將Connection對象的Execute方法再次專門的講解一下:

ADODB.Connection對象的Execute方法:

該方法用于執行SQL語句。根據SQL語句執行後是否返回記錄集,該方法的使用格式分爲以下兩種:

第一種:執行SQL查詢語句時,將返回查詢得到的記錄集。用法爲:

Set對象變量名=連接對象.Execute("SQL語句")

Execute方法調用後,會自動創建記錄集對象,並將查詢結果存儲在該記錄對象中,通過Set方法,將記錄集賦給指定的對象保存,以後對象變量就代表了該記錄集對象。

第二種:執行SQL的操作性語言時,沒有記錄集的返回。此時用法爲:

連接對象.Execute "SQL語句" [,RecordAffected][, Option]

參數 RecordAffected爲可選項,此出可放置一個變量,SQL語句執行後,所生效的記錄數會自動保存到該變量中。通過訪問該變量,就可知道SQL語句隊多少條記錄進行了操作。

參數 Option 可選項,該參數的取值通常爲adCMDText,它用于告訴ADO,應該將Execute方法之後的第一個字符解釋爲命令文本。通過指定該參數,可使執行更高效

在第9講的講解中,我們用了第二種方法,今日的代碼用的是第一種代碼。至于那種好,我這裏沒有說明,可以根據寫代碼人員的喜好即可。

代碼的運行結果:

今日內容回向:

1 Connection對象的Execute方法有哪兩種方法?

2 如何實現可控的指定查詢?並將結果顯示?

本講內容參考程序文件:VBA與數據庫操作(第一冊).xlsm

我20多年的VBA實踐經驗,全部濃縮在下面的各個教程中:

0 阅读:11

VBA語言専攻

簡介:專注VBA