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

How do I setup an ODBC connection to Oracle using FireDAC?

我可以通过本机驱动程序成功连接到 Oracle,但无法使 ODBC 连接正常工作。我的Windows7 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)
    )
  )

我用

设置了我的 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 驱动程序:

我已经通过这些驱动程序设置了两个系统 DSN,但都不起作用。

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

和版本 11 Oracle 驱动程序同上:

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

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

我用

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

此代码和 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.2.0\client_1\SQORA32.dll)

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

我试过各种变体including/excluding域名、数据库名等,都没有成功。

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


什么也没有帮助:

我不知道出了什么问题。我找到了一个客户端安装程序可执行文件(即不同于 "instant client",它没有安装程序,重新安装也无济于事),从所有 Oracle 东西中清理了我的虚拟机,运行 安装程序带有 'administrator' 选择(=软件包中所有可用的软件),这最终起作用了。 ODBC 也已安装。

唯一需要为 TFDCOnnection 设置的是:

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

其中 lODBCName 是 ODBC 系统 DSN 名称。

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

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

我可以使用 SQLPLUS 或 JDBC 连接到 Oracle 数据库,但是当我尝试定义 ODBC 连接或 .Net Linq 连接时,它们不起作用。

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