L'abbiamo già detto, ma vale la pena ripeterlo: le tabelle collegate possono essere davvero utili nei tuoi database per una serie di motivi. Ma un grande svantaggio delle tabelle collegate è la prestazione: l'esecuzione di query su di esse, specialmente se non sono tabelle di Microsoft Access (ad esempio se sono Excel, CSV o DBF File). Possono essere dolorosamente lenti con cui lavorare. Ci sono alcuni modi per aggirare questo problema: lavoreremo con un modo qui, ovvero convertire una tabella collegata in una tabella locale. Certo: puoi farlo manualmente copiando/incollando le tabelle, ma se hai molto da gestire, farlo nel codice è molto, molto più semplice, quindi vediamo come...
Perché delineare le tue esigenze è importante
Prima di tutto, delineamo ciò che vogliamo effettivamente che il codice faccia: in questo modo è molto più semplice creare effettivamente il codice in primo luogo, quindi ti suggerisco di farlo ogni volta che stai pensando di creare del codice VBA , aiuta a chiarire il tuo obiettivo:
"Dato il nome di una tabella collegata, importa quella tabella nel database come tabella locale per migliorare le prestazioni - facoltativamente elimina il collegamento dal database allo stesso tempo"
Normalmente, quando converti una tabella collegata in una tabella locale, vorrai eliminare il collegamento, ma nell'esempio di codice riportato di seguito ti abbiamo dato la possibilità di mantenere anche il file collegato originale, ma così facendo, il tuo la tabella appena importata non sostituirà la tabella collegata nelle tue query ecc., quindi non vedrai il guadagno di prestazioni che ti darebbe una tabella locale. Una volta che sei sicuro che il codice funzioni come ti serve, ti consigliamo di eliminare sempre l'originale, dopotutto non stai effettivamente eliminando la tabella effettiva, ma solo il collegamento ad essa.
Una parola di cautela
Prima di arrivare al codice, solo una breve parola di cautela, non c'è molto che puoi fare se ti colleghi a un database di Access danneggiato – se Access non è in grado di leggere il file, è altamente improbabile che possa importare da esso.
Quindi, passiamo al codice...
Sub MakeTableLocal(tableName As String, optional deleteOriginal As Boolean = True)
Dim DbPath As Variant, TblName As Variant
'get path of linked table
DbPath = DLookup("Database", "MSysObjects", "Name='" & tableName & "' And Type=6")
'Get the real name of the linked table (in case it has been given an alias in the link)
TblName = DLookup("ForeignName", "MSysObjects", "Name='" & tableName & "' And Type=6")
If IsNull(DbPath) Then
'Either a local table, or the wrong table name has been supplied, exit the sub
Exit Sub
End If
'delete linked table
If deleteOriginal Then
DoCmd.DeleteObject acTable, tableName
Else
'If we're not deleting the existing table we'll have to rename the imported table to avoid
'overwriting it etc
tableName = tableName & " - local"
End If
'import the table as a local, unlinked table
DoCmd.TransferDatabase acImport, "Microsoft Access", DbPath, acTable, TblName, tableName
End Sub
Cosa sta facendo il codice

Ora che abbiamo quei dettagli, fintanto che sono validi (cioè non hai fornito un nome di tabella errato alla routine), allora siamo pronti per andare quindi è semplicemente una questione di a) eliminare il collegamento (se deleteOriginal è impostato su True) e l'importazione della tabella.
Fare questo ti darà spesso notevoli miglioramenti nelle prestazioni, quindi se stai usando tabelle collegate, ti consiglio vivamente di controllare quali guadagni ti darà spostando quelle tabelle nelle versioni locali - potresti essere sorpreso!
Introduzione dell'autore:
Mitchell Pond è un esperto di recupero dati in DataNumen, Inc., che è il leader mondiale nelle tecnologie di recupero dati, tra cui riparazione SQL Server filetto ed eccellere prodotti software di recupero. Per maggiori informazioni visita www.datanumen.com