大家好,今天給繼續(xù)講解VBA數(shù)據(jù)庫(kù)解決方案的第13講:如何獲取數(shù)據(jù)庫(kù)中的表的信息.在處理表,特別是查詢的時(shí)候,我們需要一些表的信息,如表的名字,表的屬性,那么有沒(méi)有辦法在程序中獲得,并顯示出來(lái)呢?
今天的內(nèi)容就是講解如何把一個(gè)數(shù)據(jù)庫(kù)中的所有表的名稱,性質(zhì)列出來(lái),并放到一個(gè)工作表文件中。數(shù)據(jù)庫(kù)的講解有時(shí)候是枯燥的,但不講清楚很難再進(jìn)行下一步的操作,只能按大概的先后順序讓讀者慢慢的了解,掌握。有的朋友和我反饋說(shuō):都懂,就是代碼寫(xiě)不出來(lái),怎么辦?其實(shí)這時(shí)你缺少的就是實(shí)踐,一是要多實(shí)際練習(xí),一是要緊扣自己的需求,比如工作遇到什么問(wèn)題,馬上以問(wèn)題為切入點(diǎn),細(xì)致的研究分析。我在初學(xué)VBA的時(shí)候?yàn)榱伺粋€(gè)知識(shí)點(diǎn)需要反復(fù)的測(cè)試,還要去問(wèn)別人,但人家不告訴你啊,為了一個(gè)“WITH”的作用我問(wèn)了好幾遍,可沒(méi)人真正的告訴你?。磕菚r(shí)真的很難,沒(méi)有資料,求人難?,F(xiàn)在好了,進(jìn)入了知識(shí)的爆炸的年代,只要你想學(xué),只要你肯學(xué),肯于去專研,學(xué)會(huì)真的不難。
在我的講解中,盡可能讓講解能淺顯些,今日的問(wèn)題如何解決呢?我們還是直接看代碼,然后我再一步步的講解吧。
Sub mynaGetTables() '獲取所有表的名稱
Dim catADO As Object
Dim myTable As Object
Dim strPath As String
Dim i As Integer
Set catADO = CreateObject("ADOX.Catalog")
strPath = ThisWorkbook.Path & "\mydata2.accdb"
catADO.ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;DataSource=" & strPath
Cells.ClearContents
Cells(1, 1) = "數(shù)據(jù)表名"
Cells(1, 2) = "類型"
i= 1
For Each myTable In catADO.Tables
i = i + 1
Cells(i, 1) = myTable.Name
Cells(i, 2) = myTable.Type
Next myTable
Set myTable = Nothing
Set catADO = Nothing
End Sub
代碼截圖:
代碼解讀:
①
Set catADO =CreateObject("ADOX.Catalog")
strPath = ThisWorkbook.Path & "\mydata2.accdb"
catADO.ActiveConnection = "Provider=Microsoft.ACE.OLEDB.12.0;DataSource=" & strPath
創(chuàng)建一個(gè)ADOX對(duì)象,并連接到數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)含地址為:strPath =ThisWorkbook.Path & "\mydata2.accdb"
② Cells.ClearContents
Cells(1, 1) = "數(shù)據(jù)表名"
Cells(1, 2) = "類型"
清空工作表,并在A1 和B1 單元格寫(xiě)入表頭
③For EachmyTable In catADO.Tables
i = i + 1
Cells(i, 1) = myTable.Name
Cells(i, 2) = myTable.Type
Next myTable
這里用了一個(gè)FOR EACH循環(huán),對(duì)對(duì)象中的每一個(gè)表進(jìn)行名稱和屬性的提取,并記錄。同時(shí)寫(xiě)道工作表中。這里用的是循環(huán)語(yǔ)句,詳細(xì)大家通過(guò)VBA的學(xué)習(xí)應(yīng)該不陌生吧?
下面我們先看看ACCESS中的表,顯示系統(tǒng)表后是什么樣子:
上面用紅色框框起來(lái)的是系統(tǒng)表。一般情況下這些系統(tǒng)表是隱藏的,讀者如果想查看,可以選擇顯示即可,關(guān)于ACCESS的設(shè)置不做詳細(xì)的解釋了。
看我們的代碼運(yùn)行結(jié)果:
今日內(nèi)容回向:
1 如何能夠把數(shù)據(jù)庫(kù)中表的名稱和屬性全部顯示出來(lái)呢?
2 是否清楚哪些是系統(tǒng)表和自己建立的表了嗎?
聯(lián)系客服