我的公司大量使用SAI,为了从这个系统创建报告,我们使用ODBC连接到数据库。我们目前的设置是区域性的,因此我们为每个区域提供单独的环境。当尝试使用MS ACCESS访问这些环境时,我发现无法链接到不同环境中的表并检索准确的数据。
我可以使用特定的DSN创建指向各种环境的链接。然后我可以访问数据,但是我打开的第一个表,无论它属于哪个区域,都可以正常工作。然而,在此之后,所有表,无论它们属于哪个区域,都使用第一个打开的表中的DSN设置。如果我关闭Access并重新启动,则可以从另一个环境中的数据开始,然后其他环境将工作,但其余数据将反映这些DSN设置。此外,当我查看属性表时,DSN设置应该是正确的。
我还要补充一点,每个区域的表都具有相同的名称。 IE销售表是所有环境中的销售,生产表是所有地区的生产表。因此,当我从多个环境链接到sales表时,需要在MS ACCESS中重命名。
答案 0 :(得分:1)
我会看看上个月回答的SO Question。
它描述了一些强制Access重新链接ODBC表的方法,如果全部失败,则为您提供了一种使用小function that you'll find on my blog以编程方式重新启动数据库的方法。
答案 1 :(得分:1)
我怀疑你遗漏了我们需要的一些细节。
当您打开第一个表时,是否提示您进行登录? (这是关键信息)。如果您使用“不同”链接并在这些链接中保存用户ID /密码,那么您不应该获得任何ODBC提示,因此您可以轻松地使用多个区域。
但是,听起来您有一组链接,并希望重新指向/重新链接到其他服务器。这可以工作 - 但如果你看到/允许ODBC提示,则不行。
如果您在链接中包含用户ID /密码,那么您应该能够重新链接(切换)到任一系统。但是,当你这样做时,那么两个组合的uid /密码组合就会在相同的时间内激活。
事情变得非常糟糕的是,如果您使用不正确的登录重新链接,那么将使用之前的uid /密码!事实上,如果你测试登录(即使是一个糟糕的登录!),那么将使用第一个合法登录!在一天结束时,这意味着这里的弱点是WHEN /如果你要求登录,它将返回“是”进行合法登录即使登录是坏的! (因为Access将恢复到之前使用的合法登录)你必须处理这个问题。
很可能事情指向您的代码在重新链接之前进行登录“测试”。我建议您的“测试”登录代码返回OK,然后执行传递查询以返回数据库名称 - 如果该数据库名称/服务器错误,则拒绝该登录并且不重新链接。
这里关键是你如何测试新的登录/服务器?而且你绝对不希望出现ODBC登录提示 - 因为如果用户取消或输入了错误的登录,那么你的重新链接代码将使用先前的缓存登录。
您应该能够重新链接同一组给定的表并将它们指向另一个服务器 - 但您需要确保您使用的登录确实有效。
最后但并非最不重要: Access ALWAYS使用DSN较少的连接。唯一的例外是您使用的是系统DSN。因此,当您创建文件DSN并重新链接时,DSN FROM THAT点将被忽略,并且不会被使用。 (这允许您说明将应用程序分发到其他桌面而无需复制/包含DSN)。所以实际上你总是使用无DSN连接,如果不是,那么我建议你转储SYSTEM DSN,因为Access不能使用来自这样的系统DSN的USER /密码 - 即使你在其中包含USER /密码DSN它仍然被忽略。
此外,当您重新链接时,您是否使用dbAttachSavePWD - 您不应该这样做,但我会进行测试包括它。
如果您正在使用/允许ODBC驱动程序提示用户进行登录 - 那么您必须消除此问题并确保您的代码执行登录。
答案 2 :(得分:0)
您可能拥有的一个选项(虽然有点长篇大论)是为每个区域创建一个链接到一个区域表的访问数据库。例如,将一个区域欧洲的销售表和生产表放在一个访问数据库中,并将那些来自ASIA的那些放入另一个数据库。
完成此设置后,您可能会发现使用第三个访问数据库链接到另外两个访问数据库要容易得多。
希望这很有用。