Τρόπος δημιουργίας μιας σύνδεσης χωρίς DSN στο διακομιστή SQL για συνδεδεμένους πίνακες στην Access

Για προχωρημένους: Απαιτεί ειδικές γνώσεις κωδικοποίησης, διαλειτουργικότητας και περιβάλλοντος για πολλούς χρήστες.


Αυτό το άρθρο ισχύει μόνο για μια βάση δεδομένων της Microsoft Access (.accdb και .mdb).

ΕΙΣΑΓΩΓΗ

Αυτό το άρθρο περιγράφει τον τρόπο δημιουργίας μιας σύνδεσης σε Microsoft SQL Server για συνδεδεμένους πίνακες στην Microsoft Access, η οποία δεν χρησιμοποιεί ένα όνομα προέλευσης δεδομένων (DSN). Αυτή είναι επίσης γνωστή ως μια χωρίς DSN σύνδεσης. Τα παραδείγματα που περιέχει αυτό το άρθρο ισχύουν για Microsoft Office Access 2007, στην Microsoft Office Access 2003 και σε Microsoft Access 2002.

Περισσότερες πληροφορίες

Μπορείτε να χρησιμοποιήσετε ένα DSN για να δημιουργήσετε συνδεδεμένους πίνακες του SQL Server στη Microsoft Access. Ωστόσο, όταν μετακινείτε τη βάση δεδομένων σε έναν άλλο υπολογιστή, πρέπει να δημιουργήσετε ξανά το DSN σε αυτόν τον υπολογιστή. Η διαδικασία αυτή ενδέχεται να είναι προβληματική όταν θα πρέπει να το εκτελέσετε σε περισσότερους από έναν υπολογιστές. Όταν η διαδικασία αυτή δεν πραγματοποιείται σωστά, ενδέχεται να μην μπορεί να εντοπίσει το DSN τους συνδεδεμένους πίνακες. Επομένως, οι συνδεδεμένοι πίνακες ενδέχεται να μην μπορείτε να συνδεθείτε με τον SQL Server.

Όταν θέλετε να δημιουργήσετε μια σύνδεση σε έναν πίνακα του SQL Server, αλλά δεν θέλετε να καθορίσετε από τον προγραμματισμό ενός DSN στο παράθυρο διαλόγου Αρχεία προέλευσης δεδομένων , χρησιμοποιήστε μία από τις ακόλουθες μεθόδους για να δημιουργήσετε μια σύνδεση χωρίς DSN στο διακομιστή SQL.

Μέθοδος 1: Χρησιμοποιήστε τη μέθοδο CreateTableDef

Η μέθοδος CreateTableDef σάς επιτρέπει να δημιουργήσετε έναν συνδεδεμένο πίνακα. Για να χρησιμοποιήσετε αυτήν τη μέθοδο, δημιουργήστε μια νέα λειτουργική μονάδα και, στη συνέχεια, προσθέστε την ακόλουθη AttachDSNLessTable λειτουργία στη νέα λειτουργική μονάδα.
'//Name     :   AttachDSNLessTable'//Purpose  :   Create a linked table to SQL Server without using a DSN
'//Parameters
'// stLocalTableName: Name of the table that you are creating in the current database
'// stRemoteTableName: Name of the table that you are linking to on the SQL Server database
'// stServer: Name of the SQL Server that you are linking to
'// stDatabase: Name of the SQL Server database that you are linking to
'// stUsername: Name of the SQL Server user who can connect to SQL Server, leave blank to use a Trusted Connection
'// stPassword: SQL Server user password
Function AttachDSNLessTable(stLocalTableName As String, stRemoteTableName As String, stServer As String, stDatabase As String, Optional stUsername As String, Optional stPassword As String)
On Error GoTo AttachDSNLessTable_Err
Dim td As TableDef
Dim stConnect As String

For Each td In CurrentDb.TableDefs
If td.Name = stLocalTableName Then
CurrentDb.TableDefs.Delete stLocalTableName
End If
Next

If Len(stUsername) = 0 Then
'//Use trusted authentication if stUsername is not supplied.
stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";Trusted_Connection=Yes"
Else
'//WARNING: This will save the username and the password with the linked table information.
stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";UID=" & stUsername & ";PWD=" & stPassword
End If
Set td = CurrentDb.CreateTableDef(stLocalTableName, dbAttachSavePWD, stRemoteTableName, stConnect)
CurrentDb.TableDefs.Append td
AttachDSNLessTable = True
Exit Function

AttachDSNLessTable_Err:

AttachDSNLessTable = False
MsgBox "AttachDSNLessTable encountered an unexpected error: " & Err.Description

End Function

