如何为 Access 中的链接表创建到 SQL Server 的无 DSN 连接

文章翻译 文章翻译
文章编号: 892490 - 查看本文应用于的产品
高级用户:要求具有高级编码技能、互操作技能和多用户技能。

本文仅适用于 Microsoft Access 数据库(.accdb 和 .mdb)。
展开全部 | 关闭全部

本文内容

简介

本文描述如何为 Microsoft Access 中的链接表创建不使用数据源名称 (DSN) 的到 Microsoft SQL Server 的连接。这种连接也称为无 DSN 连接。本文包含的示例适用于 Microsoft Office Access 2007、Microsoft Office Access 2003 和 Microsoft Access 2002。

更多信息

可以使用 DSN 在 Microsoft Access 中创建链接的 SQL Server 表。但是,在将数据库移动到另一台计算机时,必须在该计算机上重新创建 DSN。当您必须在多台计算机上执行此过程时,此过程可能会有问题。如果未正确执行此过程,则链接表可能无法找到 DSN。因此,链接表可能无法连接到 SQL Server。

如果想要创建指向 SQL Server 表的链接,但是不想在“数据源”对话框中对 DSN 进行硬编码,请使用下列方法之一来创建到 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 函数,请在 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 链接表。

属性

文章编号: 892490 - 最后修改: 2008年8月27日 - 修订: 1.5
这篇文章中的信息适用于:
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 标准版
关键字:?
kbprogramming kbconfig kbdatabase kbhowto kbinfo KB892490
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