2013-12-17 39 views

risposta

10

Per una tabella collegata, la proprietà TableDef.Connect contiene le informazioni di connessione. Ma per una tabella nativa, la proprietà .Connect è una stringa vuota.

Così si può dire che sono, che esaminando Len() di .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 

Tale approccio è più semplice per me ricordare che tdf.Attributes And dbAttachedODBC Or tdf.Attributes And dbAttachedTable, o l'approccio ADOX. È anche molto più conciso rispetto all'approccio ADOX.

3

Sulla base http://p2p.wrox.com/access-vba/37117-finding-linked-tables.html (il codice collegato ha provocato un loop infinito, quindi ho modificato):

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 

prese direttamente dal http://p2p.wrox.com/access-vba/37117-finding-linked-tables.html, la controparte ADO (codice non verificato):

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