【问题标题】:Access Caching ODBC connection settings访问缓存 ODBC 连接设置
【发布时间】:2009-03-05 18:49:52
【问题描述】:

我的公司大量使用 SAI,为了从这个系统创建报告,我们使用 ODBC 连接到数据库。我们目前的设置是区域性的,因此我们为每个区域设置了单独的环境。当尝试使用 MS ACCESS 访问这些环境时,我发现我无法链接到不同环境中的表并检索准确的数据。

我可以使用特定的 DSN 创建指向各种环境的链接。然后我可以访问数据,但是我打开的第一个表,无论它属于哪个区域,都可以正常工作。然而,在那之后,所有的表,无论它们属于哪个区域,都使用打开的第一个表中的 DSN 设置。如果我关闭 Access 并重新启动,我可以从另一个环境中的数据开始,然后这些数据将起作用,但是其余数据将反映这些 DSN 设置。此外,当我查看属性表时,DSN 设置应如此。

我还要补充一点,每个区域的表都具有相同的名称。即销售表是所有环境的销售,生产表是所有地区的生产表。因此,当我从多个环境链接到销售表时,需要在 MS ACCESS 中重命名。

【问题讨论】:

    标签: ms-access odbc


    【解决方案1】:

    我会看看这个 SO Question 上个月回答的问题。

    它描述了一些强制 Access 重新链接 ODBC 表的方法,如果所有方法都失败了,它会为您提供一种使用小型 function that you'll find on my blog 以编程方式重新启动数据库的方法。

    【讨论】:

      【解决方案2】:

      我怀疑你遗漏了我们需要的一些细节。

      当您打开第一个表时,系统会提示您登录吗? (这是关键信息)。如果您使用“不同”链接并在这些链接中保存用户 ID/密码,那么您应该不会收到任何 ODBC 提示,因此您可以轻松地使用多个区域。

      但是,听起来您有一组链接,并且想要重新指向/重新链接到不同的服务器。这可以工作 - 但如果您看到/允许 ODBC 提示,则不能。

      如果您在链接中包含用户 ID/密码,那么您应该能够重新链接(切换)到任一系统。但是,当您这样做时,uid/密码组合都将在同一给定时间处于活动状态。

      问题出在哪里,如果您使用错误的登录重新链接,则将使用以前的 uid/密码!事实上,如果您测试登录(即使是错误的登录!),那么将使用第一个合法登录!归根结底,这意味着这里的弱点是当/如果您要求登录,即使登录错误,它也会返回“是”以获得合法登录! (因为 Access 将恢复到以前使用的合法登录)您必须处理此问题。

      很可能事情指向您的代码在重新链接之前进行了登录“测试”。我建议您的“测试”登录代码返回 OK,然后执行传递查询以返回数据库名称——如果该数据库名称/服务器错误,则拒绝该登录并且不重新链接。

      这里如此关键的是您如何测试新的登录/服务器?而且您绝对不希望出现 ODBC 登录提示 - 因为如果用户取消或输入错误的登录,那么您的重新链接代码将使用之前缓存的登录。

      您应该能够重新链接相同的给定表集并将它们指向另一台服务器 - 但您需要确保您使用的登录确实有效。

      最后但并非最不重要的: Access 始终使用无 DSN 连接。唯一的例外是您使用的是系统 DSN。因此,当您创建文件 DSN 并重新链接时,从该点开始的 DSN 将被忽略,并且不会被使用。 (这允许您说将应用程序分发到其他桌面,而无需复制/包含 DSN)。因此,实际上您几乎总是使用无 DSN 连接,如果不是,那么我建议您转储系统 DSN,因为 Access 无法使用此类系统 DSN 中的用户/密码——即使您在其中包含用户/密码DSN 它仍然被忽略。

      另外,当您重新链接时,您是否使用了 dbAttachSavePWD - 您不应该这样做,但我会为了测试包括它。

      如果您正在使用/允许 ODBC 驱动程序提示用户登录 - 那么您必须消除这种情况并确保您的代码进行登录。

      【讨论】:

        【解决方案3】:

        您可能拥有的一个选项(虽然有点啰嗦)是为每个区域创建一个访问数据库,该数据库链接到一个区域表。例如,将欧洲地区的销售表和生产表放在一个访问数据库中,并将来自亚洲的销售表和生产表放在另一个数据库中。

        完成此设置后,您可能会发现使用第三个访问数据库链接到其他两个访问数据库要容易得多。

        希望这是有用的。

        【讨论】:

        • 是的,很啰嗦,Access 也不喜欢那个解决方案。
        • 哦,值得一试。那么可能不得不求助于静态表。
        • 我先尝试 Sql Server。看起来很有希望。我只是对sql server的经验很少!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-29
        • 1970-01-01
        • 2015-07-26
        • 1970-01-01
        相关资源
        最近更新 更多