3

这个问题与 MS Access 本身(我可以成功构建)中的 dsn-less 连接字符串无关。以下字符串上周在 Windows 7 上从 MS Access 2010 连接到我们的 iSeries 时运行良好。周末,我们的 IT 团队安装了各种防病毒系统,现在该字符串间歇性地工作。但是,这种行为非常特殊,需要一些解释。这是字符串:

ODBC;Driver=iSeries Access ODBC Driver;System=nnn.nnn.nnn.nnn;UID=myuid;PWD=mypwd;DBQ=mylibraryname;Initial Catalog=mylibraryname;MGDSN=0

它组装在一个循环中,该循环遍历连接参数表,动态构建链接表(如果它们已经存在,则首先将它们删除,然后将它们添加到 tabledefs 集合中)。大约有 12 个链接表驻留在两个不同的 iSeries LPAR(“系统”连接参数中指定的两个不同 IP 地址)上。这些表驻留在几个不同的库中,因此参数“DBQ”、“系统”和“初始目录”在每次迭代中都不同。

今天,该循环仅适用于其中一个 LPAR(一个 IP 地址),而另一个我收到错误 3011(“MS Access 数据库引擎找不到对象 MYLIBRARYNAME.TABLENAME...”)。当以下代码行尝试执行时会发生此错误:

CurrentDb().TableDefs.Append tblLinked    'tblLinked is of type TableDef

我可以使用 Windows ODBC 实用程序创建的命名 DSN 使用 ODBC 的 MS Access“外部数据”菜单手动创建链接表对象。我可以使用链接表管理器刷新所有链接表。我只是不能使用 VBA 将链接表添加到一个 IP 地址上的表的表集合中,然后将链接表添加到同一访问会话中的另一个 IP 地址。如果我关闭并重新打开 Access,我可以使用相同的 VBA 创建指向任一系统的链接表。我只是不能随后使用 VBA 创建到另一个 IP 地址的链接表。

我查看了 IBM 的连接参数选项,并添加了 DBQ、Initial Catalog、CONNTYPE 和 LIBVIEW 的参数,上周都不需要这些参数。我运行了压缩/修复,然后经过更多研究创建了一个新数据库并导入了所有对象,然后将数据库转换为 .mdb 格式(Access 2007)并运行压缩/修复。没有帮助。

疯狂的是,如果我关闭 Access 应用程序并重新打开,我的代码可以将 tabledef 附加到首先提到的任何 ip 地址,但是任何尝试附加链接到另一个 ip 地址的 tabledef 的尝试都会失败,并出现错误 3011。每次我关闭并重新打开,我可以链接到我想要的任何 IP 地址,但不能链接到另一个。这是 100% 可重复的。需要明确的是,我必须关闭 Access 应用程序,而不仅仅是当前数据库。重新打开后,我可以连接到我想要的任何 IP 地址,但不能连接到另一个。

该代码上周有效,但今天无效(长周末后回到办公室的第一天)。

我决定将 ODBC tabledef 附加到 tabledefs 集合会导致 Access 验证表的存在,但不是通过使用连接参数。相反, .append 方法触发了一个验证过程,该过程使用一些持续存在但我找不到它来重置其值的设置。连接信息如何被缓存而不被连接字符串重置?

谁能指出我下一步可能看的地方?

4

0 回答 0