2010-01-06 50 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