Länka tabeller i Access

När man utvecklar ett dataprogram i Access så är det bra att dela på själva programfilen (frontend) och databasen där data lagras (backend). Då kan man skicka ut nya versioner av programmet utan att data försvinner.

Problemet

Problemet som uppstår när man delar med sig av programmet till andra är att sökvägen till datafilen oftast inte är densamma på andras datorer. Om man till exempel utvecklat programmet på sin dator kan mappen där programmet och databas lagras ha namnet C:\Users\Micke\Documents\Kundregister\

När man sedan skickar program och datafil till någon annan så är sökvägen inte densamma. Tabellerna pekar då till en mapp som inte finns på deras dator och programmet kan inte köras.

Lösningen

Lösningen på detta är att programmet vid start länkar om alla tabeller till den mapp och databas som ska användas. Detta är oftast samma mapp som:
*  programmet ligger i
*  mappen ”Mina dokument”
*  eller en fast sökväg till en server

Exempel på dessa mappar kan vara:
*  C:\Program Files\Kundregister\
*  C:\Users\Per Nilsson\Documents\Kundregister\
*  Z:\Gemensam\datafiler\Kundregister\

För att länka om tabellerna behöver man i Access ta reda på vad t.ex. sökvägen till programmappen eller mappen ’Mina Dokument’ är. Hur man får tag i sökvägarna till programmappen och Mina Dokument har jag beskrivit i inlägget VBA-kod för olika sökvägar.

Därefter länkar man om tabellerna genom att uppdatera egenskapen Connect för tabeller som som finns i datafilen/databasen/backend. Ett funktion för detta i VBA kan se ut så här:

Function kopplaTabell(dbas$, tbl$)
    Dim db As Database, td As TableDef
    On Error Resume Next
    Set db = CurrentDb
    Set td = db.TableDefs(tbl)
    ' Om tabell redan finns tar vi först bort den
    If Err = 0 Then db.TableDefs.Delete (tbl)
    Set td = db.CreateTableDef(tbl)
    td.SourceTableName = tbl
    td.Connect = ";DATABASE=" & dbas
    db.TableDefs.Append td
    RefreshDatabaseWindow
End Function

Sedan gör vi en funktion som tar fram sökväg med filnamn till databasen och anropar den tidigare funktionen en gång för varje tabell som ska kopplas:

Function kopplaDB()
    ' Hitta sökvägen till programmapp och databas
    dbas = sProgramPath()
    dbas = dbas & "\Kundregister\datafilen.mdb"
    ' Koppla tabeller
    kopplaTabell dbas, "Kunder"
    kopplaTabell dbas, "Faktura"
    kopplaTabell dbas, "Fakturarader"
End Function