如何使用FireDAC设置与Oracle的ODBC连接?

Jan*_*gen 5 delphi oracle odbc firedac delphi-10.2-tokyo

我可以通过本机驱动程序成功连接到Oracle,但无法使ODBC连接正常工作.Oracle 11g客户端软件安装在我的Windows 7 64位计算机上,以及从Microsoft Windows 32位的Instant Client下载下载的32位ODBC驱动程序 .

让我首先描述成功的联系:

TNSNames.ORA 包含Oracle 10安装的数据:

# TNSNAMES.ORA Network Configuration File: C:\oracle\ora92\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

VS2003-2005-10.TimeTellBV.nl =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = VS2003-2005-10)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = Orclvs10)
    )
  )
Run Code Online (Sandbox Code Playgroud)

我设置了我TFDConnection

DriverName := S_FD_OraId;
Params.Database := 'VS2003-2005-10';
Run Code Online (Sandbox Code Playgroud)

或者,我可以TNSNAMES.ORA通过直接指定绕过:

DriverName := S_FD_OraId;
Params.Database := '(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = VS2012-2012.timetellbv.nl)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl12.timetellbv.nl) ))';
Run Code Online (Sandbox Code Playgroud)

(如您所见,这是另一个不在的Oracle服务器TNSNAMES.ORA)

现在通过ODBC尝试失败

安装了两个32位Oracle ODBC驱动程序:

  • Microsoft ODBC for Oracle版本6.01.7601.19135 - 我认为这是随Win7操作系统提供的
  • Oracle in instantclient_11_2版本11.02.00.04 - 我是从顶部提到的源手动安装的(按照Oracle Instant Client ODBC发行说明中的建议以管理员身份运行).

我已经通过这些驱动程序设置了两个系统DSN,但都没有工作.

版本6 ODBC驱动程序,为其提供"Server"的TSNAMES.ORA条目名称:

在此输入图像描述

和版本11 Oracle驱动程序idem:

在此输入图像描述

对于第二个,我添加了另一个条目TNSNAMES.ORA,因为该对话框显然建议我必须通过该文件:

VS2012-2012.TimetellBV.nl =
  (DESCRIPTION=
    (ADDRESS_LIST = 
      (ADDRESS = (PROTOCOL = TCP)(HOST = VS2012-2012)(PORT = 1521))
    )
    (CONNECT_DATA = 
      (SERVICE_NAME = orcl12.timetellbv.nl)
    )
  )  
Run Code Online (Sandbox Code Playgroud)

我设置了我TFDConnection

DriverName := S_FD_ODBCId;
Params.Add('DataSource=' + lODBCName);   // The ODBC DSN Name
Params.Database := lDataSection.Values[INISTRING_DATABASENAME];
Run Code Online (Sandbox Code Playgroud)

此代码和de 32位ODBC管理中的测试按钮都失败并显示错误:

Unable to connect
SQLState IM003
The specified driver could not be loaded due to system error 127: cannot find procedure<br />
(Oracle in instantclient_11_2; D:\app\jan\product\11.2.0\client_1\SQORA32.dll)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

该文件夹是我的Oracle客户端软件的安装位置,它包含SQORA32.DLL(和其他)并且在我的系统路径中.

我尝试了各种变体,包括/排除域名,数据库名称等,但没有成功.

如何正确设置ODBC连接以连接到Oracle,通过FireDAC在Delphi-Tokyo 32位应用程序中使用?


什么也没有帮助:

  • 重新安装Visual Studio 2013 32位可再发行组件
  • 将sqora32.dll复制到Windows SysWOW64文件夹
  • 将ORACLE_HOME环境变量设置为d:\ app\jan\product\11.2.0\client_1 \
  • 将TNS_ADMIN环境变量设置为d:\ app\jan\product\11.2.0\client_1 \
  • 将sqora32.dll重命名为SQORA32.dll
  • 于2011年4月11日更换了c:\ windows\syswow64\mfc42.dll,日期为2011年4月27日的Oracle主文件夹中的较新版本

Jan*_*gen 2

我不知道出了什么问题。我找到了一个客户端安装程序可执行文件(即,它与“即时客户端”不同,它没有安装程序,并且重新安装也没有帮助),清理了我的虚拟机中的所有 Oracle 内容,使用“管理员”选择运行安装程序(=包中所有可用的软件),终于可以工作了。ODBC 也已安装。

唯一需要设置的是TFDCOnnection

DriverName := S_FD_ODBCId;
Params.Add('DataSource=' + lODBCName);
Run Code Online (Sandbox Code Playgroud)

lODBCNameODBC 系统 DSN 名称。

(我打算将此作为 10K 用户的评论,然后删除该问题,但这是不可能的,因为我今天早些时候对其进行了赏金。好吧,也许它可以为其他任何人服务)。