2010-01-06 55 views
1

我與Microsoft Visual Studio的工作2005.Can誰能告訴我如何獲得一個MS Access數據庫的表名和列名?如何獲得表架構

回答

3

通常情況下,你應該將數據庫驅動程序的元數據設施做到這一點。所有數據庫調用級別API我聽說可以返回數據庫元數據的供應方法/函數/過程,通常作爲結果集。

你沒有提到任何語言,所以讓我們假設你正在使用C#。在這種情況下,你會成爲一個OLEDB(OLEDB是.NET語言驅動程序框架)連接對象,並調用GetOleDbSchemaTable方法就可以了。這會給你一個DataTable對象,讓你訪問傳達這些信息的數據行。

對於OLEDB例如,參見:http://msdn.microsoft.com/en-us/library/aa288452(VS.71).aspx

對於GetOleDbSchemaTable方法,參見:http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbconnection.getoledbschematable(VS.71).aspx

有關類型由OLEDB提供的元數據的信息,請參見:http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbschemaguid_members(VS.71).aspx

+0

感謝羅納德快速reply..i試圖this..but在這裏,我們將使用for循環。我只是想知道一種不用循環的方法 – sona 2010-01-06 13:49:58

+0

Sona,它是「羅蘭」。沒關係,常見的錯誤。無論如何,我想我不明白。我的意思是,有多個表和多個列。無論如何,你必須反覆修改?請解釋如何在沒有循環結構的情況下處理數據。 – 2010-01-06 14:15:19

+0

對不起羅蘭......你的權利,我們需要構建循環......但如果表中包含這麼多列意味着它會影響perfromance..so我檢查任何功能是有在ADO.net得到列名不使用for循環。我發現在SQL中我們可以使用SELECT COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME ='「+ Customers +」'「」;獲得列結構...你知道MS訪問中的任何東西 – sona 2010-01-06 14:56:23

1

可以做到這一點通過查詢以下表格

  • MSysAccessObjects

    MSysAccessXML

    MSysACEs

    MSysObjects

    MSysQueries

    MSysRelationships

如果這些表不顯示打開表的選項,並在 「查看」 選項卡中勾選「系統對象「

+2

我會建議反對的。這些對象可能不適用於每個用戶。此外,這是特定於訪問和AFAIK,這些表中哪些是可用的,以及它們具有哪些列隨訪問版本而變化。如果你使用驅動元數據,你的代碼或多或少是可移植的。 – 2010-01-06 14:19:41

1

這個例子是VBA,但它應該是可能的,因爲它使用ADO翻譯的想法。

Dim rs As ADODB.Recordset 
Dim cn As ADODB.Connection 

Set cn = "Provider = Microsoft.Jet.OLEDB.4.0; " _ 
    & "Data Source = MyDB.mdb" 

Set rs = cn.OpenSchema(_ 
    adSchemaTables, Array(Empty, Empty, Empty)) 
Debug.Print rs.GetString 
rs.Close 
Set rs = Nothing 

類似於adSchemaTablesadSchemaColumns可用於返回列。約束是TABLE_CATALOGTABLE_SCHEMATABLE_NAMECOLUMN_NAME,所以你可以看到,可以返回一個特定的表列數據,或者所有列和相關的表名。例如:

Set rs = cn.OpenSchema(_ 
    adSchemaTables, Array(Empty, Empty, "Employees", "name")) 
Debug.Print rs("TABLE_NAME") & "." _ 
    & rs("COLUMN_NAME") & ": " _ 
    & rs("DATA_TYPE") 

欲瞭解更多信息,請參閱https://msdn.microsoft.com/en-us/library/ms676705.aspx