大家好,今日繼續(xù)講解VBA與數(shù)據(jù)庫解決方案的第10講內(nèi)容,打開一個指定的數(shù)據(jù)庫記錄集,把所得的數(shù)據(jù)顯示到工作表中的方法。今日的內(nèi)容是和第8講,第9講內(nèi)容是相連續(xù),在第9講中講了打開記錄集的用的方法是rsADO.Open strSQL, cnADO, 1, 3,在第8講中我們講了還有一種是Execute(strSQL)方法,今日我們就講利用這種方法達到我們的目的,同時在SQL語句中的我們將查詢設置為一個動態(tài)的查詢。
如下面的工作表文件:我們要根據(jù)I2單元格的提示部門信息來查找工作表的數(shù)據(jù)并將查詢的結(jié)果放在左側(cè)的區(qū)域:
我們看代碼:
Sub mynzra2()
Dim cnADO, 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)
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講的相同,分別聲明了幾個變量并建立了數(shù)據(jù)庫的ADO連接,
② 在打開數(shù)據(jù)庫時同時設置了連接:
With cnADO
.Provider = 'Microsoft.ACE.OLEDB.12.0'
.Open strPath
End With
這種連接方式采用了我在第8講中講到另外的方式,可以參考一下。
③strSQL = 'SELECT * FROM 職員表 WHERE 部門= '' & Cells(2, 9) & ' ''
我們要重點的講解一下這條語句,之前有朋友聯(lián)絡問過這類語句的書寫方式,今日可以一并回答,這里要注意變量,變量是代碼中的變量,在SQL語句中是不能出現(xiàn)變量的,要是常量并用引號括起來,所以在上面的語句中
a 'SELECT * FROM 職員表 WHERE 部門= '' 為第一部分
b 最后的 ' ''為第三部分
c Cells(2, 9)為第二部分。
三個部分中間用'&'連接起來。大家要務必記住這種書寫的方式,這樣在程序的運行中SQL語句才正確,下面看看在運行過程中的SQL語句:
④ Set rsADO = cnADO.Execute(strSQL) 對于這條語句,我在第8講的內(nèi)容中,也講到是一種打開記錄集的方式之一,是Connection對象的Execute方法,通過上面語句,我們就可以執(zhí)行查詢,并將結(jié)果保存到集合的對象中。下面我將Connection對象的Execute方法再次專門的講解一下:
ADODB.Connection對象的Execute方法
該方法用于執(zhí)行SQL語句。根據(jù)SQL語句執(zhí)行后是否返回記錄集,該方法的使用格式分為以下兩種:
第一種:執(zhí)行SQL查詢語句時,將返回查詢得到的記錄集。用法為:
Set對象變量名=連接對象.Execute('SQL語句')
Execute方法調(diào)用后,會自動創(chuàng)建記錄集對象,并將查詢結(jié)果存儲在該記錄對象中,通過Set方法,將記錄集賦給指定的對象保存,以后對象變量就代表了該記錄集對象。
第二種:執(zhí)行SQL的操作性語言時,沒有記錄集的返回。此時用法為:
連接對象.Execute 'SQL語句' [,RecordAffected][, Option]
參數(shù)a RecordAffected為可選項,此出可放置一個變量,SQL語句執(zhí)行后,所生效的記錄數(shù)會自動保存到該變量中。通過訪問該變量,就可知道SQL語句隊多少條記錄進行了操作。
參數(shù)b Option 可選項,該參數(shù)的取值通常為adCMDText,它用于告訴ADO,應該將Execute方法之后的第一個字符解釋為命令文本。通過指定該參數(shù),可使執(zhí)行更高效
在第9講的講解中,我們用了第二種方法,今日的代碼有的是第一種代碼。至于那種好,我這里沒有說明,可以根據(jù)寫代碼人員的喜好即可。
代碼的運行結(jié)果:
今日內(nèi)容回向:
1 Connection對象的Execute方法有哪兩種方法?
2 如何實現(xiàn)可控的指定查詢?并將結(jié)果顯示?