【发布时间】: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