Korábban már elmondtuk, de érdemes megismételni – a linkelt táblák számos okból valóban hasznosak lehetnek az adatbázisokban. De a csatolt táblák egyik nagy hátránya a teljesítmény – lekérdezések futtatása ellenük, különösen, ha nem Microsoft Access táblák (pl. ha Excel, CSV vagy DBF fájlok). Fájdalmasan lassú lehet velük dolgozni. Ezt több módon is megkerülheti – itt egy módszerrel dolgozunk, ez pedig az, hogy egy csatolt táblát helyi táblává alakítunk. Persze – ezt manuálisan is megteheti táblázatok másolásával/beillesztésével, de ha sokat kell kezelnie, sokkal-sokkal egyszerűbb kódban csinálni, szóval lássuk, hogyan…
Miért fontos az igényeinek felvázolása
Először is vázoljuk fel, hogy valójában mit is szeretnénk elérni a kóddal – ezzel sokkal könnyebbé válik a kód tényleges létrehozása, ezért azt javaslom, hogy ezt tegye meg minden alkalommal, amikor valamilyen VBA-kód létrehozásán gondolkodik. , segít tisztázni a célját:
"A hivatkozott tábla nevének megfelelően importálja a táblát az adatbázisba helyi táblaként a teljesítmény javítása érdekében – adott esetben törölje a hivatkozást az adatbázisból egyidejűleg."
Normális esetben, amikor egy csatolt táblát helyi táblává alakít át, törölni kell a hivatkozást, de az alábbi kódmintában lehetőséget adtunk arra, hogy megtartsa az eredeti csatolt fájlt is, de ezzel a Az újonnan importált tábla nem fogja lecserélni a hivatkozott táblát a lekérdezésekben stb., így nem fogja látni azt a teljesítménynövekedést, amelyet egy helyi tábla nyújtana. Miután megbizonyosodott arról, hogy a kód megfelelően működik, javasoljuk, hogy mindig törölje az eredetit – elvégre valójában nem a tényleges táblázatot törli, csak a hivatkozást.
A figyelmeztető szó
Mielőtt rátérnénk a kódra – csak egy gyors figyelmeztetés, nem sok mindent tehetsz, ha egy sérült Access adatbázis – Ha az Access nem tudja olvasni a fájlt, nagyon valószínűtlen, hogy képes lesz importálni belőle.
Szóval – tovább a kódhoz…
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
Mit csinál a kód

Most, hogy megvannak ezek az adatok, mindaddig, amíg érvényesek (azaz nem adtál meg hibásan írt táblanevet a rutinhoz), akkor készen állunk arra, hogy a) a) töröljük a hivatkozást (ha deleteOriginal értéke True), és importálja a táblát.
Ez gyakran drámai teljesítményjavulást eredményez, ezért ha linkelt táblákat használ, azt javaslom, hogy ellenőrizze, milyen előnyökkel jár, ha ezeket a táblákat áthelyezi a helyi verziókra – meg fog lepődni!
Szerző Bevezetés:
Mitchell Pond adat-helyreállítási szakértő DataNumen, Inc., amely világelső az adat-helyreállítási technológiák területén, beleértve javítás SQL Server filé és Excel helyreállítási szoftvertermékek. További információért látogasson el www.datanumen.com