每
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)具有相同的名称
有解决方法吗?
谢谢, 乍得。
答案 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(后端)中,所以这是一个很好的停止间隙)。子>