我可以通过本机驱动程序成功连接到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驱动程序:
我已经通过这些驱动程序设置了两个系统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)
)
)
我通过{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)
该文件夹是我的Oracle客户端软件的安装目录,它包含SQORA32.DLL
(及其他文件夹),并且位于我的系统路径中。
我尝试了各种变体,包括/不包括域名,数据库名称等,但均未成功。
如何正确设置ODBC连接以连接到Oracle,以便通过FireDAC在Delphi-Tokyo 32位应用程序中使用?
什么也没有帮助:
答案 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连接。