Λοιπόν αναλυτικά η διαδικασία.
Πρωτο βήμα: είναι να δημιουργήσεις έναν πίνακα με τα εξής πεδία.
Ονομα Πεδίου: DataBase
Τύπος Πεδίου: Συντομο Κείμενο (Short Text)
Μέγεθος Πεδίου: 50 πχ
Ονομα Πεδίου: Server
Τύπος Πεδίου: Συντομο Κείμενο (Short Text)
Μέγεθος Πεδίου: 50 πχ
Ονομα Πεδίου: ODBCTableName
Τύπος Πεδίου: Συντομο Κείμενο (Short Text)
Μέγεθος Πεδίου: 50 πχ
Ονομα Πεδίου: LocalTableName (
Πρωτεύον Κλείδί)
Τύπος Πεδίου: Συντομο Κείμενο (Short Text)
Μέγεθος Πεδίου: 50 πχ
Ονομα Πεδίου: DSN
Τύπος Πεδίου: Συντομο Κείμενο (Short Text)
Μέγεθος Πεδίου: 50 πχ
Αφού Δημιουργήσεις τον πίνακα τον αποθηκεύεις και του δίνεις ένα όνομα πχ
UsysShared.
Δεύτερο βήμα:
Δημιουργείς ένα module με όνομα πχ RelinkSQL και κάνεις επικόλληση τον εξής κώδικα.
Public Function DoesTableExist(strTableName As String) As Boolean '(Author:Microsoft)
On Error Resume Next
Dim db As DAO.Database: Set db = CurrentDb()
Dim Tbl As DAO.TableDef: Set Tbl = db.TableDefs(strTableName)
If Err.Number = 3265 Then ' Item not found.
DoesTableExist = False
Exit Function
End If
DoesTableExist = True
End Function
Public Function RelinkShared() As Boolean '(Author:Microsoft/Changes:Christos Karakizos)
Dim strTableName As String
Dim strConn As String
Dim db As DAO.Database: Set db = CurrentDb()
Dim rs As DAO.Recordset
Dim Tbl As DAO.TableDef
' ---------------------------------------------
' Register ODBC database(s)
' ---------------------------------------------
If DoesTableExist("UsysShared") = True Then
Set rs = db.OpenRecordset("
UsysShared", dbOpenSnapshot)
With rs
While Not .EOF
If ReadODBCDriver() = True Then
'ODBC Driver 17 for SQL Server
DBEngine.RegisterDatabase rs("DSN"), "ODBC Driver 17 for SQL Server", True, "Description=" & rs("DataBase") & Chr(13) & "Server=" & rs("Server") & Chr(13) & "Database=" & rs("DataBase")
Else
'SQL Server Driver
DBEngine.RegisterDatabase rs("DSN"), "SQL Server", True, "Description=" & rs("DataBase") & Chr(13) & "Server=" & rs("Server") & Chr(13) & "Database=" & rs("DataBase")
End If
' ---------------------------------------------
' Link table
' ---------------------------------------------
strTableName = rs("LocalTableName")
strConn = "ODBC;"
strConn = strConn & "DSN=" & rs("DSN") & ";"
strConn = strConn & "APP=Microsoft Access;"
strConn = strConn & "DATABASE=" & rs("DataBase") & ";"
strConn = strConn & "Trusted_Connection=Yes" & ";"
strConn = strConn & "TABLE=" & rs("ODBCTableName")
If (DoesTableExist(strTableName) = False) Then
Set Tbl = db.CreateTableDef(strTableName, dbAttachSavePWD, rs("ODBCTableName"), strConn)
db.TableDefs.Append Tbl
Else
Set Tbl = db.TableDefs(strTableName)
Tbl.Connect = strConn
Tbl.RefreshLink
End If
rs.MoveNext
Wend
End With
End If
rs.Close
Set rs = Nothing
RelinkShared = True
End Function
Public Function ReadODBCDriver() As Boolean
On Error GoTo Err:
If CreateObject("WScript.Shell").RegRead("HKEY_LOCAL_ MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers\ODBC Driver 17 for SQL Server") = "Installed" Then
ReadODBCDriver = True
Else
ReadODBCDriver = False
End If
Err:
End Function
Σου έχω βάλει μέσα στον κώδικα να ελέγχει αν υπάρχει εγκατεστημενος ο ODBC 17 Driver και αν ναι να δημιουργεί τα DSN με αυτόν τον Driver αλλιώς δημιουργεί τα DSN με τον SQL Driver.
Τρίτο Βήμα :
Στον Πίνακα που δημιούργησες καταχωρείς τα στοιχεία απο τους πίνακες που θες να συνδέσεις απο τον SQL Server.
Πχ:
Πεδιο Database --->Ονομα DSN (Shared)
Πεδίο Server ---> Εδω καλύτερα να δώσεις την IP Address του SQL Server και όχι το όνομα.
Πεδίο ODBCTableName --->Εδώ δίνεις το όνομα του πίνακα που θες να συνδέσεις απο τον SQL Server
Πεδίο LocalTableName --->Εδώ δίνεις το όνομα του συνδεμένου πίνακα πώς θες να ονομάζεται μέσα στην Access
Πεδιο DSN--->Εδώ δώσε το όνομα που θες στο DSN. Εγώ βάζω το ίδιο με το πεδίο Database
Τέταρτο βήμα:
Δημιουργείς μια μακροεντολή που την ονομαζεις Autoexec--->Εκτελεση κώδικα--->RelinkShared() και είσαι έτοιμος.
Ελπίζω αυτο να σε βοηθήσει καλύτερα. Αν όχι πάλι εδώ είμαστε.