1

我有一个保存应用程序设置的 MDB。有时我们使用 SQL 命令更改这些设置。通常我们需要查找数据库中的哪个表包含我们正在寻找的设置,以便构建我们的 SQL 字符串。我们有时不知道该字段的名称,但通常可以通过阅读它们来判断。这是非常耗时的。

我正在尝试找到一种生成列表的方法(在 excel、access、记事本、读取 MDB 并返回表列表以及每个表的每个字段的任何内容中。(以便它是可搜索的)

像这样的东西:

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

有谁知道使用 access、excel 甚至一些 vb.net 代码的快速方法?(除了打开每个表并复制字段名称。

我希望将其自动化,以防我们将来添加字段。

4

3 回答 3

3

没有必要创建一个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生成 OP 中建议的显示。

于 2013-06-28T19:59:11.687 回答
2

您可以通过迭代获得表列表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

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

于 2013-06-28T17:35:42.253 回答
1

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

可以在此处列出哪些属性的详细信息。用于adSchemaColumns列出字段和它们来自的表。

在 Excel 中,使用 Tools > References 设置对“Microsoft ActiveX Data Objects 2.8 Library”的引用,然后尝试以下代码:

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
于 2013-06-30T23:36:55.710 回答