将链接表添加到Access 2003,同时在MDB中保留ODBC连接信息

时间:2010-04-27 13:09:53

标签: ms-access odbc dsn

我有一个Access 2003数据库MDB,其中所有表都作为SQL Server 2005中的链接表存在.MDB文件包含指向正确的SQL Server和登录凭据(可信连接)的所有ODBC信息。

我想要做的是向MDB文件添加一个新的链接表但是我不知道如何指定ODBC连接信息。当我尝试添加新的链接表时,会不断提示您找到或创建DSN文件。我不想在每台机器上创建一个新的DSN条目,而是希望存储在Access MDB文件中的所有信息。

在现有数据库中,我可以“悬停”在表名称上,并将ODBC连接信息视为工具提示。我需要做的就是使用相同的连接信息添加另一个链接表。

我可以访问表所链接的SQL Server。我已经创建了我想要添加的新表。我只需要找到一种方法来链接它。

3 个答案:

答案 0 :(得分:2)

对于它的价值,我很懒。我在我的开发机器上保留了一个DSN,并使用它来创建新的链接表。然后,在将前端分发给最终用户之前,我运行Doug Steele's code to convert the links to dsnless connections

答案 1 :(得分:1)

您可以使用现有表格中的连接字符串,也可以执行以下操作:

''This is a basic connection string, you may need to consider password and so forth
cn = "ODBC;DSN=TheDSNName;Trusted_Connection=Yes;APP=Microsoft Office 2010;DATABASE=TheDatabaseName;"

有一些是连接表:

sLocalName = "TABLE_SCHEMA" & "_" & "TABLE_NAME"

With CurrentDb
    If DLookup("Name", "MSysObjects", "Name='" & sLocalName & "'") <> vbNullString Then
        If .TableDefs(sLocalName).Connect <> cn Then
            .TableDefs(sLocalName).Connect = cn
            .TableDefs(sLocalName).RefreshLink
        End If
    Else
        ''If the table does not have a unique index, you will neded to create one
        ''if you wish to update.
        Set tdf = .CreateTableDef(sLocalName)
        tdf.Connect = cn
        tdf.SourceTableName = "TABLE_NAME"
        .TableDefs.Append tdf
        .TableDefs.Refresh
    End If
End With

如果表没有唯一索引

,这将生成一个消息框
  DoCmd.TransferDatabase acLink, "ODBC Database", cn, acTable, "TABLE_NAME", sLocalName

答案 2 :(得分:0)

我能够成功添加表格,并想详细说明这里的步骤。

  1. 我通过点击Access中的“新建”添加了新表,并选择了“链接表”
  2. 当我提示链接文件对话框时,我从文件类型列表框中选择了ODBC
  3. 我创建了一个新的DSN项目(仅用于初始链接到表格)
  4. 继续创建DSN,您将遵循链接到在SQL Server中创建的表的过程
  5. 表格应显示在Access
  6. 然后我在代码模块中创建了以下子例程。它本质上遍历Access中具有ODBC连接的所有表,并将正确的ODBC连接信息设置到表定义中。您可以删除之前创建的DSN,因为不再需要它。

    Public Sub RefreshODBCLinks()
    
        Dim connString As String
        connString = "ODBC;DRIVER=SQL Server Native Client 10.0;" & _
                 "SERVER=<SQL SERVER NAME>;UID=<USER NAME>;" & _
                 "Trusted_Connection=Yes;" & _
                 "APP=<APP NAME>;DATABASE=<DATABASE NAME>"
    
        Dim db As DAO.Database
        Dim tb As DAO.TableDef
        Set db = CurrentDb
        For Each tb In db.TableDefs
        If Left(tb.Connect, 4) = "ODBC" Then
            tb.Connect = connString
            tb.RefreshLink
            Debug.Print "Refreshed ODBC table " & tb.Name
        End If
        Next tb
        Set db = Nothing
    
    End Sub
    

    注意......要执行上面的SubRoutine,我只需将其名称输入Access代码模块中的“立即”窗口即可。您还可以创建一个执行此例程的宏,然后无论何时创建新表,您都可以运行宏。

    感谢“Remou”的回答和帮助!

    P.S。如果您对连接字符串中的APP=<APP NAME>感兴趣,请查看本文。 http://johnnycoder.com/blog/2006/10/24/take-advantage-of-application-name/