我怀疑你遗漏了我们需要的一些细节。
当您打开第一个表时,系统会提示您登录吗? (这是关键信息)。如果您使用“不同”链接并在这些链接中保存用户 ID/密码,那么您应该不会收到任何 ODBC 提示,因此您可以轻松地使用多个区域。
但是,听起来您有一组链接,并且想要重新指向/重新链接到不同的服务器。这可以工作 - 但如果您看到/允许 ODBC 提示,则不能。
如果您在链接中包含用户 ID/密码,那么您应该能够重新链接(切换)到任一系统。但是,当您这样做时,uid/密码组合都将在同一给定时间处于活动状态。
问题出在哪里,如果您使用错误的登录重新链接,则将使用以前的 uid/密码!事实上,如果您测试登录(即使是错误的登录!),那么将使用第一个合法登录!归根结底,这意味着这里的弱点是当/如果您要求登录,即使登录错误,它也会返回“是”以获得合法登录! (因为 Access 将恢复到以前使用的合法登录)您必须处理此问题。
很可能事情指向您的代码在重新链接之前进行了登录“测试”。我建议您的“测试”登录代码返回 OK,然后执行传递查询以返回数据库名称——如果该数据库名称/服务器错误,则拒绝该登录并且不重新链接。
这里如此关键的是您如何测试新的登录/服务器?而且您绝对不希望出现 ODBC 登录提示 - 因为如果用户取消或输入错误的登录,那么您的重新链接代码将使用之前缓存的登录。
您应该能够重新链接相同的给定表集并将它们指向另一台服务器 - 但您需要确保您使用的登录确实有效。
最后但并非最不重要的:
Access 始终使用无 DSN 连接。唯一的例外是您使用的是系统 DSN。因此,当您创建文件 DSN 并重新链接时,从该点开始的 DSN 将被忽略,并且不会被使用。 (这允许您说将应用程序分发到其他桌面,而无需复制/包含 DSN)。因此,实际上您几乎总是使用无 DSN 连接,如果不是,那么我建议您转储系统 DSN,因为 Access 无法使用此类系统 DSN 中的用户/密码——即使您在其中包含用户/密码DSN 它仍然被忽略。
另外,当您重新链接时,您是否使用了 dbAttachSavePWD - 您不应该这样做,但我会为了测试包括它。
如果您正在使用/允许 ODBC 驱动程序提示用户登录 - 那么您必须消除这种情况并确保您的代码进行登录。