Για να καλέσετε τη συνάρτηση AttachDSNLessTable , προσθέστε κώδικα που είναι παρόμοιο με ένα από τα ακόλουθα παραδείγματα κώδικα στη μακροεντολή AutoExec ή στο συμβάν Form_Open φόρμας εκκίνησης:
  • Όταν χρησιμοποιείτε τη μακροεντολή AutoExec , κλήση της συνάρτησης AttachDSNLessTable και μετά να μεταβιβάσετε παραμέτρους που είναι παρόμοια με την ακόλουθη από την ενέργεια RunCode.
        AttachDSNLessTable ("authors", "authors", "(local)", "pubs", "", "")
  • Όταν χρησιμοποιείτε τη φόρμα εκκίνησης, προσθέστε κώδικα που είναι παρόμοιο με το ακόλουθο στο συμβάν Form_Open .
    Private Sub Form_Open(Cancel As Integer)    If AttachDSNLessTable("authors", "authors", "(local)", "pubs", "", "") Then
    '// All is okay.
    Else
    '// Not okay.
    End If
    End Sub
    Σημείωση Όταν προσθέτετε περισσότερα από ένα συνδεδεμένο πίνακα στη βάση δεδομένων της Access, πρέπει να προσαρμόσετε τη λογική προγραμματισμού.

Μέθοδος 2: Χρήση του DAO. Η μέθοδος RegisterDatabase

Το DAO . RegisterDatabase μέθοδος σας επιτρέπει να δημιουργήσετε μια σύνδεση DSN, η μακροεντολή AutoExec ή τη φόρμα εκκίνησης. Παρόλο που αυτή η μέθοδος δεν καταργεί την απαίτηση για σύνδεση DSN, μπορεί σας βοηθήσει να επιλύσετε το ζήτημα με τη δημιουργία της σύνδεσης DSN στον κώδικα. Για να χρησιμοποιήσετε αυτήν τη μέθοδο, δημιουργήστε μια νέα λειτουργική μονάδα και, στη συνέχεια, προσθέστε την ακόλουθη CreateDSNConnection λειτουργία στη νέα λειτουργική μονάδα.
'//Name     :   CreateDSNConnection'//Purpose  :   Create a DSN to link tables to SQL Server
'//Parameters
'// stServer: Name of SQL Server that you are linking to
'// stDatabase: Name of the SQL Server database that you are linking to
'// stUsername: Name of the SQL Server user who can connect to SQL Server, leave blank to use a Trusted Connection
'// stPassword: SQL Server user password
Function CreateDSNConnection(stServer As String, stDatabase As String, Optional stUsername As String, Optional stPassword As String) As Boolean
On Error GoTo CreateDSNConnection_Err

Dim stConnect As String

If Len(stUsername) = 0 Then
'//Use trusted authentication if stUsername is not supplied.
stConnect = "Description=myDSN" & vbCr & "SERVER=" & stServer & vbCr & "DATABASE=" & stDatabase & vbCr & "Trusted_Connection=Yes"
Else
stConnect = "Description=myDSN" & vbCr & "SERVER=" & stServer & vbCr & "DATABASE=" & stDatabase & vbCr
End If

DBEngine.RegisterDatabase "myDSN", "SQL Server", True, stConnect

'// Add error checking.
CreateDSNConnection = True
Exit Function
CreateDSNConnection_Err:

CreateDSNConnection = False
MsgBox "CreateDSNConnection encountered an unexpected error: " & Err.Description

End Function

Σημείωση Εάν η μέθοδος RegisterDatabase καλείται ξανά, ενημερώνεται το DSN.

Για να καλέσετε τη συνάρτηση CreateDSNConnection , προσθέστε κώδικα που είναι παρόμοιο με ένα από τα ακόλουθα παραδείγματα κώδικα στη μακροεντολή AutoExec ή στο συμβάν Form_Open φόρμας εκκίνησης:
  • Όταν χρησιμοποιείτε τη μακροεντολή AutoExec , κλήση της συνάρτησης CreateDSNConnection και μετά να μεταβιβάσετε παραμέτρους που είναι παρόμοια με την ακόλουθη από την ενέργεια RunCode.
        CreateDSNConnection ("(local)", "pubs", "", "")
  • Όταν χρησιμοποιείτε τη φόρμα εκκίνησης, προσθέστε κώδικα που είναι παρόμοιο με το ακόλουθο στο συμβάν Form_Open .
    Private Sub Form_Open(Cancel As Integer)    If CreateDSNConnection("(local)", "pubs", "", "") Then
    '// All is okay.
    Else
    '// Not okay.
    End If
    End Sub
Σημείωση Αυτή η μέθοδος προϋποθέτει ότι έχετε ήδη δημιουργήσει το SQL Server συνδεδεμένους πίνακες στη βάση δεδομένων της Access, χρησιμοποιώντας την "myDSN" ως το όνομα DSN.
Ιδιότητες

Αναγνωριστικό άρθρου: 892490 - Τελευταία αναθεώρηση: 17 Ιαν 2017 - Αναθεώρηση: 2

Σχόλια