Avatar billede joab Nybegynder
25. marts 2002 - 08:08 Der er 8 kommentarer og
1 løsning

Ændre link til sammenkædede tabeller

Jeg har en database (Access 2000), der er delt op i 2 - en for betjening og data.

I betjening.mdb er tabellerne linkede til data.mdb.

I betjening.mdb har jeg en tabel der hedder tblSys.
Dette er en lokal tabel.
I denne tabel har jeg et felt der hedder DatabaseLink.
I dette felt vil jeg gerne skrive stien til data.mdb, f.eks. c:\dokumenter\database\data.mdb.

Er der nogle der ved hvordan man ved åbning får access til at sammenkæde tabellerne til værdien i dette felt?
25. marts 2002 - 08:34 #1
Hej joab,

Du er velkommen til at sende databasen til mig. Jeg har en løsning, hvor du ikke behøver at spekulere på hvor data.mdb ligger. Systemet kommer frem og spørger, hvis data ikke ligger hvor de er placeret. Derefter kan brugeren vælge den ny placering vha openfile-dialogboks.
Løsningen er dog for kompleks til at kunne beskrive her.

/Thomas

tj@makeiteasy.dk
25. marts 2002 - 08:46 #2
Alternativt, kan du bruge denne funktion til at tilknytte til en bestemt database:

Public Function Sammenkæd(Sti As String)
    On Error Resume Next
    Dim db As Database, tdef As TableDef
    Dim constr As String, n As Integer
    Dim TblName As String
    Dim Connectstring As String, tblSourceName As String
    DoCmd.Hourglass True
    Set db = CurrentDb
    For n = 0 To db.TableDefs.Count - 1
        '<<----Hvis tabellen er tilknyttet---->>
        If tdef.Connect <> "" Then
            TblName = tdef.Name
            tblSourceName = tdef.SourceTableName
            DoCmd.DeleteObject acTable, TblName
            Set tdef = db.CreateTableDef(TblName)
            tdef.Connect = ";DATABASE=" & Sti
            tdef.SourceTableName = tblSourceName
            db.TableDefs.Append tdef
        End If
    Next n
    DoCmd.Hourglass False
    Beep
End Function

Du kan således kalde funktionen således:
Call Sammekæd(DFirst("DatabaseLink", "tblsys"))

/Thomas
www.makeiteasy.dk
25. marts 2002 - 10:49 #3
Hej igen,

Jeg glemte lige at sige, at koden kræver en reference til DAO.

I VBA-vinduet, vælger du menuen Tools->References og herefter sikre du dig, at der er et kryds i "Microsoft DAO 3.x object Library".

/Thomas
26. marts 2002 - 12:44 #4
Joab, har du fået kigget på det?
Avatar billede joab Nybegynder
26. marts 2002 - 13:28 #5
Hej Thomas
Tak for dine indlæg - jeg ser lige på det og vender tilbage.
27. marts 2002 - 11:49 #6
Det viser sig, at jeg fik slettet en ret vigtig linie i eksemplet overfor. Koden skal herefter se således ud:

Public Function Sammenkæd(Sti As String)
    On Error Resume Next
    Dim db As Database, tdef As TableDef
    Dim constr As String, n As Integer
    Dim TblName As String
    Dim Connectstring As String, tblSourceName As String
    DoCmd.Hourglass True
    Set db = CurrentDb
    For n = 0 To db.TableDefs.Count - 1
        Set tdef = db.tabledefs(n)
        '<<----Hvis tabellen er tilknyttet---->>
        If tdef.Connect <> "" Then
            TblName = tdef.Name
            tblSourceName = tdef.SourceTableName
            DoCmd.DeleteObject acTable, TblName
            Set tdef = db.CreateTableDef(TblName)
            tdef.Connect = ";DATABASE=" & Sti
            tdef.SourceTableName = tblSourceName
            db.TableDefs.Append tdef
        End If
    Next n
    DoCmd.Hourglass False
    Beep
End Function

Jeg beklager fejlen!

/Thomas
Avatar billede joab Nybegynder
27. marts 2002 - 12:15 #7
Tak for rettelsen.
Det virker fint og du har helt sikkert fortjent dine point.

...men der er en dum lille fejl.

Hvis man får skiftet databasen til et forkert navn og man genstarte access forsvinder de sammenkædede tabeller.
Så skal de sammenkædes manuelt igen.

Det kunne være sjovt at se løsningen hvor systemet kommer frem og spørger.
27. marts 2002 - 20:25 #8
Den er hermed fremsendt...
Avatar billede tigerdyr2007 Praktikant
30. august 2010 - 21:03 #9
Hej
Jeg har en del problemer med den kode du har lagt her. Når jeg bruger den kan jeg ikke få FE til at køre på to maskiner samtidig. (FE er distribueret til hver lokal maskine)
Den linker godt nok alle tabellerne, men det går meget langsomt, og der kommer to gange fejlbesked til sidst. (ikke fra err.handler)
Jeg har godt nok ændret den en smule til:

Function AttachAll(strFileAndPath As String)
'Funktion til at linke alle tabeller til den ny-valgte DB BE-fil.
On Error GoTo err_handler

Dim db As DAO.Database
Dim tdef As DAO.TableDef
Dim TblName As String
Dim Connectstring As String, tblSourceName As String
Dim n As Integer

If Dir(strFileAndPath) <> "" Then
    Set db = CurrentDb
    For n = 0 To db.TableDefs.Count - 1  'For Each tdef In db.TableDefs
        Set tdef = db.TableDefs(n)
        If tdef.connect <> "" Then
            Err = 0

            TblName = tdef.name
            tblSourceName = tdef.SourceTableName
           
            DoCmd.DeleteObject acTable, TblName
            Set tdef = db.CreateTableDef(TblName)
            tdef.connect = "MS Access;PWD=" & backend_PW & ";DATABASE=" & strFileAndPath '";DATABASE=" & Sti
            tdef.SourceTableName = tblSourceName
            db.TableDefs.Append tdef
           
            If Err <> 0 Then
                RefreshLinks = False
                DoCmd.Hourglass False
                Exit Function
            End If
        End If
    Next n
End If

Exit Function

err_handler:
    MsgBox Err.description, vbCritical, "Fejl"
    Exit Function

End Function
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester