Bekijk de onderstaande video om te zien hoe je onze site als een web app op je startscherm installeert.
Opmerking: Deze functie is mogelijk niet beschikbaar in sommige browsers.
Public Function CheckTables() As Double
On Error GoTo Err_CheckTables
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim cmd As New ADODB.Command
Dim cat As New ADOX.Catalog
Dim tbd As ADOX.Table
Dim strSQL As String
Dim lngLevel As Long
Dim strStandaardTaal As String
'kijkt als de versie up to date is
lngError = 0
cnn.ConnectionString = GetConnectionString("[NaamGekoppeldAccessBestand]")
cnn.Open
'verwijder bestaande records
Set cat.ActiveConnection = cnn
strSQL = "Delete from tblLinkedTables"
cmd.CommandType = adCmdText
cmd.CommandText = strSQL
cmd.ActiveConnection = CurrentProject.Connection
cmd.Execute
'voeg nieuwe records toe
rst.Open "tblLinkedTables", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
For Each tbd In cat.Tables
With rst
.AddNew
!ltName = tbd.Name
.Update
End With
Next tbd
rst.Close
cnn.Close
Exit_CheckTables:
Set cat = Nothing
Set cnn = Nothing
Set rst = Nothing
Set tbd = Nothing
Exit Function
Err_CheckTables:
CheckTables = -1
lngError = 11
Debug.Print Err.Number & ": " & Err.Description
Resume Exit_CheckTables
End Function
Public Function GetConnectionString(strDatabase As String) As String
On Error GoTo Err_GetConnectionString
Dim cnn As ADODB.Connection
Dim strConn As String
Dim intPos As Integer, intPos2 As Integer
Set cnn = CurrentProject.Connection
strConn = cnn.ConnectionString
intPos = InStr(strConn, "Data Source=")
intPos2 = InStr(intPos, strConn, ";")
strConn = Left(strConn, intPos - 1) & "Data Source=" & strDatabase & Right(strConn, Len(strConn) - intPos2 + 1)
GetConnectionString = strConn
Exit_GetConnectionString:
Set cnn = Nothing
Exit Function
Err_GetConnectionString:
GetConnectionString = "#ERR in getConnectionString: " & Err.Number & " - " & Err.Description
Resume Exit_GetConnectionString
End Function
Als je database in een ander formaat is moet je deze laatste functie natuurlijk aanpassen.
Niet volledig, maar je kan misschien al starten. De voorbeelden hebben wel een reference naar de ADODB en ADOX bibliotheken nodig.
Vriendelijke groeten
Noëlla
rst.Open "tblLinkedTables", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rst.Open "tblLinkedTables", cnn, adOpenKeyset, adLockOptimistic
Option Compare Database
Const BackendPad As String = "G:\Beleid\CRM\Access\Startpunt V2.0\Backend\"
'—————————————————————————-
' Procedure: RefreshTableLinks
' Purpose: Refresh table links to back-ends in the same folder as front end.
' Note: Linked Tables can be in more than one back-end.
' Return: Returns a zero-length string if all tables are relinked.
' Return: Or returns a string listing tables not relinked and errors.
'—————————————————————————-
Public Function RefreshTables()
Dim strMsg As String, strBackend As String, strSQL As String
Dim rs As DAO.Recordset
Dim bNew As Boolean
Dim tmp As Variant
strSQL = "SELECT Top 1 Id, Backend_pad, Backend From tInstellingen Order By ID Desc"
Set rs = CurrentDb.OpenRecordset(strSQL)
With rs
If Not !Backend_pad = vbNullString Then
strBackend = !Backend_pad & IIf(Right(!Backend_pad, 1) <> "\", "\", "") & !BackEnd
If Dir(strBackend) = "" Then strBackend = ZoekMap("Waar staat de database?"): bNew = True
Else
strBackend = ZoekMap("Waar staat de database?"): bNew = True
End If
If bNew = True And Not strBackend = "Geen map geselecteerd" Then
tmp = Split(strBackend, "\")(UBound(Split(strBackend, "\")))
.AddNew
!Backend_pad = Left(strBackend, Len(strBackend) - Len(tmp))
!BackEnd = tmp
.Update
End If
.Close
End With
If Not strBackend = "Geen map geselecteerd" Then
strMsg = RefreshTableLinks(strBackend)
Else
Exit Function
End If
If Len(strMsg & "") = 0 Then
Debug.Print "Alle Tabellen werden met success opnieuw gekoppeld."
Else
MsgBox strMsg, vbCritical
End If
End Function
Public Function RefreshTableLinks(Optional BackEnd As String) As String
On Error GoTo ErrHandle
Dim tdf As DAO.TableDef
Dim strCon As String
Dim strBackend As String
Dim strMsg As String, strFields As String
Dim intErrorCount As Integer
Dim tmp As Variant
Dim fld As DAO.Field
'-----------------------------------------------------------------------------------------------------
'Door alle tabellen in de TableDefs Collectie lussen.
'-----------------------------------------------------------------------------------------------------
If BackEnd = vbNullString Then
strBackend = CurrentProject.Path & "\Backend\"
Else
strBackend = BackEnd
End If
For Each tdf In CurrentDb.TableDefs
If Left$(tdf.Connect, 10) = ";DATABASE=" Then 'Tabel is een gelinkte tabel.
If Left(tdf.Name, 1) = "~" Then
strFields = ""
Else
strCon = Nz(tdf.Connect, "") 'Lees de Connection String uit.
'-----------------------------------------------------------------------------------------
'Gebruik de SPLIT opdracht om de back-end database naam te splitsen.
'-----------------------------------------------------------------------------------------
tmp = Split(strCon, "\")(UBound(Split(strCon, "\")))
'-----------------------------------------------------------------------------------------
'Checken of we een Access database te pakken hebben
'-----------------------------------------------------------------------------------------
If InStr(1, tmp, "mdb") > 0 Or InStr(1, tmp, "accdb") > 0 Then
On Error Resume Next
'-------------------------------------------------------------------------------------
'De nieuwe Connection String opbouwen en verversen.
'-------------------------------------------------------------------------------------
Set tdf = db.TableDefs(tdf.Name)
'-------------------------------------------------------------------------------------
''tdf.Connect = ";DATABASE=" & BackendPad & tmp(UBound(tmp))
Dim strConNew As String
strConNew = ";DATABASE=" & strBackend & tmp
tdf.Connect = strConNew
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
End If
Next tdf
'---------------------------------------------------------------------------------------------------------
'En alles netjes opruimen
'---------------------------------------------------------------------------------------------------------
ExitHere:
On Error Resume Next
If intErrorCount > 0 Then
strMsg = "Er waren " & intErrorCount & " problemen met het verversen van de tabel links: """ _
& vbNewLine & strMsg & "In Procedure RefreshTableLinks"""
RefreshTableLinks = strMsg
Debug.Print strMsg
End If
Set tdf = Nothing
Exit Function
ErrHandle:
On Error Resume Next
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
Private Function ZoekMap(Optional Titel As String) As String
Dim strDBPath As Variant
Dim dlgKiezer As FileDialog
Set dlgKiezer = Application.FileDialog(msoFileDialogFolderPicker)
With dlgKiezer
.Title = Titel 'kies de start locatie
.InitialFileName = CurrentProject.Path & "\Backend\" 'openen in de map waar de DB staat
.AllowMultiSelect = False 'je kan maar één map kiezen
If .Show = -1 Then 'bepaal of gebruiker op OK-knop heeft geklikt
ZoekMap = .SelectedItems.Item(1) & "\" 'sla de locatie van de DB op
Else
ZoekMap = "Geen map geselecteerd"
End If
End With
End Function
We gebruiken essentiële cookies om deze site te laten werken, en optionele cookies om de ervaring te verbeteren.