VBA數據庫解決方案第13講:如何獲取數據庫中表的相關信息
大家好,今天給繼續講解VBA數據庫解決方案的第13講:如何獲取數據庫中的表的信息.在處理表,特別是查詢的時候,我們需要一些表的信息,如表的名字,表的屬性,那麼有沒有辦法在程序中獲得,並顯示出來呢?
今天的內容就是講解如何把一個數據庫中的所有表的名稱,性質列出來,並放到一個工作表文件中。數據庫的講解有時候是枯燥的,但不講清楚很難再進行下一步的操作,只能按大概的先後順序讓讀者慢慢的瞭解,掌握。有的朋友和我反饋說:都懂,就是代碼寫不出來,怎麼辦?其實這時你缺少的就是實踐,一是要多實際練習,一是要緊扣自己的需求,比如工作遇到什麼問題,馬上以問題為切入點,細緻的研究分析。我在初學VBA的時候為了弄懂一個知識點需要反覆的測試,還要去問別人,但人家不告訴你啊,為了一個"WITH"的作用我問了多少人,可沒人真正的告訴你啊?那時真的很難,沒有資料,求人難。現在好了,進入了知識的爆炸的年代,只要你想學,只要你肯學,肯於去專研,學會真的不難。
在我的講解中,儘可能讓講解能淺顯些,今日的問題如何解決呢?我們還是直接看代碼,然後我再一步步的講解吧。
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;Data Source=" & strPath
Cells.ClearContents
Cells(1, 1) = "數據表名"
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;Data Source=" & strPath
創建一個ADOX對象,並連接到數據庫,數據庫含地址為:strPath = ThisWorkbook.Path & "\mydata2.accdb"
② Cells.ClearContents
Cells(1, 1) = "數據表名"
Cells(1, 2) = "類型"
清空工作表,並在A1 和B1 單元格寫入表頭
③For Each myTable In catADO.Tables
i = i + 1
Cells(i, 1) = myTable.Name
Cells(i, 2) = myTable.Type
Next myTable
這裡用了一個FOR EACH循環,對對象中的每一個表進行名稱和屬性的提取,並記錄。同時寫道工作表中。這裡用的是循環語句,詳細大家通過VBA的學習應該不陌生吧?
下面我們先看看ACCESS中的表,顯示系統表後是什麼樣子:
上面用紅色框框起來的是系統表。一般情況下這些系統表是隱藏的,讀者如果想查看,可以選擇顯示即可,關於ACCESS的設置不做詳細的解釋了。
看我們的代碼運行結果:
今日內容迴向:
1 如何能夠把數據庫中表的名稱和屬性全部顯示出來呢?
2 是否清楚哪些是系統表和自己建立的表了嗎?