Option Compare Database
Option Explicit
Function CreateODBCLinkedTables() As Boolean
On Error GoTo CreateODBCLinkedTables_Err
Dim strTblName As String
Dim strConn As String
Dim strReg As String
Dim db As Database
Dim rs As Recordset
Dim tbl As TableDef
' ---------------------------------------------
' Register ODBC database(s)
' ---------------------------------------------
Set db = CurrentDb
Set rs = db.OpenRecordset("tblODBCDataSources")
With rs
While Not .EOF
If IsNull(rs!DSN) Then
Else
strReg = "Description= ERC7 - " & rs("DataBase")
strReg = strReg & Chr(13) & "Server=" & rs("Server")
strReg = strReg & Chr(13) & "Database=" & rs("DataBase")
MsgBox strReg, vbInformation, "Registration string"
DBEngine.RegisterDatabase rs("DSN"), rs("DriverName"), True, strReg
' ---------------------------------------------
' Link table
' ---------------------------------------------
strTblName = rs("LocalTableName")
strConn = "ODBC;"
strConn = strConn & "DSN=" & rs("DSN") & ";"
strConn = strConn & "SRVR=" & rs("Server") & ";"
strConn = strConn & "APP=Microsoft Access;"
strConn = strConn & "DATABASE=" & rs("DataBase") & ";"
strConn = strConn & "UID=" & rs("UID") & ";"
strConn = strConn & "PWD=" & rs("PWD") & ";"
strConn = strConn & "TABLE=" & rs("ODBCTableName")
If (DoesTblExist(strTblName) = False) Then
Set tbl = db.CreateTableDef(strTblName, _
dbAttachSavePWD, rs("ODBCTableName"), _
strConn)
db.TableDefs.Append tbl
db.Containers.Refresh
MsgBox strConn, vbInformation, "Table link successfully created"
Else
Set tbl = db.TableDefs(strTblName)
tbl.Connect = strConn
tbl.RefreshLink
End If
End If
rs.MoveNext
Wend
End With
CreateODBCLinkedTables = True
db.Containers.Refresh
MsgBox "Refreshed ODBC Data Sources", vbInformation
CreateODBCLinkedTables_End:
Exit Function
CreateODBCLinkedTables_Err:
MsgBox Err.Number & " - " & Err.Description, vbCritical, "MyApp"
Resume CreateODBCLinkedTables_End
End Function
'***************************************************************
'The DoesTblExist function validates the existence of a TableDef
'object in the current database. The result determines if an
'object should be appended or its Connect property refreshed.
'***************************************************************
Function DoesTblExist(strTblName As String) As Boolean
On Error Resume Next
Dim db As Database, tbl As TableDef
Set db = CurrentDb
Set tbl = db.TableDefs(strTblName)
If Err.Number = 3265 Then ' Item not found.
DoesTblExist = False
Exit Function
End If
DoesTblExist = True
End Function