如何在 Access 中建立一個 DSN 的連接到 SQL Server,連結資料表

文章翻譯 文章翻譯
文章編號: 892490 - 檢視此文章適用的產品。
進階: 須具備專家編碼、 互通性,與多使用者技能。

本文只適用於 Microsoft Access 資料庫 (.accdb 和.mdb)。
全部展開 | 全部摺疊

在此頁中

簡介

本文將告訴您,如何在不使用資料來源名稱 (DSN) 的 Access 中建立連結資料表的 Microsoft SQL Server 連接。這也稱為是一個 DSN 的 連接。本文包含範例套用到 Microsoft Office Access 2007、 Microsoft Office Access 2003 及 Microsoft Access 2002。

其他相關資訊

您可以使用 [DSN] 來在 Microsoft Access 中建立連結的 SQL Server 資料表。但是,當您將資料庫移到另一台電腦時,您必須重新建立資料來源名稱,在這台電腦上。當您有一個以上的電腦上執行時,此程序可能有問題。當此程序執行正確時,連結的資料表可能無法找出資料來源名稱。 因此,連結的資料表可能無法連線到 SQL Server。

當您想要建立 SQL Server 資料表的連結,但不要用硬式編碼 的資料來源] 對話方塊中的資料來源名稱請使用下列方法之一來建立到 SQL Server 的 DSN 的連接。

方法 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 函式,新增類似於其中一個下列的程式碼範例在 自動執行 巨集或啟動表單 Form_Open 事件中的程式碼:
  • 當您使用 [自動執行 巨集呼叫了 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 連線。雖然這個方法並不會移除的 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 方法、 資料來源名稱會更新。

若要呼叫 CreateDSNConnection 函式,加入類似下列的程式碼範例在 自動執行 巨集或在啟動表單 Form_Open 事件其中的程式碼:
  • 當您使用 [自動執行 巨集呼叫了 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 」 作為資料來源名稱名稱。

屬性

文章編號: 892490 - 上次校閱: 2007年3月26日 - 版次: 1.6
這篇文章中的資訊適用於:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
關鍵字:?
kbmt kbprogramming kbconfig kbdatabase kbhowto kbinfo KB892490 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:892490
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com