Attraverso un set di TableDef, come è possibile determinare se ogni TableDef rappresenta una tabella collegata, al contrario di una tabella locale?Come si possono cercare i TableDef per le tabelle collegate?
6
A
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