Come creare una connessione senza DSN di SQL Server per le tabelle collegate in Access

Avanzate: Richiede competenze multiutente, interoperabilità e la codifica degli esperti.


In questo articolo si applica solo ai database di Microsoft Access (file con estensione accdb e mdb).

INTRODUZIONE

In questo articolo viene descritto come creare una connessione a Microsoft SQL Server per le tabelle collegate in Microsoft Access che non utilizza un nome origine dati (DSN). È anche noto come un DSN senza connessione. Gli esempi contenute in questo articolo si applicano a Microsoft Office Access 2007, in Microsoft Office Access 2003 e in Microsoft Access 2002.

Ulteriori informazioni

È possibile utilizzare un DSN per creare tabelle collegate di SQL Server in Microsoft Access. Ma quando si sposta il database a un altro computer, è necessario ricreare il DSN su tale computer. Questa procedura potrebbe essere problematica quando è necessario eseguirla in uno o più computer. Durante questa procedura non viene eseguita correttamente, le tabelle collegate non potrebbero essere possibile individuare il DSN. Pertanto, le tabelle collegate non potrebbero essere possibile connettersi a SQL Server.

Quando si desidera creare un collegamento a una tabella di SQL Server, ma non si desidera codificare un DSN su Origini dati nella finestra di dialogo, utilizzare uno dei seguenti metodi per creare una connessione senza DSN di SQL Server.

Metodo 1: Utilizzare il metodo CreateTableDef

Il metodo CreateTableDef consente di creare una tabella collegata. Per utilizzare questo metodo, creare un nuovo modulo e quindi aggiungere la seguente funzione AttachDSNLessTable per il nuovo modulo.

'//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

Per chiamare la funzione AttachDSNLessTable , aggiungere codice simile a uno dei seguenti esempi di codice nella macro AutoExec o nell'evento avvio Form_Open modulo:

  • Quando si utilizza la macro AutoExec , chiamare la funzione AttachDSNLessTable e quindi passare i parametri che sono simili ai seguenti dall'azione EseguiCodice.

        AttachDSNLessTable ("authors", "authors", "(local)", "pubs", "", "")
  • Quando si utilizza il form di avvio, aggiungere codice simile al seguente all'evento 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

    Nota: Quando si aggiunta più di una tabella collegata al database di Access, è necessario modificare la logica di programmazione.

Metodo 2: Utilizzare DAO. Metodo RegisterDatabase

DAO. RegisterDatabase metodo consente di creare una connessione DSN nella macro AutoExec o nella maschera di avvio. Sebbene questo metodo non rimuove il requisito per una connessione DSN, può consentire di risolvere il problema creando la connessione DSN nel codice. Per utilizzare questo metodo, creare un nuovo modulo e quindi aggiungere la seguente funzione CreateDSNConnection per il nuovo modulo.

'//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

Nota: Se viene nuovamente chiamato il metodo RegisterDatabase , viene aggiornato il DSN.

Per chiamare la funzione CreateDSNConnection , aggiungere codice simile a uno dei seguenti esempi di codice nella macro AutoExec o nell'evento avvio Form_Open modulo:

  • Quando si utilizza la macro AutoExec , chiamare la funzione CreateDSNConnection e quindi passare i parametri che sono simili ai seguenti dall'azione EseguiCodice.

        CreateDSNConnection ("(local)", "pubs", "", "")
  • Quando si utilizza il form di avvio, aggiungere codice simile al seguente all'evento Form_Open .

    Private Sub Form_Open(Cancel As Integer)
    If CreateDSNConnection("(local)", "pubs", "", "") Then
    '// All is okay.
    Else
    '// Not okay.
    End If
    End Sub

Nota: Questo metodo presuppone che le tabelle collegate di SQL Server è già stato creato nel database di Access utilizzando "myDSN" come nome del DSN.

Serve aiuto?

Amplia le tue competenze
Esplora i corsi di formazione
Ottieni in anticipo le nuove caratteristiche
Partecipa a Microsoft Insider

Queste informazioni sono risultate utili?

Grazie per il feedback!

Grazie per il tuo feedback! Potrebbe essere utile metterti in contatto con uno dei nostri operatori del supporto di Office.

×