VBA數據庫解決方案第13講:如何獲取數據庫中表的相關信息

數據庫 VBA專家 2019-06-18

大家好,今天給繼續講解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

代碼截圖:

VBA數據庫解決方案第13講:如何獲取數據庫中表的相關信息

代碼解讀:

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中的表,顯示系統表後是什麼樣子:

VBA數據庫解決方案第13講:如何獲取數據庫中表的相關信息

上面用紅色框框起來的是系統表。一般情況下這些系統表是隱藏的,讀者如果想查看,可以選擇顯示即可,關於ACCESS的設置不做詳細的解釋了。

看我們的代碼運行結果:

VBA數據庫解決方案第13講:如何獲取數據庫中表的相關信息

今日內容迴向:

1 如何能夠把數據庫中表的名稱和屬性全部顯示出來呢?

2 是否清楚哪些是系統表和自己建立的表了嗎?

相關推薦

推薦中...