Oleme seda varem rääkinud, kuid tasub korrata – lingitud tabelid võivad teie andmebaasides olla väga kasulikud mitmel põhjusel. Kuid lingitud tabelite üks suur puudus on jõudlus – päringute käivitamine nende vastu, eriti kui need ei ole Microsoft Accessi tabelid (st kui need on Exceli, CSV- või DBF failid). Nendega töötamine võib olla valusalt aeglane. Sellest saate mööda minna mitmel viisil – me töötame siin ühe võimalusega, milleks on lingitud tabeli teisendamine kohalikuks tabeliks. Muidugi – saate seda teha käsitsi, kopeerides/kleepides tabeleid, kuid kui teil on palju käsitseda, on seda koodis palju-palju lihtsam teha, nii et vaatame, kuidas…
Miks on oma vajaduste väljatoomine oluline

"Arvestades lingitud tabeli nime, importige see tabel jõudluse parandamiseks andmebaasi kohaliku tabelina – soovi korral kustutage link andmebaasist samal ajal."
Tavaliselt, kui teisendate lingitud tabeli kohalikuks tabeliks, soovite lingi kustutada, kuid allolevas koodinäidis oleme andnud teile võimaluse säilitada ka algne lingitud fail, kuid seda tehes äsja imporditud tabel ei asenda teie lingitud tabelit teie päringutes jne, nii et te ei näe toimivuse kasvu, mida kohalik tabel teile annaks. Kui olete veendunud, et kood töötab nii, nagu vajate, soovitame alati originaali kustutada – lõppude lõpuks ei kustuta te tegelikku tabelit, vaid selle linki.
Hoiatuseks
Enne koodi juurde jõudmist – vaid kiire hoiatus. Kui lingite kahjustatud Accessi andmebaas – kui Access ei saa faili lugeda, on ebatõenäoline, et ta suudab sellest importida.
Niisiis – koodi juurde…
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
Mida kood teeb

Nüüd, kui meil on need üksikasjad, nii kaua kui need kehtivad (st te pole rutiinile valesti kirjutatud tabelinime andnud), oleme valmis minema, nii et see on lihtsalt a) lingi kustutamise küsimus (kui deleteOriginal on seatud väärtusele Tõene) ja tabeli importimisel.
See parandab sageli jõudlust, nii et kui kasutate lingitud tabeleid, soovitan teil kindlasti kontrollida, millist kasu annab nende tabelite viimine kohalikesse versioonidesse – võite olla üllatunud!
Autori sissejuhatus:
Mitchell Pond on andmete taastamise ekspert DataNumen, Inc., mis on maailmas juhtiv andmete taastamise tehnoloogiate, sealhulgas remont SQL Server fail ja Exceli taastamise tarkvaratooted. Lisateabe saamiseks külastage www.datanumenCom