【发布时间】:2018-09-18 16:18:56
【问题描述】:
在寻找应该很容易的东西时遇到问题。
无论如何,目前我们的访问数据库已将表链接到不同的服务器。我需要升级到新的服务器名称和数据库名称。我试过了,效果很好。
最终用户测试并说我设置的 ODBC 连接失败。不知道为什么这样做。
任何帮助都会很棒。
【问题讨论】:
-
是否在您的 PC 上为新服务器和新链接表设置了具有新名称的新 DSN?是否在用户的 PC 上进行了同样的操作?
在寻找应该很容易的东西时遇到问题。
无论如何,目前我们的访问数据库已将表链接到不同的服务器。我需要升级到新的服务器名称和数据库名称。我试过了,效果很好。
最终用户测试并说我设置的 ODBC 连接失败。不知道为什么这样做。
任何帮助都会很棒。
【问题讨论】:
默认情况下访问使用无 DSN 连接。
所以你需要启动链接表管理器。如果您按照默认提示创建 DSN(即 FILE dsn),则当 Access 链接表时,它们将转换为无 DSN 链接。
这意味着: 您不需要在启动时运行一些 VBA 代码。
您不需要创建没有 DSN 的连接,因为 Access 默认会创建和使用 DSN 链接。
您不必在每台计算机上设置 DSN。
所以只需启动链接表管理器。获取在您的计算机上工作的链接。一旦您确定链接正常工作,通常下一步就是创建已编译的 accDE。
在上面,以及可选的编译到 accDE 之后(如果你一直在使用的话),那么你可以简单地将新的前端分发到每个工作站,一切都应该很好。
您“可以”选择设置一些 VBA 代码来重新链接,但这不是必需的。
编辑: 这里需要的只是单击鼠标,然后输入 FILE dsn 的名称。 请记住,链接后访问不需要这个。 请记住访问将为您创建无 DSN 连接。 请记住,您不需要在目标计算机上复制或设置 DSN。
步骤如下:
单击 ODBC 按钮 - 功能区 - 外部数据选项卡
我们要链接到 sql server,而不是导入,所以:
现在这可能会绊倒用户,因为经常使用 windows 10,以下文件夹被锁定 - 你没有管理员权限,所以点击新建,不要使用这个默认文件夹,除非你以“管理员”身份启动访问",而你可能没有。所以打新:
现在选择您的 SQL 驱动程序。我使用旧的“sql 驱动程序”。如果您使用更新和更新的数据类型,那么您希望选择“native 11”或更高版本的驱动程序。但是,默认情况下,每个工作站上都没有安装这个驱动程序 - 但 sql 是。
所以浏览到我的文档,输入名称并保存 比如这个:
你现在回到这个对话框:
我们现在准备开始输入连接信息:
完成:
现在进行描述 - 我们不在乎!!!
但是,对于服务器名称,您必须输入
SQL 实例的服务器名称\名称。
如果您在本地运行 SQL express,则 localhost 可以用作服务器名称,而 sql server 的默认值是 SQLEXPRESS。您确实需要 sql 实例的名称和服务器名称(在我的示例中,localhost 是名称,但可以是 server01\SQLEXPRESS 或其他名称)
输入您的登录名+密码。 如果您使用“Windows 身份验证”,则无需登录。
确保您选择/设置了正确的数据库。如果该框显示为灰色,则您仅有权使用无法更改的默认选项。
现在点击下一步
现在选择您的桌子。不要忘记单击/检查“保存密码”选项
这就是屏幕截图。 结果是一个 DSN-LESS 连接。
========= 编辑2: 对于 EXISTING 表,并将它们指向新服务器?
现在请确保您选择新位置的提示。 (此选项强制 + 允许您选择 NEW 或 将现有表链接到的不同服务器。
此时,您现在遵循 与上述完全相同的步骤来创建一个新的 链接,但这会让你链接+点 到现有链接的不同服务器 表格。
【讨论】:
如果最终用户的 PC 上没有像您一样在其 PC 上设置 ODBC 数据源名称 (DSN),则连接可能会失败。
为了克服这个要求,我通常在标准模块中使用一些这样的代码
Const MY_CONNECTION As String = "ODBC;DRIVER={SQL Server};SERVER=TheServerName;DATABASE=TheDatabaseName;Trusted_Connection=Yes"
Public Sub ReConnect()
Dim tdf As TableDef ' for linked tables
Dim qdf As QueryDef ' for pass through queries
With CurrentDb
For Each tdf In .TableDefs
With tdf
If (.Attributes And dbAttachedODBC) = dbAttachedODBC Then
.Connect = MY_CONNECTION
.RefreshLink
End If
End With
Next
For Each qdf In .QueryDefs
With qdf
If .Type = dbQSQLPassThrough Or .Type = dbQSPTBulk Then
.Connect = MY_CONNECTION
End If
.Close
End With
Next
End With
End Sub
我在分发 Access 前端之前手动运行此过程。
【讨论】: