按表格生成MDB中所有字段的列表

我有一个保存应用程序设置的MDB。 有时我们使用SQL命令更改这些设置。 通常我们需要查看数据库中的哪个表保存了我们正在寻找的设置,以便构build我们的SQLstring。 我们有时候不知道这个领域的名字,但通常可以通过阅读这些名称来得知。 这非常耗时。

我试图find一种方法来生成一个列表(在Excel中,访问,记事本,无论是读MDB,并返回一个表的列表,每个表的字段(以便它可以search)

像这样的东西:

Table1 | Field1 Table1 | Field2 Table1 | Field3 Table2 | Field1 Table2 | Field2 Table3 | Field1 Table3 | Field2 Table3 | Field3 Table4 | Field1 Table4 | Field2 ... 

有谁知道使用访问,Excel或甚至一些VB.NET代码做这个快速的方法吗? (除了打开每个表格并复制字段名称。

我期待自动化,以防将来添加字段。

没有必要创build一个RecordSet因为TableDef已经包含了一个Fields集合,并且您可能希望忽略系统表。

以下(访问VBA代码)将信息打印到即时窗口; 使用Ctrl-G来查看这个(从VB编辑器)并复制和粘贴。 或者,将数据发送到Access表或Excel。

 Sub GetTablesAndFields() Dim db As DAO.Database Dim td As DAO.TableDef Dim fld As DAO.Field Set db = CurrentDb For Each td In db.TableDefs If UCase(Left(td.Name, 4)) <> "MSYS" Then 'ignore system tables 'Press Ctrl-G to display the Debug (Immediate) Window For Each fld In td.Fields Debug.Print td.Name, fld.Name Next fld End If Next td Set db = Nothing End Sub 

使用Debug.Print td.Name; " | "; fld.Name Debug.Print td.Name; " | "; fld.Name Debug.Print td.Name; " | "; fld.Name生成OP中build议的显示。

您可以通过迭代CurrentDb.TableDefs来获取表的列表。 这里有一个方法来处理它在VBA中,.NET将是类似的:

 sub goThroughTables() dim tdf as TableDef dim rs as DAO.Recordset dim fld as Field dim index as long index=1 for each tdf in currentdb.tabledefs set rs=currentdb.openrecordset(tdf.name) for each fld in rs.Fields writeToExcelSheet(tdf.name,fld.name,index) next next end sub 

其中writeToExcelSheet()是一个函数,它将表名和字段名写入由index指定的Excel工作表中的行,应该通过ByRef传递,以便更改writeToExcelSheet()的值。

在VBA中,您可以使用ADO Connection对象及其OpenSchema方法。 这使您可以将大量不同的属性读入Recordset ,然后将其复制到Excel工作表中。

什么属性可以列出的细节在这里 。 使用adSchemaColumns列出它们来自的字段和表。

在Excel中,使用工具>引用来设置对“Microsoft ActiveX数据对象2.8库”的引用,然后尝试下面的代码:

 Sub show_column_info() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim fld As ADODB.Field Dim i As Integer Set cn = New ADODB.Connection With cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Data Source='C:\Temp\Example Database.mdb';" .Open Set rs = .OpenSchema(adSchemaColumns) End With i = 0 With Worksheets("Sheet1") .Cells.ClearContents For Each fld In rs.Fields i = i + 1 .Cells(1, i).Value = fld.Name Next fld .Cells(2, 1).CopyFromRecordset rs .Cells.Columns.Autofit End With rs.Close cn.Close End Sub