overzicht gekoppelde databases

Status
Niet open voor verdere reacties.

jwaque

Verenigingslid
Lid geworden
16 aug 2006
Berichten
443
Ik heb diverse databases gekoppeld aan mijn personeelsdatabase zodat ik de namen maar op een plek bij hoef te houden. Heel praktisch. Maar nu gaat de database van plek veranderen (we krijgen een nieuw netwerk met nieuwe namen voor de algemene schijf).

Kan ik makkelijk een overzicht draaien met daarin de databases die gebruik maken van mijn database. dan vergeet ik niet ergens het koppelingsbeheer aan te passen.
 
Gebruik een functie die zelf de koppelingen ververst. Veel beter. Zeker als de relatieve paden zelf gelijk blijven.
 
Klinkt prima maar ook heel cryptisch.

wat zijn relatieve paden? is dat de folder waar het staat zonder c:\? De hoofdfolder veranderd ook dus ipv c:\folder\... krijgen we d:\nieuwefolder\... ... blijft wel gelijk.
En jij hebt vast een voorbeeldje van een functie die zelf de koppelingen ververst. toch?
 
Relatief is inderdaad een rekbaar begrip. In Access kader bedoel ik dan eigenlijk dat je kijkt naar de bestanden die gelinked zijn aan het pad waar de database zelf in staat. Dus als je in de map "H:\Hoofdmap\Submap\Databases" de FrontEnd neerzet, en de backend staat in "H:\Hoofdmap\Submap\Databases\Backends" dan is de map "Backends" bepaald vanuit de opdracht CurrentProject.Path. Je vindt de backend dan met de opdracht CurrentProject.Path & "\Backends". Als je de hele structuur verandert naar "Z:\Hoofdmap\Databases" verandert er relatief gezien niks en blijf je met de opdracht dus nog steeds de backend vinden. Uiteraard moeten de koppelingen worden bijgewerkt, want die wijzen na verplaatsen nog steeds naar de oorspronkelijke locatie. De functie die ik gebruik is dan ook deze:
Code:
Public Function RefreshTableLinks() As String
On Error GoTo ErrHandle

Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim strCon As String
Dim strBackEnd As String
Dim strMsg As String
Dim intErrorCount As Integer
Dim tmp As Variant
Set db = CurrentDb

'Door alle tabellen in de TableDefs Collectie lussen.
For Each tdf In db.TableDefs
    If Left$(tdf.Connect, 10) = ";DATABASE=" Then       'Tabel is een gelinkte tabel.
        strCon = Nz(tdf.Connect, "")                    'Lees de Connection String uit.
        'Gebruik de SPLIT opdracht om de back-end database naam te splitsen.
        tmp = Split(strCon, "\")
        'Checken of we een Access database te pakken hebben
        If InStr(1, tmp(UBound(tmp)), "mdb") > 0 Or InStr(1, tmp(UBound(tmp)), "accdb") > 0 Then
            'De nieuwe Connection String opbouwen en verversen.
            Set tdf = db.TableDefs(tdf.Name)
            tdf.Connect = ";DATABASE=" & CurrentProject.Path & "\Backend\" & tmp(UBound(tmp))
            tdf.RefreshLink
        Else
            'Als er een foutje is: de foutmelding toevoegen aan de foutmeldingsboodschap.
            intErrorCount = intErrorCount + 1
            strMsg = strMsg & "Niet gelukt om de back-end database naam uit te lezen." & vbNewLine
            strMsg = strMsg & "Tabel Naam: " & tdf.Name & vbNewLine
            strMsg = strMsg & "Connect = " & strCon & vbNewLine
        End If
    End If
Next tdf

ExitHere:
    On Error Resume Next
    If intErrorCount > 0 Then
        strMsg = "Er waren problemen met het verversen van de tabel links: """ _
        & vbNewLine & strMsg & "In Procedure RefreshTableLinks"""
        RefreshTableLinks = strMsg
    End If
    Set tdf = Nothing
    Set db = Nothing
    Exit Function
    
ErrHandle:
    intErrorCount = intErrorCount + 1
    strMsg = strMsg & "Error " & Err.Number & " " & Err.Description
    strMsg = strMsg & vbNewLine & "Tabel Naam: " & tdf.Name & vbNewLine
    strMsg = strMsg & "Connect = " & strCon & vbNewLine
    Resume ExitHere

End Function
 
Super.
Oke ik moet wat werken aan mijn mappen structuur.
Maar terug naar mijn vraag. Ik moet dit nu in een aantal databases gaan aanpassen. Kan ik vanuit de hoofddatabase zien welke andere databases gebruik maken van delen van deze database.
 
Dat lijk mij heel lastig; een tabel in een db is nu eenmaal precies dat: een tabel in een database. Met geen koppeling. Je zult dus alle databases moeten openen (kan wel met VBA) en dan de routine draaien die de links uitleest. Jij liever als ik :).
 
dank je wel. Ik was al wel bang voor dit antwoord maar dacht voordat ik aan deze klus begin eerst even informeren. Dank je wel. Nu eens kijken of ik het dan beter kan programmeren voordat ICT de pad namen nog eens gaat hernoemen.
 
Ik zet de functie standaard in mijn (gekoppelde) databases en draai hem bij het openen van de database middels een AutoExec macro. Heb je er geen omkijken naar.
 
ik ga ermee aan de slag als ik een overzichtje heb met wat ik moet aanpassen. dank jewel
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan