Hvordan konvertere en koblet tabell til en lokal tabell i tilgangen din

Vi har sagt det før, men det er verdt å gjenta – koblede tabeller kan være veldig nyttige i databasene dine av en rekke årsaker. Men en stor ulempe med koblede tabeller er ytelsen – kjører spørringer mot dem, spesielt hvis de ikke er Microsoft Access-tabeller (dvs. hvis de er Excel, CSV eller DBF filer). De kan være smertefullt trege å jobbe med. Det er noen måter du kan omgå det på – vi jobber med én måte her, og det er å konvertere en koblet tabell til en lokal tabell. Jada – du kan gjøre dette manuelt ved å kopiere/lime inn tabeller, men hvis du har mye å håndtere, er det mye, mye enklere å gjøre det i kode, så la oss se hvordan...

Hvorfor det er viktig å skissere dine behov

Få tilgang til koblet tabellFørst av alt, la oss skissere hva vi faktisk vil at koden skal gjøre - å gjøre dette gjør det så mye enklere å faktisk lage koden i utgangspunktet, så jeg vil foreslå at du gjør dette hver gang du tenker på å lage litt VBA-kode , hjelper det med å klargjøre målet ditt:

"Gi navnet på en koblet tabell, importer den tabellen til databasen som en lokal tabell for å forbedre ytelsen - eventuelt slett koblingen fra databasen samtidig"

Normalt, når du konverterer en koblet tabell til en lokal tabell, vil du slette koblingen, men i kodeeksemplet nedenfor har vi gitt deg muligheten til å beholde den opprinnelige koblede filen også, men ved å gjøre dette, nylig importert tabell vil ikke erstatte den koblede tabellen i spørringene dine osv., så du vil ikke se ytelsesgevinsten som en lokal tabell ville gi deg. Når du er komfortabel med at koden fungerer som du trenger, anbefaler vi at du alltid sletter originalen – du sletter tross alt ikke selve tabellen, bare lenken til den.

Et ord av forsiktighet

Før vi kommer til koden – bare en rask advarsel, det er ikke mye du kan gjøre hvis du linker til en skadet Access-database – hvis Access ikke kan lese filen, er det svært usannsynlig at den vil kunne importere fra den.

Så – over til koden...

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

Hva koden gjør

VBA kodeMost av koden vil være ganske åpenbar, men det er noen viktige punkter å merke seg. For det første får vi detaljene om hvilken fil som kobles til ved å se i (vanligvis skjult) Access-systemtabellen "MSysObjects". Siden det er fullt mulig (og sannsynlig) at du vil ha gitt den koblede tabellen et nytt lokalt alias, er det neste vi må gjøre å hente navnet på den opprinnelige tabellen – igjen, fra "MSysObjects"-tabellen.

Nå som vi har disse detaljene, så lenge de er gyldige (dvs. at du ikke har oppgitt et feilstavet tabellnavn til rutinen), så er vi i gang, så det er bare et spørsmål om å) slette lenken (hvis deleteOriginal er satt til True), og importerer tabellen.

Å gjøre dette vil ofte gi deg ganske dramatiske forbedringer i ytelsen, så hvis du bruker koblede tabeller, vil jeg på det sterkeste anbefale at du sjekker hvilke gevinster å flytte disse bordene til lokale versjoner – du kan bli overrasket!

Forfatterintroduksjon:

Mitchell Pond er en datagjenopprettingsekspert innen DataNumen, Inc., som er verdensledende innen datagjenopprettingsteknologier, inkludert reparasjon SQL Server fil og excel-programvareprodukter for gjenoppretting. For mer informasjon besøk www.datanumen. Med

Kommentarer er stengt.