Već smo to rekli, ali vrijedi ponoviti – povezane tabele mogu biti zaista korisne u vašim bazama podataka iz više razloga. Ali jedan veliki nedostatak povezanih tabela je performanse – pokretanje upita prema njima, posebno ako nisu Microsoft Access tabele (tj. ako su Excel, CSV ili DBF datoteke). Oni mogu biti bolno spori za rad. Postoji nekoliko načina na koje možete to zaobići – ovdje ćemo raditi na jednom, a to je da pretvorimo povezanu tablicu u lokalnu tablicu. Naravno – to možete učiniti ručno kopiranjem/lijepljenjem tablica, ali ako imate puno toga za rukovati, raditi to u kodu je mnogo, mnogo lakše, pa da vidimo kako…
Zašto je važno navesti svoje potrebe
Prije svega, hajde da opišemo šta zapravo želimo da kod radi – ovo čini mnogo lakšim kreiranje koda na prvom mjestu, pa bih vam predložio da to učinite svaki put kada razmišljate o kreiranju nekog VBA koda , pomaže da razjasnite svoj cilj:
„S obzirom na ime povezane tabele, uvezite tu tabelu u bazu podataka kao lokalnu tabelu da poboljšate performanse – opciono istovremeno izbrišite vezu iz baze podataka“
Obično, kada konvertujete povezanu tabelu u lokalnu tabelu, želećete da izbrišete vezu, ali u donjem primeru koda dali smo vam mogućnost da zadržite i originalnu povezanu datoteku, ali ako to učinite, vaš novouvezena tabela neće zamijeniti vašu povezanu tablicu u vašim upitima itd., tako da nećete vidjeti povećanje performansi koje bi vam dala lokalna tablica. Jednom kada budete sigurni da kod radi kako vam je potrebno, preporučujemo da uvijek izbrišete original – na kraju krajeva, vi zapravo ne brišete stvarnu tabelu, već samo vezu do nje.
A riječ oprez
Prije nego što dođemo do koda – samo kratka riječ opreza, ne možete puno učiniti ako se povezujete na oštećena Access baza podataka – ako Access ne može da pročita datoteku, malo je verovatno da će moći da uveze iz nje.
Dakle – na šifru…
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
Šta kod radi

Sada kada imamo te detalje, sve dok su validni (tj. niste uneli pogrešno napisano ime tabele u rutinu), onda smo spremni da krenemo tako da je jednostavno pitanje a) brisanja veze (ako deleteOriginal je postavljen na True) i uvoz tabele.
Ovo će vam često dati prilično dramatična poboljšanja u performansama, tako da ako koristite povezane tabele, toplo bih vam preporučio da provjerite kakve će vam dobiti premještanje tih tablica na lokalne verzije – možda ćete biti iznenađeni!
Uvod za autora:
Mitchell Pond je stručnjak za oporavak podataka DataNumen, Inc., koji je svjetski lider u tehnologijama za oporavak podataka, uključujući Popravak SQL Server fajl i Excel softverski proizvodi za oporavak. Za više informacija posjetite www.datanumen.com