2016-10-10 163 views
0

在连接字符串指定为Oracle(32/64位)微软ODBC的版本DSN-less连接(访问2013(32位))

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

我已经尝试更换DSN-使用无DSN连接在Access中创建表格定义。

没有运气试图从微软的驱动程序:因为这个具体问题

微软ODBC的Oracle

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

在Windows 7 64位,你有使用32位ODBC管理面板管理ODBC驱动程序(DSN),如果您想使用Access 2013 32位

但是,这并没有解决问题,因为我试图走在无DSN首先。

我假定连接不工作的原因是,Windows是“有益”选择驱动器的64位版本时,我用这个作为我的连接字符串:

strConnectionString = _ 
    "ODBC;DRIVER={Microsoft ODBC for Oracle};" & _ 
    "Server=" & ServerName & ";" & _ 
    "UID=" & UID & ";" & _ 
    "PWD=" & PWD & ";" 

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

有没有办法解决这个问题?

谢谢, 乍得。

回答

0

这里的问题,它是如何解决:那大概开始在Access 97

遗留系统(.mdb)中当前正在访问2013(.ACCDB)格式。 (我们没有为在明年之前重新平台系统的预算)

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


问题的根源是,表四一直在使用或者是现在下落不明DSN,一个丢失或过期的用户ID或密码错误产生。

用户在他们的一个进程中会看到“ODBC链接失败”消息,必须转到链接表管理器并通过表名查找要重新链接的链接。(通常他们会选择全部200个)。

然后,他们会得到提示更新DSN/UID/PWD。

当然,在这样做的时候,Access 2013并没有将这些信息保存到tabledefs ...所以每当用户再次尝试运行他们的进程时,他们都会再次看到ODBC失败消息。

解决方案下降和与上最新DSN重新添加 4个连接的表。

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


谢谢都阿尔伯特和Wernfried的见解。

(我希望是replatforms系统存在的所有SQL Server中和/或团队的一部分,甲骨文(后端),在明年HTML 5的前端,所以这是一个好止损间隙)。

0

没有混淆的问题,因为“进程内”x32程序只会加载和使用x32驱动程序。而一个“正在进行中”的x64位程序只会加载和使用x64驱动程序。它们都可以具有相同的名称,但它们已安装并位于操作系统的不同位置。

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

在一天结束时,由于您使用DSN较少,那么这进一步意味着您使用的链接对您的问题和问题没有影响。

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

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

再经过核实该链接的作品,然后只要按下Ctrl-G跳转到调试窗口,并用这个命令显示连接字符串设置:

? currentdb.TableDefs(“我刚刚链接的表”)连接

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

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

底线: 所有这些链接指向那些文章并不重要,也不是您的问题或者问题,你只需要使用Access中的GUI创建一个链接表,如果这样,那么只需按照上面的链接表查看连接字符串,它就会显示/显示你需要的正确驱动字符串使用

+0

当创建与“外部数据”功能区中的“ODBC数据库”选项的文件DSN ...如果我使用Microsoft ODBC对Oracle驱动程序下面是错误: “保留错误(-7778) ;这个错误没有消息。“ 如果我使用Oracle驱动程序(instantclient_12_1中的Oracle),它不会连接。 'ODBC - 调用失败。 指定的驱动程序不能被加载由于系统错误127:指定的程序无法找到(在Oracle instantclient_12_1; **路径驱动程序DLL **)。 (#160)' 只有机器dsns似乎工作。 –

+0

从Access启动ODBC面板(这可以确保您始终使用正确的ODBC设置屏幕,我将从其站点删除并重新安装x86 oracle驱动程序,并再次尝试重新链接表格。 DSN无法正常工作,我会尝试退出Access,然后右键单击Access快捷方式,然后选择以管理员身份运行,然后再次尝试ODBC设置,如上所述,请尝试下载并重新安装Oracle驱动程序。应该没有关系 - 但“文件”意味着一个文件被保存 - 正如我指出的文件是更好,因为它创建一个DSN连接总是 –

+0

谢谢。正如上面Wernfried所述,我采取了不同的方法利用我需要克服的一个问题是重新链接TableDef时出现3151错误,Access似乎在链接表管理器中弹出DSN选择对话框,然后调用ODBC驱动程序打开自己的对话框UID/PWD。我似乎无法让第二部分工作。它给了我一个3146. –

1

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

现在,如果你遇到一个应用像您的MS Access文件夹%WINDIR%\system32\被自动重定向到%WINDIR%\SysWoW64\(见WoW64),所以你(或MS接入)会发现文件msorcl32.dll在文件夹c:\Windows\SysWOW64\

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

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

+0

谢谢你的评论。 我决定解决我们遇到的问题,而不是尝试去DSN-less。传统Access系统中有大约200个链接表,其中许多不再使用。我们没有预算在明年之前推出系统的重新平台。我的任务是帮助用户通过自动重新链接ODBC源(多个)来处理不断丢失的ODBC链接的棘手问题,但仅针对少数表。我可以利用DSN,但有时表的连接会返回3151错误。在这一点上,我只需要(ct'd)... –

+0

...能够弹出ODBC驱动程序DSN选择对话框,以便当链接表有3151错误时,用户可以重新选择他们的机器DSN并重新链接表格。 这是我所面临的唯一问题...我发现很难让机器的DSN对话框从代码中弹出来,然后通过再次询问密码/ UID来修复链接。 –

+0

如果你有一个正在使用的连接,并且你“失去了”该连接(一个链接表),那么你必须重新启动该应用程序。重新链接到已经工作的同一个表将尝试使用刚断开的连接。 –