Как можно искать TableDefs для связанных таблиц?

цикл через набор TableDefs, как можно определить, представляет ли каждый TableDef связанную таблицу, в отличие от локальной таблицы?

2 ответов


для связанной таблицы, тег TableDef.Connect свойство содержит сведения о соединении. Но для родной таблицы .Connect свойство является пустой строкой.

таким образом, вы можете сказать, какие из них, изучая Len() of .Connect

Dim tdf As DAO.TableDef
With CurrentDb
    For Each tdf In .TableDefs
        If Len(tdf.Connect) > 0 Then
            Debug.Print tdf.Name, tdf.Connect
        End If
    Next
End With

этот подход мне проще запомнить, чем tdf.Attributes And dbAttachedODBC Or tdf.Attributes And dbAttachedTable, или подход ADOX. Он также намного более лаконичен, чем подход ADOX.


на основе http://p2p.wrox.com/access-vba/37117-finding-linked-tables.html (связанный код привел к бесконечному циклу, поэтому я изменил его):

Dim tdf As DAO.TableDef
With CurrentDb
    For Each tdf In .TableDefs
        If tdf.Attributes And dbAttachedODBC Or tdf.Attributes And dbAttachedTable Then
            ' We found a linked table! Now, show its location.
            Debug.Print tdf.Connect
        End If
    Next
End With

взято непосредственно из http://p2p.wrox.com/access-vba/37117-finding-linked-tables.html, аналог ADO (непроверенный код):

Sub ListAllTables(cnn As ADODB.Connection)

   Dim cat As ADOX.Catalog
   Dim tbl As ADOX.Table

   Set cat = New ADOX.Catalog
   cat.ActiveConnection = cnn

   cat.Tables.Refresh
   For Each tbl In cat.Tables
      Select Case tbl.Type
         Case "ACCESS TABLE"
            Debug.Print tbl.Name & " - Access table"
         Case "SYSTEM TABLE"
            Debug.Print tbl.Name & " - System table"
         Case "TABLE"
            Debug.Print tbl.Name & " - Native table"
         Case "LINK"
            Debug.Print tbl.Name & " - Linked table"
         Case "PASS-THROUGH"
            Debug.Print tbl.Name & " - ODBC DSN Linked table"
        End Select
    Next tbl

    Set tbl = Nothing
    Set cat = Nothing

End Sub