Cómo crear una conexión sin DSN a SQL Server para las tablas vinculadas en Access

Avanzado: Requiere conocimientos avanzados de codificación, interoperabilidad y multiusuario.


En este artículo sólo se aplica a una base de datos de Microsoft Access (.accdb y .mdb).

INTRODUCCIÓN

Este artículo describe cómo crear una conexión a Microsoft SQL Server para las tablas vinculadas en Microsoft Access que no utiliza un nombre de origen de datos (DSN). Esto también es conocido como conexión sin DSN. Los ejemplos que contiene este artículo se aplican a Microsoft Office Access 2007, Microsoft Office Access 2003 y Microsoft Access 2002.

Más información

Puede utilizar un DSN para crear tablas vinculadas de SQL Server en Microsoft Access. Pero cuando la base de datos se mueve a otro equipo, debe volver a crear el DSN en el equipo. Este procedimiento puede ser problemático cuando haya que realizarla en más de un equipo. Cuando este procedimiento no se realiza correctamente, es podrán que las tablas vinculadas no pueda localizar el DSN. Por lo tanto, es podrán que las tablas vinculadas no pueda conectarse a SQL Server.

Cuando desee crear un vínculo a una tabla de SQL Server, pero no desea codificar un DSN en el cuadro de diálogo Orígenes de datos , utilice uno de los métodos siguientes para crear una conexión sin DSN a SQL Server.

Método 1: Utilice el método CreateTableDef

El método CreateTableDef le permite crear una tabla vinculada. Para utilizar este método, cree un nuevo módulo y, a continuación, agregue la siguiente función AttachDSNLessTable al nuevo módulo.
'//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

Para llamar a la función AttachDSNLessTable , agregue código que es similar a uno de los siguientes ejemplos de código en la macro AutoExec o en el evento Form_Open de formulario de inicio:
  • Cuando se utiliza la macro AutoExec , llamar a la función AttachDSNLessTable y, a continuación, pasar parámetros que son similares a la siguiente de la acción RunCode (EjecutarCódigo).
        AttachDSNLessTable ("authors", "authors", "(local)", "pubs", "", "")
  • Cuando se utiliza el formulario de inicio, agregue código similar al siguiente para el 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: Debe ajustar su lógica de programación cuando se agrega más de una tabla vinculada a la base de datos de Access.

Método 2: Utilizar DAO. Método RegisterDatabase

DAO. RegisterDatabase método le permite crear una conexión de DSN en la macro AutoExec o en el formulario de inicio. Aunque este método no elimina la necesidad de una conexión de DSN, lo ayudará a resolver el problema mediante la creación de la conexión DSN en el código. Para utilizar este método, cree un nuevo módulo y, a continuación, agregue la siguiente función CreateDSNConnection al nuevo módulo.
'//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: Si el método RegisterDatabase se llama otra vez, se actualiza el DSN.

Para llamar a la función CreateDSNConnection , agregue código que es similar a uno de los siguientes ejemplos de código en la macro AutoExec o en el evento Form_Open de formulario de inicio:
  • Cuando se utiliza la macro AutoExec , llamar a la función CreateDSNConnection y, a continuación, pasar parámetros que son similares a la siguiente de la acción RunCode (EjecutarCódigo).
        CreateDSNConnection ("(local)", "pubs", "", "")
  • Cuando se utiliza el formulario de inicio, agregue código similar al siguiente para el 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: Este método supone que ya ha creado las tablas de SQL Server vinculado en la base de datos de Access mediante "myDSN" como el nombre del DSN.
Propiedades

Id. de artículo: 892490 - Última revisión: 9 ene. 2017 - Revisión: 1

Comentarios