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

Posted

技术标签:

【中文标题】将链接表添加到 Access 2003,同时在 MDB 中保留 ODBC 连接信息【英文标题】:Adding linked table to Access 2003 while keeping ODBC connection info in MDB 【发布时间】:2010-04-27 13:09:52 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

我看到其他人在各种帖子中提到了这种技术。听起来是一个好主意。谢谢。【参考方案2】:

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

''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

【讨论】:

如果 MDB 文件已经链接到现有表,这是否意味着每次打开 MDB 文件时都必须运行与您类似的代码?如果是这样,代码必须已经存在于数据库中的某个位置。 不,您不需要每次都运行代码,仅当您希望添加或更改表时。 我能够添加表并正确设置 ODBC 连接字符串。但是,在 SQL Server 中创建表时,我设置了主键和标识,但索引没有传播到 Access。当尝试在 Access 中附加到表时,我收到错误消息,指出不存在标识列。【参考方案3】:

我能够成功添加表格,并想在此处详细说明步骤。

    我通过在 Access 中单击“新建”并选择“链接表”添加了新表 当提示链接文件对话框时,我从文件类型列表框中选择了 ODBC 我创建了一个新的 DSN 项(仅用于初始链接到表) 继续创建 DSN,您将遵循链接到 SQL Server 中创建的表的过程 表应显示在 Access 中

然后我在代码模块中创建了以下子例程。它本质上循环访问所有具有 ODBC 连接的 Access 表,并将正确的 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

注意...要执行上述子例程,我只需在 Access 代码模块中的“立即”窗口中输入它的名称。您还可以创建一个执行此例程的宏,然后在创建新表时运行该宏。

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

附:如果您对连接字符串中的APP=&lt;APP NAME&gt; 及其用途感兴趣,请查看本文。 http://johnnycoder.com/blog/2006/10/24/take-advantage-of-application-name/

【讨论】:

以上是关于将链接表添加到 Access 2003,同时在 MDB 中保留 ODBC 连接信息的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Access 2003 数据库链接到 MySQL 数据库

添加到基于表/查询的 Access 组合框

使用 Oracle 的 ODBC 链接表登录 Access 2007

如何将字段添加到 Access 2003 查询以显示基于另一个字段的结果?

计数 MS-ACCESS 2003 列中的图像

在 Access 中删除带有 SQL 链接表的登录提示