1

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

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

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

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

4

3 回答 3

2

为了它的价值,我很懒惰。我在我的开发机器上保留了一个 DSN,并使用它来创建新的链接表。然后我运行Doug Steele 的代码,在将前端分发给最终用户之前将链接转换为 dsnless 连接。

于 2010-04-28T00:36:18.093 回答
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
于 2010-04-27T13:21:01.703 回答
0

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

  1. 我通过在 Access 中单击“新建”并选择“链接表”添加了新表
  2. 当提示链接文件对话框时,我从文件类型列表框中选择了 ODBC
  3. 我创建了一个新的 DSN 项目(仅用于初始链接到表)
  4. 继续创建 DSN,您将遵循链接到 SQL Server 中创建的表的过程
  5. 表应显示在 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”的回答和帮助!

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

于 2010-04-27T15:08:13.983 回答