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

时间:2018-06-25 14:37:54

标签: oracle delphi odbc firedac delphi-10.2-tokyo

我可以通过本机驱动程序成功连接到Oracle,但是无法获得ODBC连接。我的Windows 7 64位计算机上安装了Oracle 11g客户端软件,以及从以下位置下载的32位ODBC驱动程序: Instant Client Downloads for Microsoft Windows 32-bit

让我首先描述成功的连接:

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)
    )
  )

我通过{p>设置了TFDConnection

DriverName := S_FD_OraId;
Params.Database := 'VS2003-2005-10';

或者,我可以通过直接指定来绕过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) ))';

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

现在通过ODBC的尝试失败

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

  • 用于Oracle版本6.01.7601.19135的Microsoft ODBC-我认为这是Win7 OS附带的
  • Oracle在Instantclient_11_2版本11.02.00.04中-我从顶部提到的源手动安装了此文件(按照Oracle Instant Client ODBC Release Notes中的建议以admin身份运行)。

我已经通过这些驱动程序设置了两个系统DSN,但均无效。

版本6 ODBC驱动程序,为它提供“服务器”的TSNAMES.ORA条目名称:

enter image description here

和版本11 Oracle驱动程序的想法:

enter image description here

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

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

我通过{p>设置了TFDConnection

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

此代码和32位ODBC admin中的测试按钮均失败,并出现错误:

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)

enter image description here

该文件夹是我的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月27日的Oracle主文件夹中的较新版本替换了2011年3月11日的c:\ windows \ syswow64 \ mfc42.dll

2 个答案:

答案 0 :(得分:2)

我不知道怎么了。我发现一个客户端安装程序可执行文件(即与“即时客户端”不同,后者没有安装程序,并且其重新安装也没有帮助),从所有Oracle资料中清除了我的VM,然后以“ administrator”选择运行了安装程序(=软件包中的所有可用软件),然后终于可以使用了。 ODBC也已安装。

TFDCOnnection唯一需要设置的是:

DriverName := S_FD_ODBCId;
Params.Add('DataSource=' + lODBCName);

其中lODBCName是ODBC系统DSN名称。

(我打算将其保留为1万个用户的注释,然后删除该问题,但这是不可能的,因为我今天早些时候对它悬赏了。嗯,也许它可以为其他任何人提供服务。)

答案 1 :(得分:1)

我已经遇到过类似的问题。

我可以使用SQLPLUS或JDBC连接到Oracle数据库,但是当我尝试定义ODBC连接或.Net Linq连接时,这些操作将无效。

然后我修改了我的TNSNAMES.ora文件,并用SID 替换了SERVER-NAME ,突然之间可以进行ODBC连接。