2015-04-29 26 views
0

与下面的代码,我们可以从Access文件中提取表数据。迭代通过MDB的目录,并提取元数据

大厦在此,是有可能通过的MDB的一个目录遍历和无需打开每一个提取该信息1),或2)打开每个一个,但没有运行自动执行的宏。

Function dmwListAllTables() As String 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Dim tbl As AccessObject, db As Object 
Dim strMsg As String 

On Error GoTo Error_Handler 

Set dB = Application.CurrentData 
For Each tbl In db.AllTables 
Debug.Print tbl.Name 
Next tbl 

strMsg = " -- Tables listing complete -- " 

Procedure_Done: 
dmwListAllTables = strMsg 
Exit Function 

Error_Handler: 
strMsg = Err.Number & " " & Err.Description 
Resume Procedure_Done 

End Function 

烃源:http://www.consultdmw.com/access-VBA-list-objects.htm

BTW。该“环通”的部分是没有问题的:

Sub REadThroughFiles() 
    Dim MyObj As Object, MySource As Object, file As Variant 
    file = Dir("c:\myfolder\") 
    While (file <> "") 
     If InStr(file, "myprefix") > 0 Then 
     // do something here... 
     End If 
    file = Dir 
    Wend 
End Sub 
+0

你想比表名以外的任何信息?应该包括那些链接表或者只包含在目标MDB的本地访问表? – HansUp

+0

这是一篇有趣的文章。汉斯,你有答案吗? –

+0

两个本地Access表和ODBC(Oracle和IBM DB2)。 – itp

回答

1

您可以使用ADO OpenSchema方法列出的Access数据库中的表。

这方法需要ADO Connection到目标数据库,这意味着一个锁定文件(.LDB.MDB文件)将创建/更新。但是,如果该数据库包含AutoExec的宏,宏将不会运行。

Public Sub ListTables(ByVal pFullPath As String) 
    Const adSchemaTables As Long = 20 
    Dim cn As Object ' ADODB.Connection 
    Dim rs As Object ' ADODB.Recordset 
    Dim strConnect As String 
    Dim strProvider As String 

    strProvider = CurrentProject.Connection.Provider 
    strConnect = "Provider=" & strProvider & ";" & _ 
     "Data Source=" & pFullPath & ";" 
    Set cn = CreateObject("ADODB.Connection") 
    cn.Open strConnect 

    Set rs = cn.OpenSchema(adSchemaTables) 
    With rs 
     Do While Not .EOF 
      If !TABLE_TYPE <> "VIEW" Then 
       Debug.Print !TABLE_NAME 
      End If 
      .MoveNext 
     Loop 
     .Close 
    End With 
    cn.Close 
    Set rs = Nothing 
    Set cn = Nothing 
End Sub 

如果你也想看看是否每个这些项目的链接表或局部表,改变Debug.Print行这个......

Debug.Print !TABLE_NAME, !TABLE_TYPE 

更多信息,请How To Use the ADO OpenSchema Method in Visual Basic