【问题标题】:How do I setup an ODBC connection to Oracle using FireDAC?如何使用 FireDAC 设置与 Oracle 的 ODBC 连接?
【发布时间】:2018-06-25 14:37:54
【问题描述】:

我可以通过本机驱动程序成功连接到 Oracle,但无法使 ODBC 连接正常工作。 Oracle 11g 客户端软件安装在我的 Windows 7 64 位机器上,以及从下载的 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 驱动程序:

  • Microsoft ODBC for Oracle 版本 6.01.7601.19135 - 我认为这是 Win7 操作系统附带的
  • instantclient_11_2 版本 11.02.00.04 中的 Oracle - 我从顶部提到的源手动安装了它(按照 Oracle Instant Client ODBC Release Notes 中的建议以管理员身份运行)。

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

第 6 版 ODBC 驱动程序,为其提供 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];

此代码和 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)

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

【问题讨论】:

  • 你在这个 q 中提到 FireDAC 我有点困惑,因为你似乎在谈论 ODBC 配置:当你说你设置的 32 位系统 DSN 都不起作用时,Windows System-DSN 向导的最后一页肯定给了您测试 DSN 的机会?那么您为什么要这样做呢?测试是失败还是成功?
  • @MartynA 是的,它基本上是 ODBC,但最后是让 ODBC 连接与 TFDConnection(使用哪个参数,服务器名称或数据库)一起工作。我已经提到过,测试按钮和 FireDAC 连接都失败并出现 127 错误。

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


【解决方案1】:

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

需要为TFDCOnnection 设置的唯一内容是:

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

lODBCName 是 ODBC 系统 DSN 名称。

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

【讨论】:

    【解决方案2】:

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

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

    然后我修改了我的 TNSNAMES.ora 文件并将 SERVER-NAME 替换为 SID,突然 ODBC 连接成为可能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 2019-08-23
      相关资源
      最近更新 更多