在无DSN连接的连接字符串中指定Microsoft ODBC for Oracle(32/64位)的版本(Access 2013(32位))

时间:2016-10-10 19:56:27

标签: oracle ms-access access-vba odbc ms-access-2013

http://www.accessmvp.com/djsteele/DSNLessLinks.html

我尝试使用无DSN连接替换Access中DSN创建的表格def。

没有运气从微软尝试驱动程序:

Microsoft ODBC for Oracle

因为这个具体问题:

https://support.microsoft.com/en-us/kb/942976

在Windows 7 64位上,如果要使用 Access 2013 32位,则必须使用32位ODBC管理面板管理ODBC驱动程序(DSN)。

然而,这并没有解决问题,因为我首先尝试去DSN-less

我认为连接不起作用的原因是Windows是有帮助的"当我使用它作为我的连接字符串时选择64位版本的驱动程序:

FileExtensionContentTypeProvider

问题是我无法指定我想要32位版本的驱动程序,因为两个版本(32和64)具有相同的名称

有解决方法吗?

谢谢, 乍得。

3 个答案:

答案 0 :(得分:1)

您可以在注册表中检查的驱动程序的位置。如果是x86(32位),请检查HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC\ODBCINST.INI\Microsoft ODBC for Oracle\Driver。最有可能的值应为%WINDIR%\system32\msorcl32.dll

现在,如果您运行 x86 应用程序,例如您的MS Access文件夹%WINDIR%\system32\会自动重定向到%WINDIR%\SysWoW64\(请参阅WoW64),那么您(或MS Access)将在文件夹msorcl32.dll中找到文件c:\Windows\SysWOW64\

原则上对于x64,您必须检查注册表值HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Microsoft ODBC for Oracle\Driver,但 Microsoft ODBC驱动程序for Oracle为deprecated并且仅适用于32位!如果您需要64位版本,您必须下载并安装ODBC驱动程序from Oracle

使用32位ODBC驱动程序,您的32位访问应该没有任何问题。

答案 1 :(得分:0)

没有令人困惑的问题,因为“进程内”x32程序只会加载和使用x32驱动程序。 “进程内”x64位程序只会加载和使用x64驱动程序。它们都可以具有相同的名称,但它们已安装在操作系统的不同位置。

如果您阅读了链接文章,那么简单的解决方案就是始终启动正确版本的ODBC管理器。最简单的方法是从访问内部创建链接,因为访问将始终启动正确的ODBC管理器。

在一天结束时,由于您使用DSN较少,这进一步意味着您使用的链接与您的问题和问题无关。

因此,虽然驱动程序可能具有相同的名称,但操作系统和软件只能使用相同的位大小的软件,因此将在您的情况下使用。

您要检查的唯一问题是在Access中您希望从导入启动外部数据选项卡并链接ODBC管理器。此时,您使用该管理器将单个表链接到oracle,然后访问将获取(复制)该连接字符串。并且您注意到如果没有显示oracle驱动程序,那么您必须安装oracle驱动程序(但可能已经存在oracle驱动程序)。

然后在验证链接是否有效之后,只需按ctrl-g跳转到调试窗口,然后使用以下命令显示连接字符串设置:

? currentdb.TableDefs("我刚刚链接的表#34;)。连接

然后您会看到使用的连接字符串,并显示oracle驱动器的名称/语法 - 这就是您在连接字符串中使用的内容。

我还应该指出,当从Access启动ODBC管理器时,“默认”选项卡是“文件数据源” - 这将始终在Access中创建一个DSN较少的连接。因此,默认情况下,Access将始终使用并创建无DSN连接。文件数据源仅在创建时使用。创建链接表之后,您可以将数据库移动到另一台计算机,并且由于默认情况下使用DSN链接访问,表链接将继续正常工作(因此信息被“复制”到表def连接字符串对于该链接表 - 通过ODBC面板保存的原始文件数据源将被忽略并且不被使用。

底线: 这些文章的所有链接无关紧要,不是您的问题或问题。您只需使用Access to oracle中的GUI创建链接表。如果可行,那么只需按照上面的内容查看该链接表的连接字符串,它将显示/显示您需要使用的正确驱动程序字符串。

答案 2 :(得分:0)

以下是问题及其解决方法:

可能在Access 97(.mdb)中启动的旧系统,当前处于Access 2013(.accdb)格式。 (我们预算不会在明年之前对系统进行重新平台化)

Oracle数据源有数百个链接的ODBC表,实际使用的只有少数几个。只有15个表被直接使用或随后被其他.accdb数据库链接。

问题的根源是使用现在缺少的DSN,丢失或过期的用户ID或密码错误创建了四个表。

用户在其中一个进程中会看到“ODBC链接失败”消息,并且必须通过表的名称转到链接表管理器和拼图,以确定要重新链接的表。 (通常他们会选择所有200个)。

然后他们会被提示更新DSN / UID / PWD。

当然,当这样做时, Access 2013不会将该信息保存到tabledefs ...所以每次用户尝试再次运行他们的进程时,他们都会看到ODBC失败再次留言。

解决方案删除并重新添加四个链接表和最新的DSN。

我还在主窗体上添加了一个按钮,它们通过缩短的ODBC链接表列表(只有15个)并在表格def上为它们运行TableDef(_TABLENAME_).RefreshLink

感谢Albert和Wernfried的见解。

(我希望成为团队的一员,在明年将HTML 5中的前端重新构建系统以存在于SQL Server和/或Oracle(后端)中,所以这是一个很好的停止间隙)。