1 front-end, meerdere back-end

Status
Niet open voor verdere reacties.

FrankinZwolle

Gebruiker
Lid geworden
29 sep 2014
Berichten
41
Ik heb één front-end db met één back-end db. Beide hebben dezelfde naam: Test.accdb en test_be.accdb.

Nu wil ik de front-end test.accdb kunnen koppelen aan test_be.accdb of historie_test_be.accdb. Bij het starten van het programma moet eigenlijk een leuze gemaakt kunnen worden. Ik wil nu test.accdb openen of historie_test_be.accdb.

Kan dit en zo ja hoe?
 
Je kunt met een functie de backend koppeling veranderen, dus denk ik ook wel de backend zelf.
 
OctaFish: zou je mij ook blij kunnen maken met een beschrijving welke functie dat dan zou moeten zijn? En op welke wijze je het je voorstelt hoe de gebruiker, bij opstarten van het systeem, de keuze zou kunnen maken?
Ik heb mijn vraag zo simpel mogelijk gehouden maar het wordt waarschijnlijk in de praktijk ietsje ingewikkelder omdat ik één front end db heb met meerdere back-ends en die back-ends draaien op verschillende computers, honderden kilometers van elkaar vandaan. Zie het maar als allemaal bedrijven die met de front-end werken maar ieder een eigen back-end hebben die niet dezelfde naam hebben. Dus de back-end heeft een bedrijfsspecifieke naam.
 
De functie is makkelijk te vinden, want iedereen gebruikt geloof ik dezelfde :). Ik heb 'm een beetje aangepast voor je, zodat hij met een parameter werkt.
Code:
Public Function RefreshTableLinks(Pad As String) As String
On Error GoTo ErrHandle
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim strCon As String
Dim strDBPath As String, strMsg As String
Dim intErrorCount As Integer

FileDialog
    strDBPath = CurrentProject.path & strBackEnd
    If dir(strDBPath, vbDirectory) = "" Then MaakMappen strDBPath
    Set db = CurrentDb
    For Each tdf In db.TableDefs
        If Left$(tdf.Connect, 10) = ";DATABASE=" Then
            strCon = Nz(tdf.Connect, "")
            strDBPath = Right$(strCon, (Len(strCon) - (InStrRev(strCon, "") - 1)))
            If Len(strDBPath & "") > 0 Then
                Set tdf = db.TableDefs(tdf.Name)
                tdf.Connect = ";DATABASE=" & Pad
                tdf.RefreshLink
            Else
                intErrorCount = intErrorCount + 1
                strMsg = strMsg & "Error getting back-end database name." & vbNewLine
                strMsg = strMsg & "Table Name: " & tdf.Name & vbNewLine
                strMsg = strMsg & "Connect = " & strCon & vbNewLine
            End If
        End If
    Next tdf
    
ExitHere:
    On Error Resume Next
    If intErrorCount > 0 Then
        strMsg = "There were errors refreshing the table 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 & "Table Name: " & tdf.Name & vbNewLine
    strMsg = strMsg & “Connect = ” & strCon & vbNewLine
    Resume ExitHere

End Function

Je roept hem op vanaf een startformulier, dus een formulier dat als eerste draait. Daar zet je dan iets als:
Code:
Private Sub Form_Load()
TabellenKoppelen:
    'Hier de code waarmee je de paden van de databases kunt lezen
    Pad = InputBox("Typ het pad naar de db", "Db selecteren", "Hier het pad naar de db")
    strMsg = RefreshTableLinks(Pad)
    'strMsg will be a zero-length string if there is no error message.
    If Len(strMsg & "") = 0 Then
        Debug.Print "All; Tables; were; successfully; relinked."
    Else
        MsgBox strMsg, vbCritical
    End If
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan