如何使用 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 驱动程序:
- Microsoft ODBC for Oracle 版本 6.01.7601.19135 - 我认为它随 Win7 OS
- Oracle instantclient_11_2 版本 11.02.00.04 - 我从顶部提到的源手动安装了这个(运行 作为管理员,如 Oracle Instant Client ODBC Release Notes 中所建议)。
我已经通过这些驱动程序设置了两个系统 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 位应用程序中使用?
什么也没有帮助:
- 重新安装 Visual Studio 2013 32 位可再发行组件
- 复制sqora32.dll到WindowsSysWOW64文件夹
- 正在将 ORACLE_HOME 环境变量设置为 d:\app\jan\product.2.0\client_1\
- 正在将 TNS_ADMIN 环境变量设置为 d:\app\jan\product.2.0\client_1\
- 将 sqora32.dll 重命名为 SQORA32.dll
- 将 2011 年 3 月 11 日的 c:\windows\syswow64\mfc42.dll 替换为 Oracle 主文件夹中 2011 年 4 月 27 日的更新
我不知道出了什么问题。我找到了一个客户端安装程序可执行文件(即不同于 "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 连接。
我可以通过本机驱动程序成功连接到 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 驱动程序:
- Microsoft ODBC for Oracle 版本 6.01.7601.19135 - 我认为它随 Win7 OS
- Oracle instantclient_11_2 版本 11.02.00.04 - 我从顶部提到的源手动安装了这个(运行 作为管理员,如 Oracle Instant Client ODBC Release Notes 中所建议)。
我已经通过这些驱动程序设置了两个系统 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 位应用程序中使用?
什么也没有帮助:
- 重新安装 Visual Studio 2013 32 位可再发行组件
- 复制sqora32.dll到WindowsSysWOW64文件夹
- 正在将 ORACLE_HOME 环境变量设置为 d:\app\jan\product.2.0\client_1\
- 正在将 TNS_ADMIN 环境变量设置为 d:\app\jan\product.2.0\client_1\
- 将 sqora32.dll 重命名为 SQORA32.dll
- 将 2011 年 3 月 11 日的 c:\windows\syswow64\mfc42.dll 替换为 Oracle 主文件夹中 2011 年 4 月 27 日的更新
我不知道出了什么问题。我找到了一个客户端安装程序可执行文件(即不同于 "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 连接。