Hoe u een gekoppelde tabel in uw toegang converteert naar een lokale tabel

We hebben het al eerder gezegd, maar het is de moeite waard om te herhalen - gekoppelde tabellen kunnen om een ​​aantal redenen erg handig zijn in uw databases. Maar een groot nadeel van gekoppelde tabellen zijn de prestaties: er worden query's tegen uitgevoerd, vooral als het geen Microsoft Access-tabellen zijn (bijvoorbeeld als het Excel, CSV of DBF bestanden). Ze kunnen pijnlijk traag zijn om mee te werken. Er zijn een paar manieren waarop je dat kunt omzeilen - we werken hier met één manier, en dat is om een ​​gekoppelde tabel om te zetten in een lokale tafel. Natuurlijk - je zou dit handmatig kunnen doen door tabellen te kopiëren / plakken, maar als je veel te verwerken hebt, is het veel, veel gemakkelijker om het in code te doen, dus laten we eens kijken hoe ...

Waarom het belangrijk is om uw behoeften te omschrijven

Toegang tot gekoppelde tafelLaten we allereerst beschrijven wat we eigenlijk willen dat de code doet - dit maakt het zo veel gemakkelijker om de code daadwerkelijk te maken, dus ik raad je aan dit elke keer te doen als je erover denkt om wat VBA-code te maken , het helpt uw ​​doel te verduidelijken:

"Gezien de naam van een gekoppelde tabel, importeer die tabel in de database als een lokale tabel om de prestaties te verbeteren - verwijder eventueel de link tegelijkertijd uit de database"

Normaal gesproken, wanneer u een gekoppelde tabel naar een lokale tabel converteert, wilt u de koppeling verwijderen, maar in het codevoorbeeld hieronder hebben we u de optie gegeven om het originele gekoppelde bestand ook te behouden, maar door dit te doen, nieuw geïmporteerde tabel zal uw gekoppelde tabel niet vervangen in uw zoekopdrachten enz., dus u zult niet de prestatiewinst zien die een lokale tabel u zou opleveren. Als u er eenmaal zeker van bent dat de code werkt zoals u nodig heeft, raden we u aan altijd het origineel te verwijderen - u verwijdert tenslotte niet de daadwerkelijke tabel, alleen de link ernaar.

Een woord van voorzichtigheid

Voordat we bij de code komen - slechts een kort woord van waarschuwing, er is niet veel dat u kunt doen als u linkt naar een beschadigde Access-database - als Access het bestand niet kan lezen, is het hoogst onwaarschijnlijk dat het eruit kan importeren.

Dus - op naar de code ...

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

Wat de code doet

VBA-codeHet grootste deel van de code zal vrij voor de hand liggen, maar er zijn een paar belangrijke punten om te onthouden. Ten eerste achterhalen we aan welk bestand wordt gekoppeld door te kijken in de (meestal verborgen) Access-systeemtabel "MSysObjects". Omdat het heel goed mogelijk (en waarschijnlijk) is dat u de gekoppelde tabel een nieuwe lokale alias hebt gegeven, moeten we vervolgens de naam van de oorspronkelijke tabel achterhalen – wederom uit de tabel "MSysObjects".

Nu we die details hebben, zolang ze geldig zijn (dwz je hebt geen verkeerd gespelde tabelnaam aan de routine opgegeven), zijn we klaar om te beginnen, dus het is gewoon een kwestie van a) het verwijderen van de link (als deleteOriginal is ingesteld op True) en de tabel wordt geïmporteerd.

Als u dit doet, krijgt u vaak behoorlijk dramatische prestatieverbeteringen, dus als u gekoppelde tabellen gebruikt, raad ik u ten zeerste aan om na te gaan welke voordelen het verplaatsen van die tabellen naar lokale versies oplevert - u zult misschien verrast zijn!

Auteur Introductie:

Mitchell Pond is een expert op het gebied van gegevensherstel in DataNumen, Inc., de wereldleider in technologieën voor gegevensherstel, waaronder reparatie SQL Server filet en Excel-herstelsoftwareproducten. Voor meer informatie bezoek www.datanumen.com

Reacties zijn gesloten.