我正在与一家小型企业合作,他们使用基于 Access 的数据库来管理工单。该系统已经存在多年,他们有 6-7 台 PC 使用 ISV 的定制软件来访问数据库。数据库通过映射驱动器 (Z:) 连接访问。
几个月前,他们开始间歇性地收到此错误:
未找到数据源名称且未指定默认驱动程序
这导致 ISV 必须连接到数据库并运行修复才能恢复数据库。他们看到的错误更具体一些,表明文件格式已损坏。支持技术人员认为该问题是由网络上的事务失败引起的。为此,我们尝试了几种方法
- 将数据库移至其他主机,以防原始“服务器”电脑出现问题
- 更换了网络交换机
- 开始逐一将客户端从网络中移除,试图隔离问题客户端,但没有取得一致的结果
到目前为止,还没有运气。
我的问题 - 其中一台 PC 是否会关闭其驱动器映射并破坏打开的数据库 - Windows 7 中是否有任何新功能可能会造成阻碍 - 您能否推荐一种更好的方法来找出原因。
答案1
这几乎肯定是 32 位与 64 位 DSN 的问题。要在 64 位环境中使用 32 位 DSN,请转到C:\Windows\SysWoW64\odbcad32.exe
我们的内部应用程序有非常类似的限制。为了避免将来出现此问题,您可能需要安装最新的SQL Server 本机客户端并通过组策略在每台机器上部署 32 位和 64 位 DSN。
答案2
如果您使用 SUBST.exe 命令而不是“NET USE”来映射驱动器,那么与“NET USE”不同,当映射驱动器丢失时,连接将始终重试。请记住,这样做会使不了解 SUBST.exe 命令的人难以取消驱动器映射。当驱动器以这种方式映射时,您不能直接将其与 Windows 爆炸器断开连接……这是行不通的。
就我个人而言,我同意这是 64 位的问题。
请记住,虽然您希望 32 位和 64 位 ODBC DSN 控制面板以某种方式工作,但在某些情况下它们却会做相反的事情。例如:在 64 位系统上尝试添加 64 位“用户 DSN”时,您可能会注意到连接失败,但使用“系统 DSN”却可以工作。这是因为 ODBC 面板实际上是在 64 位 ODBC 控制面板的“用户”选项卡中生成“32 位 DSN”,而它将在“系统”选项卡中生成预期的 64 位 DSN。只要您意识到控制面板可能无法按预期运行,我认为任何配置都不会难倒您。