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

Office 2003 支援已結束

Microsoft 於 2014 年 4 月 8 日結束對 Office 2003 的支援。此變更已影響您的軟體更新和安全性選項。 瞭解這對您的意義為何且如何持續受保護。

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本: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 passwordFunction 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 FunctionAttachDSNLessTable_Err:        AttachDSNLessTable = False    MsgBox "AttachDSNLessTable encountered an unexpected error: " & Err.DescriptionEnd 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 IfEnd 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 passwordFunction 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 FunctionCreateDSNConnection_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 IfEnd Sub
附註此方法會假設您已經建立連結的 SQL Server 資料表在 Access 資料庫中利用 myDSN 」 作為資料來源名稱名稱。
ACC2002 ACC2003 Jet ODBC SQL Server VB VBA

警告:本文為自動翻譯

內容

文章識別碼:892490 - 最後檢閱時間:03/26/2007 23:16:09 - 修訂: 1.6

Microsoft Office Access 2007, Microsoft Office Access 2003, Microsoft Access 2002 Standard Edition

  • kbmt kbprogramming kbconfig kbdatabase kbhowto kbinfo KB892490 KbMtzh
意見反應