Εμφάνιση ενός μόνο μηνύματος
  #13  
Παλιά 31-07-20, 09:36
pctechdr Ο χρήστης pctechdr δεν είναι συνδεδεμένος
Όνομα: Χρήστος
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 18-11-2012
Περιοχή: Deutschland
Μηνύματα: 212
Προεπιλογή

Λοιπόν αναλυτικά η διαδικασία.

Πρωτο βήμα: είναι να δημιουργήσεις έναν πίνακα με τα εξής πεδία.

Ονομα Πεδίου: 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() και είσαι έτοιμος.

Ελπίζω αυτο να σε βοηθήσει καλύτερα. Αν όχι πάλι εδώ είμαστε.

Τελευταία επεξεργασία από το χρήστη pctechdr : 31-07-20 στις 09:47.
Απάντηση με παράθεση