Access에서 연결된 테이블에 대한 DSN이 없는 SQL Server 연결을 만드는 방법

고급: 전문적인 코드 작성, 상호 운용성 및 다중 사용자 기술이 필요합니다.


이 문서의 내용은 Microsoft Access 데이터베이스(.accdb 및 .mdb)에만 적용됩니다.

소개

이 문서에서는 Microsoft Access에서 연결된 테이블에 대한 DSN(데이터 원본 이름)을 사용하지 않는 Microsoft SQL Server 연결을 만드는 방법을 설명합니다. 이 연결을 DSN이 없는 연결이라고도 합니다. 이 문서에 포함된 예제는 Microsoft Office Access 2007, Microsoft Office Access 2003 및 Microsoft Access 2002에 적용됩니다.

추가 정보

Microsoft Access에서 DSN을 사용하여 연결된 SQL Server 테이블을 만들 수 있습니다. 그러나 데이터베이스를 다른 컴퓨터로 이동하는 경우 해당 컴퓨터에서 DSN을 다시 만들어야 합니다. 이 절차는 두 대 이상의 컴퓨터에서 수행해야 하는 경우 문제가 될 수 있습니다. 이 절차가 올바르게 수행되지 않으면 연결된 테이블이 DSN을 찾지 못할 수 있으므로 SQL Server에 연결하지 못할 수 있습니다.

SQL Server 테이블에 대한 연결을 만들려고 하지만 데이터 원본 대화 상자에서 DSN을 하드 코드하지 않으려는 경우 다음 방법 중 하나를 사용하여 DSN이 없는 SQL Server 연결을 만듭니다.

방법 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 메서드를 사용하여 AutoExec 매크로나 시작 폼에서 DSN 연결을 만들 수 있습니다. 이 메서드가 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
참고 이 메서드는 "myDSN"을 DSN 이름으로 사용하여 Access 데이터베이스에서 SQL Server의 연결된 테이블을 이미 만들었다고 가정합니다.
속성

문서 ID: 892490 - 마지막 검토: 2008. 11. 12. - 수정: 1

피드백