VBA數據庫解決方案第九講:把數據庫的內容在工作表中顯示

VBA語言専攻 2024-04-02 18:48:41

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

這套教程共兩冊,八十四講,今後一段時間會給大家陸續推出修訂後的教程內容。今日的內容是:VBA數據庫解決方案第九講:把數據庫的內容在工作表中顯示

【分享成果,隨喜正能量】凡是經不起時光沉澱的生命喧囂,都不算傷痛,更不算創傷,它就是像浮雲片片,來了去了,如果你心大點,它既不是來也不是去,它就是一片風景。。

第九講 打開數據庫記錄集,把所得的數據回填到工作表

大家好,今日繼續講解VBA數據庫解決方案的第9講內容,打開一個數據庫記錄集,並把數據放到工作表文件中。

數據庫的講解開始進入到實際操作階段,數據庫的內容涉及到知識較多,還是之前強調的,這是VBA中級及以上水平的範疇,對于基礎沒有牢固的朋友,一定要下功夫把基礎打牢,才可以逐漸過渡到數據庫的學習。一定要對照我的第一套教程《VBA代碼解決方案》,把各個知識點要弄通,然後再學習這套教程,可以收到事半功倍的效果。

代碼講解:

① Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.RecordSet")

上述代碼中新創建了一個連接,一個記錄集,大家要清楚的是,這是利用創建的方法産生的連接,

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

給出了數據庫的路徑

③ cnADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath

這裏是打開了cnADO這個連接

④ strSQL = "SELECT * FROM 職員表 WHERE 部門='總務'"

這是一個SQL語句,這個語句的作用就是,在數據庫的“職員表”中查詢部門爲“總務”的人員

⑤ rsADO.Open strSQL, cnADO, 1, 3

這個命令是打開上述的符合SQL查詢的記錄集,其中strSQL 是代表"SELECT * FROM 職員表 WHERE 部門='總務'",cnADO是我們建立起來的ADO連接,後面的1和3的意義在上一講我們剛剛見過;

1 代表;AdOpenForwardOnly (默認值)打開僅向前類型遊標。

3 代表: AdLockOptimistic 開放式鎖定(逐個) — 提供者使用開放式鎖定,只在調用Update 方法時才鎖定記錄。

⑥ Cells.ClearContents 爲了存放數據,在工作表中先清理一下,清空數據

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

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

Next i

爲了理解上述語句的意義,我們先來看看記錄集的一些屬性:

rsADO.Fields.Count 是記錄結果集中的字段數,

Fields是字段集對象,由單個的Field字段組成,表示Recordset對象的列的集合。Fields成員的下標從0開始,0表示第一個字段。

上面代碼的意思是將需要將字段名寫入,也就是說在EXCEL中先寫入表頭。

⑧ Range("A2").CopyFromRecordset rsADO

爲了理解上述代碼的意義,先講一下CopyFromRecordset方法。

CopyFromRecordset方法是將一個ADO或 DAO Recordset 對象的內容複制到工作表中,複制的起始位置以指定區域爲左上角。

句法:Rng.CopyFromRecordset(Data, MaxRows, MaxColumns)

參數:

a) Data:Void 類型,必選。複制到指定區域的 Recordset 對象。

b) MaxRows:Variant 類型,可選。複制到工作表的記錄個數上限。如果省略該參數,將複制 Recordset 對象的所有記錄。

c) MaxColumns:Variant 類型,可選。複制到工作表的字段個數上限。如果省略該參數,將複制 Recordset 對象的所有字段。

那麽,Range("A2").CopyFromRecordset rsADO的意義就是講所得到的記錄集合,複制到A2單元格爲左上角的一個適應的區域內。

⑨ rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

這幾條代碼的意義就是記錄集關閉,連接關閉,釋放內存。

下面看我們運行後的結果:

到此開篇提到的問題我們的問題就圓滿解決了。

今日內容回向:

1 如何把數據庫的內容在工作表中顯示?

2 今天的代碼采用了一種方式的處理,下一講還有一種方案的處理,請結合兩者的內容,看看今日的代碼用的是那種處理方法?

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

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

0 阅读:6

VBA語言専攻

簡介:專注VBA