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