Cum să convertiți un tabel conectat într-un tabel local în accesul dvs

Distribuie acum:

Am mai spus-o, dar merită repetat – tabelele legate pot fi cu adevărat utile în bazele de date din mai multe motive. Dar un mare dezavantaj al tabelelor legate este performanța - rularea de interogări împotriva lor, mai ales dacă nu sunt tabele Microsoft Access (adică dacă sunt Excel, CSV sau DBF dosare). Lucrul cu ei poate fi dureros de lenți. Există câteva moduri în care puteți rezolva asta – vom lucra cu un singur mod aici, și acesta este să convertiți un tabel legat într-un tabel local. Sigur – ai putea face acest lucru manual prin copierea/lipirea tabelelor, dar dacă ai multe de rezolvat, este mult, mult mai ușor să faci asta în cod, așa că hai să vedem cum...

De ce este important să vă conturați nevoile

Accesați tabelul legatÎn primul rând, să descriem ce vrem de fapt să facă codul – dacă faceți acest lucru, este mult mai ușor să creați codul în primul rând, așa că vă sugerez să faceți acest lucru de fiecare dată când vă gândiți să creați un cod VBA. , vă ajută să vă clarificați scopul:

„Având în vedere numele unui tabel legat, importați acel tabel în baza de date ca tabel local pentru a îmbunătăți performanța – opțional ștergeți legătura din baza de date în același timp”

În mod normal, atunci când convertiți un tabel legat într-un tabel local, veți dori să ștergeți linkul, dar în exemplul de cod de mai jos v-am oferit opțiunea de a păstra și fișierul legat original, dar făcând acest lucru, dvs. tabelul nou importat nu va înlocui tabelul conectat în interogările dvs. etc., așa că nu veți vedea câștigul de performanță pe care vi l-ar oferi un tabel local. Odată ce vă simțiți confortabil că codul funcționează așa cum aveți nevoie, vă recomandăm să ștergeți întotdeauna originalul - la urma urmei, nu ștergeți de fapt tabelul real, ci doar linkul către acesta.

Un cuvânt de precauție

Înainte de a ajunge la cod – doar un scurt cuvânt de precauție, nu puteți face multe dacă vă conectați la un baza de date Access deteriorată – dacă Access nu poate citi fișierul, este foarte puțin probabil să poată importa din el.

Așa că – la cod…

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

Ce face codul

Cod VBAMost codul va fi destul de evident, dar există câteva puncte cheie de reținut. În primul rând, obținem detaliile la ce fișier este legat, căutând în tabelul de sistem Access (de obicei ascuns) „MSysObjects”. Deoarece este perfect posibil (și probabil) să fi dat tabelului legat un nou alias local, următorul lucru pe care trebuie să-l facem este să obținem numele tabelului original – din nou, din tabelul „MSysObjects”.

Acum că avem acele detalii, atâta timp cât sunt valide (adică nu ați furnizat un nume de tabel scris greșit rutinei), atunci suntem gata să mergem, așa că este pur și simplu o chestiune de a) ștergerea linkului (dacă deleteOriginal este setat la True) și importul tabelului.

Făcând acest lucru vă va aduce adesea îmbunătățiri destul de dramatice ale performanței, așa că, dacă utilizați tabele conectate, vă recomand să verificați ce câștiguri vă va oferi mutarea acestor tabele în versiunile locale – ați putea fi surprins!

Introducerea autorului:

Mitchell Pond este un expert în recuperarea datelor DataNumen, Inc., care este lider mondial în tehnologiile de recuperare a datelor, inclusiv repara SQL Server fişier și produse software de recuperare Excel. Pentru mai multe informații vizitați www.datanumen.com

Distribuie acum:

Comentariile sunt închise.