Come convertire una tabella collegata in una tabella locale nel tuo accesso

Condividi ora:

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

Accedi alla tabella collegataPrima 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

Codice VBAGran parte del codice sarà piuttosto intuitivo, ma ci sono alcuni punti chiave da notare. Innanzitutto, otteniamo i dettagli del file a cui si fa riferimento consultando la tabella di sistema di Access (solitamente nascosta) "MSysObjects". Poiché è perfettamente possibile (e probabile) che alla tabella collegata sia stato assegnato un nuovo alias locale, la cosa successiva da fare è ottenere il nome della tabella originale, sempre dalla tabella "MSysObjects".

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

Condividi ora:

I commenti sono chiusi.